Использование NeroAAC для кодирования под Linux
Те, кто сталкивался с кодированием видео для он-лайна на своих серверах под Linux наверняка в курсе, что средства FFMPEG для кодирования звука в AAC, а именно библиотека libfaac дает ужасное качество на низких битрейтах. Работа над ней была заброшена несколько лет назад и она не поддерживает профиль HE. Ища выход из сложившейся ситуации оказалось, что все не так плохо и для этих целей можно использовать neroAAC (само собой только для личных целей, читайте лицензию ^_^), который дает потрясающие результаты даже для битрейтов вроде 32кбпс.
1) Качаем последнюю версию отсюда: http://www.nero.com/eng/release-notes-nerodigital-nero-aac-codec.html
2) Находим в архиве linux/neroAacEnc
и копируем на сервер
3) Устанавливаем: install –D –m755 linux/neroAacEnc /usr/bin/
Предположим раньше мы кодировали так:
/usr/bin/ffmpeg -i "input.mp4" -pass 1 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp.mp4"
/usr/bin/ffmpeg -i "input.mp4" -pass 2 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -acodec libfaac -ab 128k -ac 2 -async 1 "tmp2.mp4"
/usr/bin/qt-faststart "tmp2.mp4" "out.mp4"
Теперь это будет выглядеть так:
/usr/bin/ffmpeg -i "input.mp4" -pass 1 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp.mp4"
/usr/bin/ffmpeg -i "input.mp4" -pass 2 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp2.mp4"
/usr/bin/ffmpeg -i "input.mp4" -acodec pcm_s16le -vn "audio1.wav"
/usr/bin/neroAacEnc -br 65536 -2pass -if "audio1.wav" -of "audio1.aac"
/usr/bin/ffmpeg -i "input.mp4" -i "audio1.aac" -acodec copy -vcodec copy -f mp4 "tmp3.mp4"
/usr/bin/qt-faststart "tmp3.mp4" "out.mp4"
Пояснения построчно:
1) Первый проход кодирования видео (без звука)
2) Второй проход кодирования видео (без звука)
3) Вытаскиваем звуковую дорожку из видео в несжатом виде
4) Кодируем звуковую дорожку в AAC-формат
5) Собираем звук и видео в единый файл без перекодирования
6) Переносим метаданные в начало файла
Profit!