|
|||||||
Настройка качества кодирования в FFmpeg: переменный и постоянный битрейт для Mpeg4
Время создания: 30.10.2016 20:31
Автор: Xintrea
Текстовые метки: ffmpeg, mpeg4, качество, битрейт, vbr, variable bitrate, constant bitrate
Раздел: Компьютер - Linux - Видео в Linux - FFmpeg
Запись: xintrea/mytetra_syncro/master/base/1477848708tof4x0wqcd/text.html на raw.github.com
|
|||||||
|
|||||||
Стандарт MPEG-4 итерации 2, известный так же как MPEG-4, Xvid и DivX - это видео-кодек, который широко использовался до распространения кодека H.264. Конвертор FFmpeg имеет два энкодера для вывода видео в формате MPEG-4. Это внешнее кодирование с помощью библиотеки libxvid: ffmpeg -i input.avi -c:v libxvid output.avi и встроенный энкодер Mpeg-4: ffmpeg -i input.avi -c:v mpeg4 -vtag xvid output.avi Встроенный энкодер имеет то преимущество, что не требует дополнительных библиотек. Оба энкодера обеспечивают выходной поток примерно одинакового качества, но для более низких битрейтов (например, для 1000 Кби/сек для формата 720p), libxvid будет давать более лучшее качество чем mpeg4. По-умолчанию, четырехбайтовая сигнатура стандарта FourCC, прописываемая в файл формата Mpeg4, будет FMP4. Если необходимо прописать другой код FourCC, можно воспользоваться опцией -vtag. Например, опция -vtag xvid заставит FFmpeg сохранить в сигнатуре FourCC формат XVID, а не формат по-умолчанию. Примечание: в этом руководстве описывается использование контейнера AVI для содержимого формата Xvid, так как такая связка поддерживается всеми, даже достаточно старыми устройствами. Для современных устройств лучше подходит формат H.264 для видео, и AAC для аудио. Настройка переменного битрейта через опцию qscale Вы можете установить уровень качества генерируемого видеопотока через опцию -qscale:v n (данная опция имеет так же сокращенное обозначение -q:v n), где n - это число от 1 до 31. Значение 1 обозначает лучшее качество и более большую длину результирующего файла, а 31 - более низкое качество и, соответственно, более малый размер файла. Эта опция задает режим с переменным битрейтом, и примерно аналогична опции -qp (постоянный параметр квантизации QP) для кодека x264. Использование переменного битрейта является предпочтительным способом, по сравнению с постоянным (константным) битрейтом. Так же, можно указывать уровень качества для аудио-потока с помощью опции -qscale:a n (или, используя сокращение, -q:a n). Значение n меняется в зависимости от используемого энкодера. Для кодирования звука в MP3 нужно указывать значение, воспринимаемое енкодером libmp3lame. Данные значения можно найти в руководстве MP3 Encoding Guide. Пример: ffmpeg -i input.avi -c:v mpeg4 -vtag xvid -qscale:v 3 -c:a libmp3lame -qscale:a 4 output.avi Необходимость в использовании максимального качества -qscale:v 1 возникает достаточно редко. Обычно максимальное качество выствляется при подготовке видео для использования в программах редактирования видео (так называемое монтажное видео), но для такого видео лучше использовать монтажный кодек, например mjpeg (дает наилучшее соотношение размер/качество) или Huffyuv (сжатие без потерь с большим итоговым размером данных). Так же следует обратить внимание, что итоговое видео, полученное через libxvid займет гораздо больше места, чем при использовании встроенного в FFmpeg енкодера mpeg4. Постоянный битрейт Также, в FFmpeg можно настроить постоянный (константный) битрей через опцию -b:v. Постоянный битрейт лучше всего использовать при друхпроходном кодировании. Вот адаптированный пример из руководства пользователя x264: ваше видео имеет продолжительность 10 минут (т. е. 600 секунд) и требуется получить размер выходного файла равный 50Мб. Тогда битрейт равен размеру файла деленному на продолжительность файла: (50 MB * 8192) / 600 seconds = ~683 kilobits/s total bitrate где 8192 - это конвертация Мб в килобиты. Учитывая, что поток аудио примерно 128 Кбит/сек, имеем: 683k - 128k (desired audio bitrate) = 555k video bitrate Двухпроходное кодирование Пример использования кодирования в два прохода для FFmpeg: ffmpeg -y -i input.avi -c:v mpeg4 -vtag xvid -b:v 555k -pass 1 -an -f avi /dev/null ffmpeg -i input.avi -c:v mpeg4 -vtag xvid -b:v 555k -pass 2 -c:a libmp3lame -b:a 128k output.avi Небольшой трюк для пользователей Windows: вместо /dev/null можно писать NULL. На певом этапе будет создан специальный индексный файл, который будет использоваться при кодировании на втором этапе. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|