Кодирование с помощью MEncoder

Mplayer.hu Перевод - Selena, 6.07.2003

- Несов Артем: Okay, so what do you need for this translation, besides a miracle?
- Selena: Dictionaries. Lots of dictionaries.

7. Кодирование с помощью MEncoder.

Полный список доступных параметров и примеров применения MENCODER смотрите в man page. Ряд жизненных примеров использования параметров в командной строке и детальные руководства по использованию нескольких перекодировочных параметров - читайте в encoding-tips, собранном из нескольких листов рассылки пользователей mplayer. Обсуждение всех аспектов применения и проблем, связанных с кодированием с помощью MEncoder, можно найти в архиве.

7.1 Кодирование MPEG-4 ("DivX") в 2 или 3 прохода.

Кодирование в 2 прохода: название происходит оттого, что при этом методе файл кодируется дважды. При первом кодировании (предварительный проход) создаётся несколько временных файлов (*.log) с размером в несколько мегабайт, не стоит удалять их пока (вы можете удалить AVI). При втором проходе конечный файл двойного прохода создаётся с использованием данных битрейта временных файлов. В результате качество картинки в конечном файле будет намного лучшим. Если вы впервые сталкиваетесь с этим, вам следовало бы обратиться к руководствам, доступным в сети.

В данном примере показано, как перекодировать DVD в MPEG-4 ("DIVX") AVI в 2 прохода. Для этого потребуются только две команды:

rm frameno.avi - удаление файла, который мог остаться от предыдущего кодирования в три прохода.
mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

Кодирование в 3 прохода: это расширенный вариант кодирования в 2 прохода, при котором кодирование звука происходит отдельно. Этот метод позволяет оценить битрейт удобный для записи видео на CD. В отличии от кодирования в 2 прохода звук кодируется только один раз. Схема использования:

1. Удалите мешающий временный файл:

rm frameno.avi

2. Первый проход:

mencoder <file/DVD> -ovc frameno -oac mp3lame -lameopts vbr=3 -o frameno.avi

Создаётся звуковой avi-файл, содержащий только требуемую звуковую дорожку. Не забудьте -lameopts, если вам необходимо установить параметры кодека. Если вы кодировали длинный фильм, MEncoder выведет рекомендуемые значения битрейта для получения конечного файла требуемых размеров (650 Мб, 700 Мб, 800 Мб), после этого проход завершается.

3. Второй проход:

mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=<bitrate>

Это первый проход кодирования видео. Если хотите, можете использовать битрейт видео, выведенный в конце предыдущего прохода.

4. Третий проход:

mencoder <file/DVD> -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=<bitrate>

Это второй проход кодирования видео. Если вы не знаете, что делать, укажите тот же битрейт, что и в предыдущем проходе. При этом проходе звук из frameno.avi будет добавлен в конечный файл.. вот и всё!

Пример кодирования в 3 прохода:

rm frameno.avi - удаление файла, который мог остаться от предыдущего кодирования в три прохода.
mencoder -dvd 2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder -dvd 2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi

7.2 Перекодирование в формат MPEG

MEncoder может создавать файлы формата MPEG (MPEG-PS). Это может быть возможным лишь с кодеком mpeg1video из libavcodec, потому что большинство проигрывателей - исключая MPlayer - воспринимают только MPEG1 видео, и звуковые дорожки MPEG1 layer 2 (MP2) в файлах MPEG.

Перекодирование в MPEG с помощью кодека mpeg1video может показаться совершенно ненужным, к тому же реализованным, возможно, со множеством ошибок, но оно важнее, чем кажется, потому что MEncoder на данный момент не может кодировать звук в MPEG1 layer 2 (MP2), который другие проигрыватели ожидают увидеть в MPEG.

Чтобы изменить формат конечного файла MEncoder, используйте опцию -of mpeg.

Пример:
mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy <other options> media.avi -o output.mpg

