/ Статьи / Видео / Работа с видео в Linux. Часть 3. Mencoder. /

Работа с видео в Linux. Часть 3. Mencoder.

Дата публикации: June 14, 2010, 7:43 p.m.
Теги: mencoder, видео, linux, mplayer,
Автор: Brainsburn

работа с видео в линукс

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_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 -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: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







Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(6)

# rulet June 1, 2011, 3:23 a.m.
Как лучше перекодировать любой swf(не flv) в avi или mp4? Есть идеи?

# Mental Aug. 14, 2011, 9:41 a.m.
Большой спасибо!

Наличие таких статей всегда радует ибо редкость.
Сколько и как заявлено - ровно столько и так написано.

Великое дело - порядок в голове.

# Гость Nov. 8, 2011, 1:59 p.m.
Очень годная и полезная статья, автору большое спасибо!

# cmygeHm July 7, 2012, 2:59 p.m.
При попытке выполнить пример:
 
MEncoder SVN-r33713-4.6.1 (C) 2000-2011 MPlayer Team
Option of: Unknown suboption mp4
Error parsing option on the command line: -of
[code]

# Brainsburn July 7, 2012, 11:30 p.m.
cmygeHm, какой именно пример выполняете? Попробуйте вместо mp4 указывать один из вариантов, которые выведет mencoder -of help.

# В.Семенов Feb. 13, 2014, 12:06 p.m.
Добротная статья!
Единственная в своем роде.
Самое ценное - реально работающие примеры. А также и то, что эта статья - о Mencoder.
Отличный инструмент! И хоть он и не имеет красивого графического интерфейса, но работает он непревзойденно быстро (например склеивание файлов .AVI в Windows идет со скоростью 30 фр/сек,
а в mencoder - 1500).
Также и произвольное изменение размера кадра нельзя сделать никаким другим инструментом.
(кроме Avidemux, но там надо подключать фильтры Resize + Add Border + Grop и несколько раз “пристреляться”, чтобы попасть в нужный кодек. И часто попадания не получается).
Спасибо и удачи Автору !

Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

xx: > “Не стоит сильно ругать и проклинать По... >>>
Eugene: Галка, внешний вид изменить совершенно не сложно.... >>>
Галка: А сильно сложно Убунту переделывать?... >>>
Brainsburn_: “Написание в 1-й” подразумевает “в первой”, а не в... >>>
ZZZ: “Написание в 1-й” подразумевает &ldquo... >>>