mencoder
DESCRIPTION
ÂTRANSCRIPT
Работа с видео в Linux. Mencoder.
Mencoder - свободный кодировщик видео, входящий в составпроектаMplayer . Информация в этой статье рассчитана не на
профессионалов, а, скорее, на обычных пользователей, которым приходится решать задачи по кодированию видео на домашних
компьютерах.
Основы
Аудио и видео кодеки, и форматы видео файлов Для указания аудио кодека в mencoder используется опция -oac , для указания видео
кодека - -ovc . Список доступных видео кодеков можно просмотреть командой
$ mencoder -ovc help
А список аудио кодеков, соответственно
$ mencoder -oac help
Этот список на разных системах может быть разным. Он зависит от того, с какими опциями собран mplayer.
Некоторые видео кодеки:
copy - копирование кадров, без пересжатия. Не работает с фильтрами (изменение размеров, crop и тд)
xvid - XviD, MPEG-4 Advanced Simple Profile (ASP) кодекx264 - H.264, MPEG-4 Advanced Video Coding (AVC) кодекframeno - специальный кодек только для аудиофайлов.raw - несжатое видео.lavc - кодеки из библиотеки libavcodec. Лучшее качество!qtvideo - библиотеки QuickTime
Аудио кодеки:
copy - копирование аудио без перекодированияmp3lame - MP3 Lame кодеки. Поддерживаются VBR, ABR и CBR битрейты.lavc - аудио кодеки из библиотеки libavcodecfaac - FAAC AAC кодер
toolame - MPEG Audio Layer 2twolame - MPEG Audio Layer 2pcm - несжатый PCM звук
Форматы видеофайлов
Аудио и видео кодеками (такими, как MP3, Wav, Xvid, H264) кодируется аудио и видео содержание соответственно. Все это может быть сохранено в файле - AVI,
MKV, OGG, MP4 и т.д. Форматы видеофайлов, например AVI, не являются кодеками, которыми сжимается видео/аудио. AVI (как и другие форматы) - контейнер. Грубо
говоря, его можно представить ящиком, в который можно положить, сжатое в DivX видео, звук и еще кое-что. Кстати о AVI - это довольно старый формат и, я считаю,
использовать его не рекомендуется. Новые форматы, такие как MKV (Matroska) и OGG/OGM, намного более удобны.
Форматы файлов (контейнеры), поддерживаемых вашим mencoder-ом, можно просмотреть командой
$ mencoder -of help
Форматы файлов:
avi - Microsoft Audio/Video форматmpeg - MPEG-1/2 форматlavf - форматы, поддерживаемые библиотекой libavformat.
Формат определяется по расширению файла. Подробнее см. ниже.
Форматы файлов, поддерживаемые библиотекой libavformat
mpg - MPEG-1, MPEG-2asf - Advanced Streaming Formatavi - Microsoft Audio/Video форматwav - Waveform аудио форматswf - Macromedia Flashflv - Macromedia Flash видеоrm - RealMediaau - SUN AUnut - открытый NUT формат (экспериментальный)mov - QuickTimemp4 - MPEG-4 форматdv - Sony Digital видеоmkv - Перспективный и открытый аудио/видео формат Matroska.
Сравнительную таблицу медиаконтейнеров вы можете посмотреть
Libavcodec
Как вы могли заметить, видео и аудио кодеки можно выбирать не только из списка поддерживаемых mencoder -ом, но и из тех, которые поддерживает
библиотека libavcodec . Остановимся на этом подробнее.
Libavcodec - качественная библиотека для кодирования и декодирования видео/аудио-файлов, которая является частью проекта ffmpeg.
Видео кодеки, поддерживаемые libavcodec:
mjpeg Motion JPEG ljpeg JPEG без потери качества jpegls JPEG LS
targa Targa рисунок gif GIF рисунок
bmp BMP рисунок png PNG рисунок
h261 H.261 h263 H.263
h263p H.263+ mpeg4 ISO стандарт MPEG-4 (DivX, Xvid совместимый)
msmpeg4 вариант пре-стандарта MPEG-4 от MS, v3 (он же DivX3) msmpeg4v2 вариант пре-стандарта MPEG-4 от MS, v2 (используемый в
старых ASF файлах) wmv1 Windows Media Video, версия 1 (он же WMV7) wmv2 Windows Media Video, версия 2 (он же WMV8)
rv10 RealVideo 1.0 rv20 RealVideo 2.0
mpeg1video MPEG-1 видео mpeg2video MPEG-2 видео
huffyuv сжатие без потерь ffvhuff huffyuv без потерь, модифицированный FFmpeg
asv1 ASUS Видео v1 asv2 ASUS Видео v2
ffv1 видео кодек без потерь из FFmpeg svq1 Sorenson видео 1
flv Sorenson H.263 используемый в Flash Видео flashsv Flash Screen Video dvvideo Sony Digital Video
snow экспериментальный кодек FFmpeg, основанный на вейвлетах zmbv Zip Motion Blocks Video dnxhd AVID DNxHD
Аудио кодеки, поддерживаемые libavcodec:
ac3 Dolby Digital (AC-3) adpcm_* Форматы Adaptive PCM, смотрите дополнительную таблицу
flac Free Lossless Audio Codec (FLAC) g726 G.726 ADPCM
amr_nb 3GPP Adaptive Multi-Rate (AMR) узкополосный amr_wb 3GPP Adaptive Multi-Rate (AMR) широкополосный
faac Advanced Audio Coding (AAC) - используя FAAC gsm ETSI GSM 06.10 full rate
gsm_ms Microsoft GSM libmp3lame MPEG-1 audio layer 3 (MP3) - используя LAME
libmp2 MPEG-1 audio layer 2 (MP2) pcm_* PCM форматы, смотрите дополнительную таблицу
roq_dpcm Id Software RoQ DPCM sonic экспериментальный кодек от FFmpeg с потерями (lossy)
sonicls экспериментальный кодек от FFmpeg без потерь (lossless) vorbis Vorbis wmav1 Windows Media Audio v1 wmav2 Windows Media Audio v2
Несколько простых примеров по кодированию видео с помощью mencoder.
Видео в формате FLV конвертируем в MPEG-4 видео в формате MKV:
$ mencoder input.flv -o out.mkv -of lavf -oac mp3lame -ovc lavc -lavcoptsvcodec=mpeg4
Определения: input.flv - исходный файл
опция -o задает имя выходного файла - out.mkv опция -of указывает формат выходного файла - lavf
lavf - форматы медиа файлов, поддерживаемые библиотекой libavformat (определяется по расширению файла)
опция -oac указывает аудио кодек - mp3lame mp3lame - MPEG audio layer 3 (MP3 аудио кодек)
опция -ovc указывает видео кодек - lavc lavc -lavcopts vcodec=mpeg4 - видео кодек, поддерживаемый библиотекой
libavformat. Кодек указывается через -lavcopts vcodec=название-кодека. mpeg4 - DivX, XviD
совместимый MPEG-4 стандарт.
В этом примере не указаны опции для самих аудио и видео кодеков,поэтому mencoder определит их сам. В большинстве случаев, размер файла
получится больше, чем хотелось бы, а качество - хуже, поэтому, лучше указать хотя бы битрейт для видео. Если вы откроете получившийся файл out.mkv в mplayer в
терминале, то увидите, что mplayer определил аудио и видео кодеки, и формат файла (контейнер):
Воспроизведение out.mkv. Обнаружен Matroska формат файла!
VIDEO: [mp4v] 320x240 24bpp 25.000 fps 0.0 kbps ( 0.0 kbyte/s)==========================================================================
Открываю декодер видео: [ffmpeg] FFmpeg's libavcodec codec family Выбран видеокодек: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
==========================================================================
Открываю декодер аудио: [mp3lib] MPEG layer-2, layer-3 AUDIO: 22050 Hz, 2 ch, s16le, 8.0 kbit/1.13% (ratio: 1000->88200) Выбран аудиокодек: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
Видео в формате FLV конвертируем в MPEG-4 видео в формате AVI:
$ mencoder input.flv -o out.avi -of lavf -oac mp3lame -lameopts abr:br=64 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=400
В этом примере был указан битрейт для аудио и видео кодеков - усреднненый битрейт для аудио и переменный - для видео.
Битрейт
Битрейт - параметр, определяющий с каким качеством будет кодировано видео/аудио. Напрямую влияет на качество и размер выходного файла. Проще
говоря, битрейт 800кбит/с означает, что на одна секунда видео/аудио "весит" 800кбит (100кбайт). Существует три варианта битрейта.
CBR - постоянный битрейтVBR - переменный битрейтABR - усредненный битрейт
Постоянный битрейт. Не меняется по всей длительности файла. Преимущество: что можно точно рассчитать размер конечного файла. Недостаток: размер файла
будет всегда больше, чем при использовании VBR или AVR.
Переменный битрейт. Меняется по всей длительности файла. Пользователь задает уровень желаемого качества и кодек на этой основе кодирует файл. Битрейт
меняется в зависимости от "сложности" видео/аудио фрагмента. Преимущество: наилучшее качество и размер выходного файла. Недостаток: размер файла трудно
предсказать.
Усредненный битрейт. Битрейт задается пользователем в кбит/с, а кодек изменяет его в некоторых пределах. Отличие от VBR в том, что кодек меняет
битрейт более "осторожно". Преимущество: качество получается лучше, чем при использовании CBR и примерный размер файла можно предсказать. Недостаток:
Качество - хуже, чем при использовании VBR.
Кодирование видео в два этапа (двухпроходное кодирование)
Этот способ позволяет получить немного лучшее качество и, иногда, меньший размер файла, чем при кодировании в один этап. При первом кодировании видео
mencoder создает несколько временных файлов с информацией о медиа содержании, а на втором этапе, с использованием этих файлов, создает выходной
файл.
Двухпроходное кодирование видео без пересжатия звука:
$ mencoder input.flv -o /dev/null -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 $ mencoder input.flv -o out.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2
Изменение размеров видео (не размер файла)
Часто приходится изменять разрешение видео. Это может понадобиться для уменьшения размера файла, ведь для того, чтобы получить хорошую картинку на
большом разрешении, нужен больший битрейт, чем для более маленького. Чтобы изменить разрешение у видео, можно использовать фильтр scale:
$ mencoder input.avi -o out.avi -of lavf -oac copy -ovc lavc -lavcopts vcodec=mpeg4 -vfscale=320:240
Опция -vf нужна для указания видео фильтра. В этом примере размеры видео будут изменены до 320:240. Будьте осторожны - если не сохраните пропорции, видео
картинка может стать сплющенной или растянутой. Чтобы изменить размеры видео с сохранением пропорций, нужно вместо ширины видео указать "-2":
$ mencoder input.avi -o out.avi -of lavf -oac copy -ovc lavc -lavcopts vcodec=mpeg4 -vfscale=-2:240
В этом случае разрешение будет изменено пропорционально- mencoder подстроит ширину автоматически.
Уменьшение размера видео-файла
Если вам нужно сжать видео-файл, который занимает слишком много места, вы должны в первую очередь, изменить битрейт. Если вы измените разрешение или как-либо еще усечете видео, размер файла не изменится, пока вы не измените битрейт. Что такое битрейт и с чем его едят, описано выше. Так же, совсем чуть-
чуть уменьшить размер выходного файла поможет выбор правильного контейнера (формата) файла.
Среди форматов медиа-файлов больше всего распространен контейнер AVI. Однако, это довольно старый формат, который содержит много избыточности и
мало возможностей. На мой взгляд, контейнер Matroska (*.MKV) имеет большие потенциалы. Matroska - открытый, свободный формат контейнера для видео-
файлов, который содержит большое кол-во возможностей, не доступных в таких старых контейнерах, как AVI.
Покажу на примере. У меня имеется видео-запись, размером ровно 700МБ в формате AVI. Я лишь изменил контейнер, не изменяя видео и аудио, и получил
размер на 5МБ меньше:
$ ls -sh video.avi 700M video.avi
$ mencoder video.avi -o out.mkv -of lavf -oac copy -ovc copy $ ls -sh out.mkv
695M out.mkv
Дополнительные опции кодирования (libavcodec)
Указание расширенных опций кодирования видео при использовании библиотеки libavcodec
Параметры задаются с помощью опции -lavcopts , например: -lavcopts vcodec=mpeg4:vbitrate=600:mbd=2:trell
Кстати, опции mbd=2, trell и v4mv весьма желательны если вы хотите получить хорошее качество и у вас не MPEG-1/2 видео.
Описание некоторых полезных опций libavcodec:
vb_strategy=1 - пригодится для кодирования высокодинамичного видео. Желательно, использовать в паре с vmax_b_frames=2 , т.к. без этого, vb_strategy=1 в
некоторых случаях может навредить качеству. dia - диапазон поиска движения. Для лучшего качества, но медленного
кодирования - от 2 до 4 и значение -1 - для быстрого кодирования, но менее хорошего качества.
last_pred - кол-во предсказателей движения, берущихся из предыдущего кадра. Значения 1-3 улучшат качество ценой небольшой потери скорости кодирования.
cbp,mv0 - контролирует выбор макроблоков. Небольшое снижение скорости и небольшое улучшение качества.
В документации к mencoder приводятся примеры опций для кодирования видео с высоким качеством.
Очень высокое качество:
vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2
Высокое качество:
vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo
Быстрое кодирование:
vcodec=mpeg4:mbd=2:trell:v4mv:turbo
От себя я приведу немного упрощенный пример для кодирования с высокимкачеством:
vcodec=mpeg4:mbd=2:trell:v4mv:cbp:mv0:last_pred=3:dia=2:vb_strategy=1:vmax_b_frames=2
Если видео не высокодинамичное, то последние два параметра можно опустить. И еще один момент - параметры qpel и v4mv нельзя использовать с MPEG-1/MPEG-2
видео.
XVID
Недавно, друг попросил меня сжать 3ГБ видео, записанное на видеокамеру в формате MPEG-2.
Сначала, я пережал его в mpeg4 таким образом:
$ mencoder video.mpg -o video.mkv -of lavf -oac lavc -ovc lavc -lavcoptsvcodec=mpeg4:mbd=2:trell:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vbitrate=1300:acodec=libmp3lame:abitrate=128
но, качество получилось не на высоте. Уж не знаю, может я сделал что-то не так, но затем я вместо mpeg4 использовал xvid и качество вышло _заметно_ лучше:
$ mencoder video.mpg -o 1-video.mkv -of lavf -oac lavc -lavcopts abitrate=128:acodec=libmp3lame -ovc xvid -xvidencopts
bitrate=1300:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg
К сожалению, скриншот выложить не могу, т.к. запись приватная.
Xvid - свободная библиотека для кодирования видео стандарта MPEG-4. Является открытым аналогом и основным конкурентом проприетарного кодека DivX.
Настройки кодирования xvid задаются опцией -xvidencopts. Наилучшее качество:
chroma_opt:vhq=4:bvhq=1:quant_type=mpeg
Высокое качество:
vhq=2:bvhq=1:chroma_opt:quant_type=mpeg
Быстрое сжатие:
turbo:vhq=0