7.3 Перемасштабирование

Часто возникает потребность в изменении размера изображения. На это может быть множество причин: уменьшение размера файла и др. Многие люди прибегают к перемасштабированию даже при преобразовании DVD или SVCD в DivX, что не очень хорошо. Если вы всё же решили сделать это, прочитайте раздел Сохранение пропорций.

Процесс перемасштабирования осуществляется с помощью 'scale' видео фильтра: -vop scale=width:height. Его качество может устанавливаться с помощью опции -sws. Если она не установлена, MEncoder будет использовать 0: fast bilinear.

Пример:

mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vop scale=640:480 -oac copy -o output.avi

7.4 Копирование дорожек

MEncoder может поступать с исходными дорожками двумя путями: перекодировать или копировать их. Этот раздел о копировании.

  • Видео дорожка (опция -ovc copy): можно много чего сделать :)
    Так, например, можно вставить (без перекодирования) FLI или VIVO или MPEG1 видео в AVI файл. Конечно, только MPlayer сможет проигрывать такие файлы :) И это, вероятно, не будет ни какой пользы. Есть и рациональное применение: копирование видео дорожки может быть полезным, например, когда нужно перекодировать только звуковую дорожку (например, несжатый PCM в MP3).
  • Аудио дорожка (опция -oac copy): очень просто. Можно взять внешний аудио файл (MP3, Vorbis) и смешать его со звуковой дорожкой. Используйте для этого опцию -audiofile <filename>.

7.5 Исправление AVI файлов с испорченными заголовками или interleaving

Проще простого. Мы просто копируем видео и аудио дорожки, а MEncoder генерирует заголовок. Конечно, это не может устранить возможные ошибки на видео и/или аудио дорожках. Так же можно исправить файлы с испорченным interleaving, таким образом опция -ni больше не требуется.

Пример:

mencoder -idx input.avi -ovc copy -oac copy -o output.avi

7.5.1 Соединение нескольких AVI файлов

Как побочный эффект восстановления испорченных AVI файлов можно отметить возможность MEncoder соединять 2 (или более) AVI файлов.

Пример:

cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -

Примечание: При этом подразумевается, что в файлах 1.avi и 2.avi используются одинаковые кодеки, разрешения, битрейт и т.д., и по крайней мере 1.avi не должен быть повреждён. Может возникнуть потребность сперва исправить исходные AVI файлы, как это описано выше.

7.6 Кодирование с помощью семейства кодеков libavcodec

libavcodec позволяет кодировать во множество интересных видео и аудио форматов (на данный момент аудио кодеки не поддерживаются). Вы можете использовать следующие кодеки:

  • mjpeg - Motion JPEG
  • h263 - H263
  • h263p - H263 Plus
  • mpeg4 - ISO standard MPEG-4 (DivX 5, XVID compatible)
  • msmpeg4 - pre-standard MPEG-4 variant by MS, v3 (aka DivX3)
  • msmpeg4v2 - pre-standard MPEG-4 by MS, v2 (используется в старых asf файлах)
  • wmv1 - Windows Media Video, version 1 (aka WMV7)
  • rv10 - старый RealVideo кодек
  • mpeg1video - MPEG1 video :)
  • huffyuv - сжатие без потерь

Первый столбец содержит название кодека, которое должно быть указано после vcodec, как, например: -lavcopts vcodec=msmpeg4

Пример с сжатием MJPEG:

mencoder -dvd 2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.7 Создание видео файла из нескольких файлов JPEGs, PNGs или TGAs

MEncoder способен создавать видео файлы из одного или более файлов JPEGs, PNGs или TGAs. Простым копированием кадров создаются файлы MJPEG (Motion JPEG), MPNG (Motion PNG) или MTGA (Motion TGA).

Процесс выглядит следующим образом:

