Это даже не руководство, а скорее памятка на основные этапы и команды консоли. Оно ни в коем случае не претендует на полноту и является лишь направляющей, указывающей в какой стороне нужно читать обширные man’ы по mencoder. 🙂 Выбор всех опций кодирования базируются исключительно на личных предпочтениях.
Задача: Видео с DVD-диска сконвертировать в формат avi с сохранением необходимых звуковых дорожек. В многодорожечном avi-файле русская дорожка должна быть первой.
Есть два основных инструмента кодирования DVD — mencoder (компонент MPlayer) и transcode. Я предпочитаю кодировать с помощью mencoder, так как я могу в реальном времени предпросматривать результат применения фильтров (главным образом — деинтерлейсинг), путём передачи тех-же опций mplayer’у. А transcode я использую для объединения дорожек и устранения аудио рассинхронизации.
Общая схема
1. Копирование
Копируем содержимое DVD-диска на жёсткий диск. Открываем консоль и переходим в каталог, куда был скопирован DVD.
2. Определяем номера дорожек
Ищем нужный title, на нём дорожку с русским языком и заодно языки прочих дорожек.
mplayer -alang ru -dvd-device ./ dvd://1
Можно также использовать опцию -aid для явного указания номера дорожки, если производитель DVD поленился указать язык. Нумерация дорожек начинается со 128-ми. Обычно номер дорожки с русским 128 или 129.
3. Срезка чёрных полос
mplayer может автоматически определять параметры срезания экрана для устранения чёрных полос по краям экрана.
mplayer -vf scale=640:-2,cropdetect -dvd-device ./ dvd://1
Для каждого кадра на экран консоли будут выведены оптимальные параметры срезания
[CROP] Crop area: X: 22..695 Y: 21..456 (-vf crop=672:432:24:24).
где crop=672:432:24:24 — опции, которые необходимо указать при кодировании.
4. Деинтерлейсинг
Если видео черезстрочное (то есть тут и там при движении появляются горизонтальные полоски), подбираем видеофильтр для устранения этого эффекта. В большинстве случаев работает сочетание pullup,softskip. Проверяем командой:
mplayer -vf pullup,softskip -dvd-device ./ dvd://1
Хотя встречаются и такие тяжёлые случаи:
mencoder -alang ru -dvd-device ./ dvd://1 -vf field=0,pp=lb,scale=512:-2 -ovc lavc -oac copy -o proba.avi
Или то-же самое, но с лучшим качеством за счёт удвоенной частоты кадров:
mencoder -alang ru -dvd-device ./ dvd://1 -fps 60000/1001 -ofps 60000/1001 -vf tfields=2,pp=lb,scale=512:-2 -ovc lavc -oac copy -o proba.avi
5. Кодируем
Кодируем кодеком xvid в два прохода с русской звуковой дорожкой.
for i in 1 2; do mencoder -alang ru -ovc xvid -xvidencopts pass=$i:bitrate=1100:cartoon:chroma_opt:vhq=2:bvhq=1 -oac copy -vf pullup,softskip,scale=640:-2,crop=592:320:24:20,harddup -o output.avi -dvd-device ./ dvd://1; done
Если нужен однодорожечный avi-файл с mp3-дорожкой, то вместо -oac copy пишем -oac mp3lame -lameopts br=96:cbr:mode=1.
harddup — необходимо вставлять всегда для сохранения синхронизации аудио и видео.
xvidencopts — pass=$i оставляем всегда, остальное в зависимости от предпочтений и типа материала. Примеры:
Очень высокое качество: |
chroma_opt:vhq=4:bvhq=1:quant_type=mpeg |
Высокое качество: |
vhq=2:bvhq=1:chroma_opt:quant_type=mpeg |
Быстро: |
turbo:vhq=0 |
В реальном времени: |
turbo:nochroma_me:notrellis:max_bframes=0:vhq=0 |
- quant_type=mpeg — повышает детализацию изображения
- cartoon — кодирование аниме/мультфильмов.
Если нужем видеофайл только с одной дорожкой то на этом и останавливаемся и сразу переходим к пункту «Устранение рассинхронизации».
Многодорожечные avi-файлы
1. Убираем аудио из кодированного файла
Теперь в бой вступает transcode — с его помощью мы будем обрабатывать и подсоединять звуковые дорожки. Поэтому, предварительно убираем звук из кодированного avi-файла:
mencoder -o nosound.avi -ovc copy -nosound output.avi
2. Кодируем звуковые дорожки
Если хотим сохранить ac3 звук, то пишем
mplayer -dvd-device ./ dvd://1 -alang ja -dumpaudio -dumpfile ja.ac3
А если хотим перекодировать в mp3, то
LNG=ja && mplayer -dvd-device ./ dvd://1 -ao pcm:fast:file=${LNG}.wav -vo null -vc null -alang ${LNG} && lame -b 96 ${LNG}.wav ${LNG}.mp3 && rm ${LNG}.wav
3. Присоединяем аудио дорожки к видео
avimerge -i nosound.avi -p ru.mp3 -b 0 -o output.avi
avimerge -i output.avi -p ja.mp3 -b 0 -o output2.avi
Устранение рассинхронизации
А теперь начинаются танцы с бубнами. Если в итоговом файле output.avi звук оказывается отстающим или опережающим, то
avisync -i output2.avi -o output3.avi -a 0 -n 4
Замечание: при проигрывании результирующего фала mplayer ведёт себя крайне странно — он ставит дорожкой по-умолчанию вторую дорожку. Это сильно сбило меня с толку поначалу — казалось, что сдвиг дорожки не выполняется. Но после того как мы синхронизируем вторую дорожку
avisync -i output3.avi -o output4.avi -a 1 -n 4
всё встаёт на свои места.
Прочее
Замена дорожки в avi-файле:
mencoder -oac copy -ovc copy -o output_movie.avi -audiofile input_audio.mp3 input_video.avi