Mencoder

Page 1

Работа с видео в 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 - аудио кодеки из библиотеки libavcodec faac - FAAC AAC кодер


toolame - MPEG Audio Layer 2 twolame - MPEG Audio Layer 2 pcm - несжатый 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-2 asf - Advanced Streaming Format avi - Microsoft Audio/Video формат wav - Waveform аудио формат swf - Macromedia Flash flv - Macromedia Flash видео rm - RealMedia au - SUN AU nut - открытый NUT формат (экспериментальный) mov - QuickTime mp4 - 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 -lavcopts vcodec=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 -vf scale=320:240 Опция -vf нужна для указания видео фильтра. В этом примере размеры видео будут изменены до 320:240. Будьте осторожны - если не сохраните пропорции, видео картинка может стать сплющенной или растянутой. Чтобы изменить размеры видео с сохранением пропорций, нужно вместо ширины видео указать "-2": $ mencoder input.avi -o out.avi -of lavf -oac copy -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=-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_fra mes=2 Если видео не высокодинамичное, то последние два параметра можно опустить. И еще один момент - параметры qpel и v4mv нельзя использовать с MPEG-1/MPEG-2 видео.

XVID Недавно, друг попросил меня сжать 3ГБ видео, записанное на видеокамеру в формате MPEG-2. Сначала, я пережал его в mpeg4 таким образом: $ mencoder video.mpg -o video.mkv -of lavf -oac lavc -ovc lavc -lavcopts vcodec=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:vbitr ate=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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.