1. MEncoder декодирует исходное изображение с помощью libjpeg (когда декодируется PNG, используется libpng).
2. Затем MEncoder отправляет изображение в выбранный видео компрессор (DivX4, XviD, ffmpeg msmpeg4, и т.д ...).

Примеры:

Объяснение опции -mf вы можете найти на man page.

Создание файла DivX4 из всех файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi *.jpg

Создание файла DivX4 из некоторых файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi frame001.jpg,frame002.jpg

Создание файла Motion JPEG (MJPEG) из всех файлов JPEG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o output.avi *.jpg

Создание несжатого видео файла из всех файлов PNG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o output.avi *.png

Примечание: Ширина должна быть целым числом, кратным 4, это ограничение формата RAW RGB AVI.

Создание файла Motion PNG (MPNG) из всех файлов PNG в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -o output.avi *.png

Создание файла Motion TGA (MTGA) из всех файлов TGA в текущей директории:
mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o output.avi *.tga

7.8 Извлечение субтитров из DVD в файл Vobsub

MEncoder способен извлекать субтитры из DVD в файлы формата Vobsub. Они сотоят из пары файлов с расширением .idx и .sub и обычно помещаются в единый архив .rar. MPlayer может проигрывать субтитры с помощью опций -vobsub и - vobsubid.

Вы указываете названия конечных файлов (без расширения .idx или .sub) с помощью -vobsubout и индекс субтитров в конечных файлах с помощью -vobsuboutindex.

Если исходный материал взят не с DVD вы должны использовать -ifo, чтобы указать файл .ifo, необходимый для создания конечного файла .idx.

Если исходный материал взят не с DVD и у вас нет файла .ifo вам потребуется опция -vobsubid, чтобы указать какой идентификатор языка помещается в файл .idx.

Если файлы .idx и .sub уже существуют, то они будут дописываться. Итак вы должны удалить эти файлы.

Примеры:

Копирование двух субтитров с DVD при кодировании в 3 прохода
rm subtitles.idx subtitles.sub
mencoder -dvd 1 -vobsubout subtitles -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno -oac mp3lame -lameopts vbr=3
mencoder -dvd 1 -oac copy -ovc divx4 -divx4opts pass=1
mencoder -dvd 1 -oac copy -ovc divx4 -divx4opts pass=2 -vobsubout subtitles -vobsuboutindex 1 -sid 5

Копирование французских субтитров из файла MPEG
rm subtitles.idx subtitles.sub
mencoder movie.mpg -ifo movie.ifo -vobsubout subtitles -vobsuboutindex 0 -vobsuboutid fr -sid 1

7.9 Сохранение пропорций

Файлы DVD и SVCD (т.е. MPEG1/2) содержат значения пропорций, описывающие, как проигрыватели должны масштабировать видео данные, вот почему люди не выглядят яйцеголовыми (пр.: 480x480 + 4:3 = 640x480). Однако вам следовало бы знать, что при перекодировании в AVI (DivX) эти значения в его заголовках не сохраняются. Перемасштабирование видео выходит отвратительным и занимает время, должен быть иной путь!

И он есть.

MPEG4 обладает уникальным свойством: в видео данных могут содержаться необходимые значения пропорций. Да, так же как и файлы MPEG1/2 (DVD, SVCD). К сожалению, нет проигрывателей, поддерживающих эти атрибуты. За исключением MPlayer.

Эта особенность может быть использована только с кодеком libavcodec mpeg4. Имейте в виду: хотя MPlayer и будет верно проигрывать созданный файл, другие проигрыватели будут использовать неверные пропорции.

Вы должны обрезать чёрные полосы сверху и снизу изображения. О фильтрах cropdetect и crop вы можете прочитать на man page.

Пример:

$ mencoder sample-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4:aspect=16.0/9.0 -vop crop=714:548:0:14 -oac copy -o output.avi


Перевод осуществлен Selena ( moonselenity@yandex.ru) при очень небольшой поддержке Pr.
Творческий вдохновитель: Несов Артем.