Базовые опции командной строки mencoder
Давайте рассмотрим основные опции командной строки mencoder-а.
Что же нам надо задать, что бы сконвертировать видео ?
- Источник данных
- Фильтры обработки (ресайз, кроп, подавление шума)
- Кодек для сжатия звука.
- Опции сжатия звука.
- Кодек для сжатия видео.
- Настройки сжатия видео.
- Параметры выходного файла (имя, fourcc код)
Теперь расмотрим немного подробнее эти пункты.
1. Нужно указать источник видео потока, который мы будем конвертировать. Задаётся так-же как и в mplayer.
Пару простых примеров:
$ mencoder source.avi # avi файл на вход
$ mencoder dvd://1 # первый тайтл DVD на вход
$ mencoder dvd://1 -chapter 3 # первый титл, 3-ий чаптер DVD на вход
$ mencoder dvd://1 -dvd-device /home/user/from_bla/bla # первый титл DVD на вход с указанием DVD устройства (тут просто директории с копией DVD)
так-же можно задать и другие источники - потоковое видео из сети, с TV-тюнера, DVB карты и т.д.
2. Можно задать различные фильтры, например для рисайза, кропинга, удаления шумов и т.д.
. По началу они не нужны, а потом можно посмотреть в документации. Изучение можно начать с опции -vf cropdetect
3. Задаём кодек для сжатия аудио потока:
$ mencoder ... -oac mp3lame
-oac означает output audio codec
Mencoder может кодировать звук несколькими кодеками. Один из них псевдокодек - copy. Он просто копирует входной поток в выходной, не производя никаких действий.
Полезен в случае, если имеющееся аудиодорожка уже сжата как надо.
4. Задаём опции для аудио кодека
$ mencoder ... -lameopts cbr:br=96:mode=1
тут после -lameopts опции кодека. Для другого кодека ключ будет другим. (Что-то вроде -anotercodecopts)
cbr означает константный битрейт
br=96 - битрейт в 96 килобит в секунду,
mode=1 - режим стерео joint
5. Задаём видеокодек.
$ mencoder -ovc lavc
(кодек lavc сокращённо от libavcodec)
Так же как и в случае с аудиокодеками, видеокодеков несколько. lavc - один из них.
6. Задаём настройки кодека. Для lavc кодека это будут значения ключа -lavcopts
$ mencoder ... -lavcopts vcodec=mpeg4:vbitrate=5000
vcodec - задаём формат выходного видеопотока. libavcodec может сжимать в различные форматы. В данном случае выбираем mpeg4
vbitrate=5000 - битрейт выходного потока.Это число всего-лишь верхний потолок. Если кодеку нечего будет жать, то он уменьшит битрейт. Так что указав, например, 10000, можно ожидать, что видео будет пожато в наилучшем виде, и при реальный битрейт может быть например 2000.
Обычно битрейт фильмов где-то в среднем на уровне 900-1500.
Ещё можно добавить следующие опции
-lavcopts vcodec=mpeg4:vbitrate=5000:mbd=2:v4mv:trell
7. Указываем имя выходного файла
$ mencoder ... -o output.avi
Так же для того, что бы некоторые плееры не ругались на неизвестный формат, можно указать FOURCC код выходнорго потока как DIVX
$ mencoder ... -ffourcc DIVX
8. Собираем все опции в одну строку и получаем что-то вроде:
$ mencoder dvd://1 -dvd-device /home/movie
-oac mp3lame -lameopts cbr:br=96:mode=1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell
-o movie-001.avi
-ffourcc DIVX
Пару слов о многопроходных конвертированиях.
Добавив к опциям кодека опцию vpass=1 (для первого прохода) и vpass=2(для второго) можно улучшить качество картинки, за счёт того, что кодек будет лучше знать где стоит пустить больший поток, а где поменьше.
пример:
$ mencoder dvd://1 -dvd-device /home/movie
-oac copy
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell:vpass=1
-o /dev/null
В первом проходе аудио не конвертируем. Сделаем это в последнем проходе.
Получающийся файл нам не нужен - отправляем его в /dev/null (в Windows -o NUL)
mencoder создаст файл divx2pass.log, в который запишет информацию о каждом кадре.
$ mencoder dvd://1 -dvd-device /home/movie
-oac mp3lame -lameopts cbr:br=96:mode=1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800:mbd=2:v4mv:trell:vpass=2
-o movie-001.avi
-ffourcc DIVX
Во втором проходе mencoder анализирует log файл и более оптимально перераспределяет видео поток в рамках выделенного битрейта.
Аудио разумеется нам нужно, выходной файл тоже. Дополнительно установим FOURCC код в DIVX, что-бы не было проблем.
Как можно заметить, кодирование с vpass=N не отличается от обычного кодирования, за исключением одной простой штуки:
vpass=1 заставит кодек записать log файл
vpass=2 указывает кодеку прочитать log файл, и использовать данные из него
vpass=3 и читает и пишет лог одновременно, ещё более его облагораживая.
Таким образом легко догадаться, что для многопроходной конвертации нужно сделать проходы с vpass=1, vpass=3, ... vpass=3, vpass=2
Следует воздержаться от паралельного запуска нескольких многопроходных конвертаций в одной рабочей директории. Кодек обязательно запутается где чей log файл. В результате будет создан неверный выходной файл.