четверг, 29 сентября 2011 г.

MEncoder - примеры кодирования

Описание


MEncoder - это кросплатформенный инструменты для кодирования видео.
Данная статья предназначена не для полного описания всех его возможностей, а только самых распространенных и часто используемых. Естественно что большинство графических кодировщиков могут делать тоже что и mencoder, но он дает преимущество при пакетном кодировании, или кодировании на серверах.



Установка


Достаточно найти mencoder в Центре Приложений Ubuntu и установить. Можно и через консоль:
sudo apt-get install mencoder
 
 

Сборка из исходников


#Устанавливаем все зависимости
sudo apt-get build-dep mencoder
#Устанавливаем svn, для получения последней версии исходников
sudo apt-get install svn
#Качаем исходники
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mencoder
#Переходим в папку с исходниками
cd mencoder
#Конфигурируем
./configure --disable-mplayer --prefix=/usr
#Собираем
make
#Устанавливаем
sudo make install



Основные ключи


Ключ Описание
-ovc help Список всех доступных видео кодеков
-oac help Список всех доступных аудио кодеков
-vf help Список всех доступных аудио/видео фильтров
-of help Список всех доступных выходных форматов
-ss <sec> Начальное время кодирования
-endpos <sec> Конечное время кодирования
-mc <sec> Максимальная величина корректировки A-V синхронизации на один кадр
-noskip Запрет на пропускание кадров. Помогает при рассинхроне
-novideo Отключение видео
-nosound Отключение звука
-nosub Отключение субтитров
-ovc copy Копирование видео (сохранение без изменений)
-oac copy Копирование звука (сохранение без изменений)
-ofps <fps> Количество кадров в секунду
-aid <ID> Порядковый номер кодируемой аудиодорожки (по умолчанию 0)
-alang <language> Язык кодируемой аудиодорожки (две буквы для DVD и три для MKV)
-sid <ID> Порядковый номер субтитров
-slang <language> Язык субтитров
-subcp <encoding> Кодировка субтитров

Примеры


  • Кодировать 60 секунд начиная с 100-й секунды:
-ss 100 -endpos 60
  • Помогает при рассинхроне:
-noskip -mc 0
  • Выбираем кодировку субтитров:
-subcp cp1251



Полезные фильтры


Фильтр Описание
-vf <filter>=help Получаем справку по фильтру (если она есть)
crop=w:h:x:y Обрезает изображение до указанного размера, отбрасывая остальное.
Начальная позиция обрезаемого изображения, по умолчанию, в центре
scale=w:h Масштабируем изображение
dsize=w:h Задаем размер/пропорции отображаемого видео (не путать с размером кадра).
Фильтр сам по себе ничего не делает, он всего лишь указывает как масштабировать дальше
rotate=0 Поворот на 90 градусов по часовой стрелке и отражение (по умолчанию)
rotate=1 Поворот на 90 градусов по часовой стрелке
rotate=2 Поворот на 90 градусов против часовой стрелки
rotate=3 Поворот на 90 градусов против часовой стрелки и отражение
flip Зеркально отражаем изображение по вертикали
mirror Зеркально отражаем изображение по горизонтали
harddup Дублирующиеся кадры будут принудительно кодироваться на выходе.
Необходим, если вы после кодирования планируете редактировать видеофайл. Следует размещать в самом конце списка фильтров

Примеры


* фильтры разделяются запятой
  • Масштабировать видео до 640pix по ширине:
-vf dsize=640:-2,scale=640:-2
  • Обрезать видео, c шириной 720 и высотой 400:
-vf crop=720:400:0:0



x264 (-x264encopts)


Двухпроходное кодирование:
#первый проход
mencoder "your_movie" -ovc x264 -x264encopts pass=1:turbo:qp=22:threads=0:bframes=3 -nosound -o /dev/null
#второй проход
mencoder "your_movie" -ovc x264 -x264encopts pass=2:qp=22:subq=7:8x8dct:trellis=2:threads=0:frameref=3:bframes=3:weightb -oac lavc -lavcopts acodec=aac:abitrate=384 -o "movie_out.avi"
* значение bframes должно совпадать для обоих проходов.
Кодирование в один проход:
mencoder "your_movie" -ovc x264 -x264encopts crf=22:subq=7:8x8dct:trellis=2:threads=0:frameref=3:bframes=3:weightb -oac lavc -lavcopts acodec=aac:abitrate=384 -o "movie_out.avi"
*предпочтительнее в большинстве случаев.

