mencoder

Post on 22-Mar-2016

216 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

top related