Разбор опций


  • Устанавливаем средний битрейт. Чем выше - тем лучше качество (понятное дело что не выше исходного ); чем ниже - тем хуже. Нужно выбирать или битрейт, или квантователь.
bitrate=<value>
  • Задаем качество макроблока, квантователь. По сути задаем качество выходного изображения. Где 0 - оригинал, а любое значение выше - ухудшение качества. Полезные значения в районе 20-40.
qp=<0-51>
  • Задействует режим постоянного качества и выбирает его уровень. Эта опция позволяет каждому кадру использовать собственный QP, основанный на сложности кадра.
crf=<1-50>
* необходимо использовать: или bitrate, или qp, или crf.
  • Номер прохода. В двухпроходном варианте 1-й проход собирает информацию о качестве видео; сильно нагружающие CPU опции можно убрать. -nosound -o /dev/null - игнорируем звук и выходной файл. Также применяют 3-х проходный вариант, но это в большинстве случаев бесполезно.
pass=<1-2>
  • Ускорение первого прохода. Только при первом проходе, в двух и более проходном режиме!
turbo
  • Этот параметр контролирует соотношение между качеством и скоростью вносимыми в процессе принятия решений об оценке движения. 1-5 - высокая скорость, худшее качество. 6-7 максимальное качество, долгое кодирование. Время кодирования с subq=7 может быть практически до 2-х раз дольше subq=1. Но при subq=1 ухудшение картинки очень заметно.
subq=<1-7>
  • Разрешает умное использование преобразований 8×8 в I-кадре. Адаптивное 8×8 дискретное косинусное преобразование (DCT).
8x8dct
  • Полезно для динамичного видео, для по большей части статичного видео - бесполезна. Падение в скорости кодирование до 15%.
partitions=all
  • Улучшает затухания и градиенты цвета (небо и т.п.).
weightb
  • Треллис квантование для повышения эффективности сжатия. Вариант «на макроблоках» (1) - хороший компромисс между падением скорости и повышением эффективности. Лучше всего «везде» (2), но при условии совместной работы с psy-trellis, иначе происходит незначительное замыливание мелких деталей. На всех решениях скорость падает очень сильно. При равном 0 - отключено. Для мультипликации, аниме, скринкастов лучше выключить.
trellis=<0-2>
  • Устанавливает максимальное число параллельных B-фреймов. Большое значение может привести к значительному улучшению эффективности степени сжатия. B-фреймы хранят данные об изменениях относительно прошлого кадра и разницы с будущим. Рекомендуемое значение: 2-5. Для анимэ можно и 6-12.
bframes=<1-16>
  • Чем больше референсных кадров, тем медленнее кодирование. При 5-ти и более референсных кадров качество повышается незначительно. Для аниме, скринкастов и прочего «статичного» видео можно и больше. 4 - максимальное для видео для 1080p, и 9 - максимальное для 720p (следуя спецификациям level 4.1, для поддержка бытовой техники).
frameref=<0-16>
  • Порождает потоки для параллельного кодирования на нескольких CPU (по умолчанию: 1). Имеет незначительный негативный эффект на качество сжатия. 0 или auto говорит x264 определить количество имеющихся у Вас CPU и подобрать соответствующее количество потоков.
threads=<0-4>
  • Метод оценки движения полного пикселя. Рекомендуется использовать umh.
me=<dia,hex,umh,esa>
  • Определяет максимальное количество попыток (с измененными данными) нахождения оптимального варианта при поиске вектора движения макроблока. Чем больше, тем лучше качество.
me_range=<4-64>
  • Отключение опции предварительной DCT трансформации сигнала непосредственно перед кодированием. Лучше не включать эту опцию при кодировании в режиме постоянного качества CRF, так как серьезно увеличивается размер файла при незначительном улучшении видео.
dct_decimate=<0,1>
  • При кодировании изображение разбивается на блоки размерами 8х8 пикселей и каждый такой блок кодируется отдельно. При недостаточном битрейте, эти блоки становятся заметными. Включение данной опции поможет решить проблему. Рекомендуется использовать даже при высоких битрейтах (по умолчанию: 0,0).
deblock=<-6..6>,<-6..6>
* Опции включенные по умолчанию не описаны.


Xvid (-xvidencopts)


Примеры:
  • Кодирование с указанием битрейта:
mencoder "your_movie" -ovc xvid -xvidencopts chroma_opt:vhq=2:bvhq=1:quant_type=mpeg:bitrate=2000 -oac mp3lame -lameopts cbr:br=192 -o "movie_out.avi"
  • Кодирование с указанием квантователя:
mencoder "your_movie" -ovc xvid -xvidencopts chroma_opt:vhq=2:bvhq=1:quant_type=mpeg:fixed_quant=3 -oac mp3lame -lameopts cbr:br=192 -o "movie_out.avi"
* Двухпроходный Xvid все равно не даст тоже качество что у x264, так что для высококачественных рипов лучше выбрать именно x264.

Разбор опций


  • Указываем проход в двухпроходном режиме.
pass=<1-2>
  • Быстрый первый проход.
turbo
  • Устанавливаем средний битрейт. Чем выше - тем лучше качество, чем ниже - тем хуже. Нужно выбирать или битрейт, или квантователь. Отрицательное значение соответствует размеру выходного файла в килобайтах.
bitrate=<value>
  • Выбираем уровень квантования. Чем больше - тем ниже качество выходного видео.
fixed_quant=<1-31>
  • Повышение качества, с понижением скорости кодирования. Алгоритм минимизирует эффект лестницы на границах цветов.
chroma_opt
  • Устанавливаем используемый тип квантователя. При большем битрейте MPEG квантование сохранит больше деталей. Для низкого битрейта H.263 даст меньший блочный шум.
quant_type=<h263|mpeg>
  • Эта опция влияет на алгоритм принятия решений о макроблоке, чем выше значение, тем точнее будут решения. Значения 3-4 сильно понижают скорость. Если качество не особо важно, то лучше выбрать значение 0.
vhq=<0-4>
  • Тоже что и vhq, только для В-кадров. Имеет незначительное влияние на скорость и слегка улучшает качество.
bvhq=<0-1>
  • Задаем количество потоков, для выполнения оценки движения (по умолчанию: 0). Максимальное количество потоков, которые можно использовать, равно высоте изображения, деленной на 16.
threads=<0-n>



MP3 (-lameopts)


Пример:
mencoder "your_movie" -ovc copy -oac mp3lame -lameopts cbr:br=192 -o "movie_out.avi"

Разбор опций


  • Переменный битрейт.
abr
  • Постоянный битрейт.
cbr
  • Задаем битрейт(kbit/s).
br=<32-320>



lavc (-lavcopts)


Расширение возможностей mencoder за счет использования libavcodec кодеков. Основные преимущества: сохранение не только в avi, но также и в mkv, mp4; больший набор кодеков, по сравнению с оригинальным набором mencoder'а. Полный перечень.
Пример:
mencoder "your_movie.avi" -ovc lavc -oac lavc -lavcopts vcodec=msmpeg4v2:vbitrate=2000:acodec=aac:abitrate=256 -o "movie_out.avi"
  • Аудио кодек.
acodec=<value>
  • Кодек видео.
vcodec=<value>
  • Количество потоков декодирования.
threads=<1-8>
  • Битрейт аудио.
abitrate=<value> 
  • Битрейт видео.
vbitrate=<value>
  • Номер прохода.
vpass=<1-3>
  • Ускорение первого прохода.
turbo
  • Квантование поиском по решетке. Найдет оптимальное кодирование для каждого блока 8×8.
trell
  • Допускает 4 вектора движения на макроблок (немного лучшее качество).
v4mv
  • Алгоритм принятия решения о макроблоке (режим высокого качества). Указывает кодировать каждый макроблок всеми режимами и выбирать лучший. Это работает медленно, но дает лучшее качество и меньший файл.
mbd=<0-2>
  • Соотношение между качеством и скоростью вносимыми в процессе принятия решений об оценке движения.
subq=<1-8>
  • Количество рефреймов.
refs=<1-8>
* lavc плохо документирован, по этому его не желательно использовать. Его преимущества только в сохранение аудио в acc и ac3, работе с контейнерами mkv и mp4.



Шаблоны


  • Проиндексировать видео. Помогает, если в видео не работает перемотка:

mencoder "your_movie.avi" -forceidx -oac copy -ovc copy -o "movie_out.avi"

  • Сохранение в mkv:

mencoder "your_movie.avi" -ovc copy -oac copy -of lavf -lavfopts format=mkv -o "movie_out.mkv"

  • Извлечение первой(нулевой) аудио дорожки(прежде нужно узнать формат аудио):

mplayer -aid 0 -dumpaudio 'your_video' -dumpfile out.mp3

  • Извлечение видео дорожки(прежде нужно узнать формат видео потока):

mplayer -dumpvideo 'your_video' -dumpfile out.h264
 

Оригинал статьи

 
Данная статья перепечатана help.ubuntu.ru/wiki/. 

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

Отправить комментарий