MPlayer / MEncoder позволяет воспроизводить аудио и видео из файлов, дисков и сетевых потоков, управлять дорожками, субтитрами и выводом через командную строку, а также перекодировать, фильтровать, копировать и мультиплексировать медиапотоки в сценариях пакетной обработки.
MPlayer отвечает прежде всего за воспроизведение и контроль медиапотока: ему можно передать файл, список файлов, дорожку оптического диска, устройство захвата или сетевой источник, выбрать декодер, аудио- и видеовыход, настроить синхронизацию, масштабирование, субтитры и экранное меню. Большинство действий задаётся параметрами запуска, а во время просмотра доступно интерактивное управление с клавиатуры, мыши, пульта или через командный интерфейс.
MEncoder использует ту же систему демультиплексоров, декодеров и фильтров для преобразования. Он умеет перекодировать видео и звук, оставлять отдельные потоки без повторного кодирования, менять контейнер, собирать ролик из последовательности изображений, обрабатывать материал цепочкой фильтров и выполнять одинаковые операции над множеством файлов из сценария. Поэтому связка удобна там, где важны воспроизводимые команды и точный контроль над каждым этапом.
Скачать MPlayer / MEncoder
- Конвертация видео
- Сжатие файлов
- Просто для новичков
- Сложная командная строка
- Нет монтажной таймлинии
- Функции зависят от сборки
Что именно делают MPlayer и MEncoder
У двух исполняемых программ разные роли, но общий принцип работы. MPlayer получает входной поток, определяет контейнер или протокол, выбирает нужные дорожки, декодирует их, пропускает через фильтры и направляет изображение и звук в выбранные выходные драйверы. MEncoder проходит почти тот же путь до фильтров, после чего вместо воспроизведения отправляет результат в видеокодек и аудиокодек, а затем в мультиплексор выходного контейнера. Такое устройство объясняет, почему многие параметры — выбор дорожек, фильтры, частота кадров, параметры субтитров — у программ похожи.
В повседневной работе MPlayer можно воспринимать как управляемый из консоли медиапроигрыватель с большим количеством низкоуровневых переключателей. Его сила не в библиотеке красивых панелей, а в возможности точно задать источник, декодирование, вывод и поведение при воспроизведении. MEncoder — не редактор с монтажной шкалой. Он ориентирован на последовательное преобразование: прочитать, при необходимости декодировать, отфильтровать, закодировать и записать.
Это различие важно при выборе команды. Если нужно только проверить файл, подобрать фильтр, определить подходящий драйвер вывода или синхронизировать субтитры, удобнее начинать с MPlayer. Если те же преобразования должны попасть в новый файл, применяется MEncoder. При этом не всякая операция совместима с копированием потока: изменение пикселей требует декодирования и повторного кодирования видео, а изменение семплов требует повторного кодирования звука.
Базовая логика команд
Самая короткая команда воспроизведения состоит из имени программы и входного файла. Опции можно ставить до имени файла, а при работе со списком файлов некоторые параметры задаются для отдельных элементов. Для MEncoder обязательнее явно продумать выход: имя файла, способ кодирования видео и звука, а при необходимости формат контейнера.
mplayer video.mkv
mplayer -fs -alang eng -slang rus video.mkv
mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -oac mp3lame -lameopts abr:br=160 -o output.avi
Перед созданием сложной команды полезно проверять доступные возможности именно установленной сборки. Команды mplayer -vo help, mplayer -ao help, mplayer -vf help, mencoder -ovc help, mencoder -oac help и mencoder -of help показывают скомпилированные драйверы, фильтры, кодеры и контейнеры. Это надёжнее, чем переносить чужую строку параметров без учёта конкретной сборки.
Командная строка и область действия параметров
MPlayer допускает запуск одного или нескольких источников за один раз. Общие параметры ставят перед группой файлов, а отдельные параметры можно привязать к конкретному файлу. Такой синтаксис полезен, когда, например, один ролик нужно воспроизвести с внешними субтитрами, а следующий — без них, не создавая несколько независимых процессов.
Почти у каждого логического флага есть отрицательная форма с префиксом no. Например, поведение, включённое некоторой опцией, нередко можно отменить противоположным флагом. Параметры со значениями используют пробел или синтаксис подопций через двоеточие, как в -lavcopts, -x264encopts, -tv, -ao и -vo. В длинных командах это удобно разбивать на строки оболочки, но сам MPlayer получает обычный единый набор аргументов.
Если команда содержит имена файлов с пробелами, спецсимволами или масками, правила экранирования определяет используемая оболочка. Ошибки здесь часто выглядят как проблема медиаплеера: программа сообщает, что не может открыть вход, хотя реальная причина — неправильно переданное имя. Для автоматизации безопаснее передавать путь как один аргумент и отдельно контролировать расширение выходного файла.
Позиционирование и ограничение фрагмента
Для начала не с первого кадра используется -ss; аргумент можно задавать в секундах или временной форме. Продолжительность воспроизведения или обработки ограничивает -endpos. Точность перехода зависит от контейнера, индекса и расположения ключевых кадров: быстрый поиск может остановиться около ближайшего доступного места, а после декодирования следующих кадров позиция уточняется.
mplayer -ss 00:10:00 video.mkv
mencoder -ss 30 -endpos 90 input.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1500 -oac copy -o fragment.avi
При вырезании фрагмента важно понимать границу между временным выбором и монтажом без перекодирования. MEncoder способен начать обработку с заданной позиции, но сочетание точного входа, копирования потока и контейнерных ограничений не всегда даёт монтаж до произвольного кадра. Если требуется точность до конкретного кадра, безопаснее декодировать участок и кодировать его заново.
Графический режим gmplayer
Помимо консольного запуска в семействе предусмотрен gmplayer — графический вариант MPlayer. Он использует те же механизмы воспроизведения, но добавляет панель управления, диалоги настроек, список воспроизведения и скины. Это не отдельный медиадвижок: параметры декодирования, выходные драйверы, субтитры и фильтры по-прежнему относятся к MPlayer.
В окне настроек можно выбирать аудио- и видеодрайверы, параметры субтитров и экранного текста, шрифт, часть параметров кодеков и демультиплексоров, а также общие настройки. Внешний вид зависит от скина; каталоги скинов выбираются через параметр -skin. При диагностике полезно помнить, что графическая оболочка сохраняет часть настроек в собственном конфигурационном файле, поэтому её поведение может отличаться от запуска чистого mplayer из терминала.
Для задач, где нужен повторяемый результат, команды и конфигурационные профили обычно прозрачнее GUI: строку запуска легко сохранить, сравнить и применить к другому файлу. Графический режим удобнее для обычного просмотра, выбора дорожки и ручной настройки, но MEncoder остаётся ориентированным на командную строку.
Интерактивное управление воспроизведением
Во время работы MPlayer принимает команды управления без перезапуска. Типовые клавиши позволяют ставить на паузу, перемещаться по времени, менять громкость, задержку звука и субтитров, переключать дорожки, полноэкранный режим и уровень OSD. Точный набор доступных команд можно получить из самой программы, а привязки переопределить в input.conf.
Файл input.conf связывает имя клавиши или кнопки с командой. Это даёт возможность сделать собственную схему управления: например, назначить шаг вперёд и назад на удобные клавиши, добавить изменение задержки звука малыми шагами или переключение файлов списка. Полный перечень распознаваемых клавиш выводится через mplayer -input keylist, а перечень команд — через mplayer -input cmdlist.
RIGHT seek +10
LEFT seek -10
UP volume +2
DOWN volume -2
q quit
Если MPlayer встроен в другую программу, та же командная модель используется в slave-режиме. Тогда команды приходят через стандартный ввод строками, а проигрыватель выступает как медиабэкенд. Это позволяет строить собственные панели, киоски, простые автоматизированные плееры и тестовые стенды без имитации нажатий клавиш.
Экранное меню, OSD и отображение состояния
OSD показывает состояние воспроизведения поверх видео: таймер, индикатор позиции, громкость, обратную связь от клавиш и другие элементы. Уровень экранной информации переключается интерактивно или задаётся параметрами. Важная особенность — OSD формируется самим MPlayer, поэтому его вид и доступность зависят от шрифтов, выбранного видеовыхода и сборки.
Отдельно существует настраиваемое OSD-меню. Для него требуется поддержка меню в сборке, файл menu.conf и соответствующие привязки в input.conf. Меню может использоваться для навигации без полноценного оконного интерфейса. Оно не равно панели gmplayer: это слой, который рисуется поверх видео и управляется командами MPlayer.
Если OSD виден, а текст субтитров нет, или наоборот, диагностику стоит разделить на три части: загрузку шрифта, кодировку текста и видеовыход. Сначала проверяют простой шрифт через Fontconfig/FreeType, затем кодировку субтитров, после чего — драйвер вывода. Такой порядок быстрее, чем одновременно менять фильтры и декодеры.
Контейнеры, кодеки и выбор дорожек
MPlayer отделяет контейнер от кодека. Контейнер описывает структуру файла и расположение потоков, а кодек — способ сжатия конкретной дорожки. Поэтому расширение само по себе не гарантирует, что файл откроется одинаково в любой сборке: для чтения контейнера нужен подходящий демультиплексор, а для каждой дорожки — декодер. При запуске MPlayer печатает в консоль распознанный формат, выбранные аудио- и видеокодеки и параметры потока, что делает вывод полезным инструментом диагностики.
Поддерживаемые форматы очень широки: программа работает с распространёнными MPEG/VOB, AVI, Ogg/OGM, ASF/WMA/WMV, QuickTime/MOV/MP4, RealMedia, Matroska и рядом специализированных форматов, а также с потоками оптических дисков и захвата. На практике точный перечень определяется сборкой и тем, какие библиотеки были подключены при компиляции. Поэтому вместо попытки запомнить длинный список лучше смотреть фактический вывод программы на конкретном файле.
При наличии нескольких звуковых или субтитровых дорожек можно выбирать их по идентификатору или языку. Параметры -aid и -sid задают числовые идентификаторы, а -alang и -slang помогают выбирать по языковому коду там, где контейнер хранит такую метку. В подробном режиме MPlayer выводит доступные идентификаторы, поэтому сначала полезно открыть файл с расширенной диагностикой, а затем закрепить нужный выбор в команде или профиле.
mplayer -v movie.mkv
mplayer -alang eng -slang rus movie.mkv
mplayer -aid 1 -sid 2 movie.mkv
Принудительный выбор декодера используют лишь тогда, когда автоматический выбор не подходит. Параметры -vc и -ac позволяют указать видеокодек и аудиокодек, а -vfm и -afm — предпочесть семейство декодеров. Обычно лучше начинать без этих ключей: жёстко заданный декодер делает конфигурацию менее переносимой между сборками и файлами.
Индекс контейнера и перемотка
Некоторые AVI и другие индексируемые контейнеры могут иметь повреждённый или отсутствующий индекс. Это проявляется неточной перемоткой, невозможностью перейти далеко по файлу или неверной оценкой длительности. MPlayer умеет работать с индексом и при необходимости пересоздавать его. Параметры -idx и -forceidx применяют, когда обычное чтение не даёт корректной навигации.
Перестроение индекса не восстанавливает повреждённые кадры и не делает корректным физически обрезанный файл. Оно только помогает навигации по данным, которые удалось прочитать. Если контейнер повреждён глубже, лучше сначала проверить возможность последовательного декодирования, а уже затем решать, стоит ли перекодировать читаемую часть.
Субтитры: загрузка, кодировка, стиль и синхронизация
MPlayer поддерживает внешние текстовые субтитры и несколько контейнерных и графических форматов. В документации перечислены VOBsub, OGM, CC, MicroDVD, SubRip, SubViewer, SAMI, VPlayer, RT, SSA, PJS, MPsub, AQTitle и JACOsub. На практике чаще всего встречаются SubRip, SSA/ASS и VOBsub. Файл субтитров можно передать явно, а при совпадении базового имени MPlayer способен обнаруживать подходящие файлы автоматически.
Для явного подключения используется -sub. Если в каталоге лежит несколько вариантов на разных языках, явный путь снимает неоднозначность и делает команду воспроизводимой. Для VOBsub используется отдельный механизм с -vobsub и выбором идентификатора. Встроенные дорожки контейнера выбираются через -sid или языковой приоритет.
mplayer -sub subtitles.srt movie.mkv
mplayer -slang rus,eng movie.mkv
mplayer -vobsub movie -vobsubid 0 movie.avi
Кракозябры в текстовых субтитрах обычно связаны не с видеокодеком, а с кодировкой. Для старых файлов могут понадобиться -subcp, -utf8 или корректно настроенный шрифт. Если текст уже в UTF-8, лучше не заставлять MPlayer интерпретировать его как однобайтовую кодировку. Если файл старый и сохранён в региональной кодовой странице, -subcp задаёт преобразование в Unicode перед отрисовкой.
Шрифт выбирается через Fontconfig/FreeType там, где эта поддержка собрана. Параметры семейства -font и -subfont-* управляют гарнитурой и масштабом. Для ASS/SSA важна поддержка ASS: формат может содержать стили, позиционирование и другие указания, и простое отображение как обычного текста потеряет часть оформления.
Задержка субтитров регулируется отдельно от звука. Это полезно, если внешний файл рассчитан на другой монтаж или начинается с небольшим сдвигом. При постоянном смещении достаточно задать задержку; если расхождение постепенно накапливается, причина обычно в разной частоте кадров или в несоответствии самой дорожки исходному видео, и одной постоянной поправкой проблему не решить.
MPlayer также умеет выгружать ряд текстовых форматов субтитров в другие представления. Для некоторых форматов предусмотрены команды дампа, а MEncoder умеет извлекать DVD-субтитры в VOBsub. Это полезно при подготовке материала к дальнейшей обработке, но выгрузка субтитров не является распознаванием графического текста: изображение VOBsub остаётся графическими субтитрами.
Звук: драйверы вывода, дорожки и фильтры
Аудиотракт MPlayer состоит из декодера, цепочки аудиофильтров и выходного драйвера. Команда mplayer -ao help показывает, какие драйверы доступны в установленной сборке. Если звук отсутствует при успешном декодировании, полезно сначала проверить именно этот список, затем выбрать подходящий -ao и только после этого менять кодек.
Через аудиофильтры можно выполнять преобразования между каналами, менять частоту дискретизации, регулировать уровень, применять эквалайзер и другие операции, если соответствующие фильтры присутствуют. Цепочка задаётся параметром -af. Порядок важен: каждый фильтр получает результат предыдущего, поэтому перестановка ресемплера и канального преобразования способна менять нагрузку и иногда качество.
Для обычной коррекции громкости не всегда нужно вмешиваться в системный микшер. Программная громкость включается -softvol, а верхнюю границу можно задавать отдельно. Такой режим полезен, когда аппаратный микшер недоступен или когда требуется одинаковое управление в разных окружениях. При чрезмерном усилении возможен клиппинг, поэтому программное увеличение выше исходного уровня не заменяет нормализацию.
Задержка звука относительно видео регулируется параметром -delay и интерактивными командами. Это средство для постоянного сдвига дорожки. Если рассинхронизация растёт по мере воспроизведения, нужно искать проблему в таймстампах, частоте кадров, захвате или неверном пересчёте времени, а не бесконечно увеличивать фиксированную задержку.
Многоканальный звук требует согласованности декодера, числа каналов, фильтров и конечного устройства. Если выходной драйвер принимает только стерео, MPlayer может потребовать downmix; если требуется передача сжатого AC-3/DTS на внешний декодер, применяется другой путь. Конкретная команда зависит от драйвера и сборки, поэтому ориентиром служат -ao help, описание выбранного драйвера и вывод инициализации звука.
Видео: выходные драйверы и выбор способа отображения
Одна из характерных особенностей MPlayer — разделение декодирования и видеовыхода. После получения кадров программа передаёт их выбранному драйверу -vo. В документации описаны X11, Xv, OpenGL, SDL, framebuffer, DirectFB, VIDIX, VESA, AAlib, libcaca и ряд аппаратно-зависимых вариантов. Реально доступный список всегда проверяется командой mplayer -vo help.
Если автоматический драйвер работает нестабильно, выбор -vo — один из первых диагностических шагов. Например, проблема может быть не в декодере, а в невозможности создать нужную поверхность вывода, в несовместимом цветовом формате или в особенностях полноэкранного режима. Переключение на более простой драйвер помогает отделить ошибку вывода от ошибки декодирования.
Драйверы различаются по способу масштабирования, преобразованию цветового пространства и взаимодействию с оконной системой. Часть старых ускоренных путей привязана к конкретным графическим подсистемам, поэтому перенос команды с одной машины на другую не гарантирован. Именно поэтому -vo лучше хранить в профильной настройке, а не жёстко добавлять ко всем командам.
Полноэкранный режим включается -fs. Параметры размера, геометрии и соотношения сторон позволяют подстроить окно под экран или проектор. При этом изменение размера окна само по себе не обязательно означает, что видео предварительно пересчитано фильтром: часть видеовыходов масштабирует кадр на этапе отображения. Если результат должен попасть в файл, масштабирование нужно делать фильтром MEncoder, а не рассчитывать на визуальное изменение окна MPlayer.
Framebuffer и текстовые видеовыходы
Некоторые драйверы показывают, насколько независимо MPlayer устроен от обычного оконного интерфейса. Framebuffer-вывод позволяет работать непосредственно с соответствующим видеоустройством, а AAlib и libcaca превращают кадры в текстовое представление. Эти режимы редко нужны для обычного просмотра, но полезны для диагностики, специализированных терминалов и демонстрации возможностей выходного слоя.
Текстовый вывод не следует путать с конвертацией видео в текстовый файл. Это способ визуализации кадров в терминале. Качество и скорость зависят от размера терминала, выбранной библиотеки и цветового режима. Для обычной оценки качества кодирования такой вывод не подходит, потому что сам способ отображения радикально изменяет изображение.
Видео-фильтры: как строится цепочка обработки
Параметр -vf задаёт последовательность видеофильтров. Через неё выполняют масштабирование, кадрирование, изменение геометрии, деинтерлейсинг, постобработку, поворот, изменение цветовых характеристик и другие операции. Набор зависит от сборки; список доступных фильтров выводится через -vf help.
Ключевой принцип — фильтры выполняются слева направо. Если сначала обрезать края, а затем масштабировать, масштабирующий фильтр работает уже с меньшим кадром. Если сделать наоборот, сначала пересчитывается весь кадр, а затем часть результата выбрасывается. С точки зрения вычислений и качества это не одно и то же. Для пакетной обработки полезно явно записывать порядок и не полагаться на случайные значения по умолчанию.
mplayer -vf crop=704:400:8:40,scale=1280:720 input.mpg
mencoder input.mpg \
-vf crop=704:400:8:40,scale=1280:720 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2500 \
-oac copy -o output.avi
Фильтры работают с декодированными кадрами. Поэтому видео, которое нужно изменить через -vf, нельзя одновременно оставить в режиме -ovc copy: копирование переносит сжатые пакеты без декодирования и обработки пикселей. Аналогичное правило относится к аудиофильтрам и -oac copy.
Масштабирование и соотношение сторон
Фильтр scale меняет фактическое разрешение кадра. Отдельные параметры MPlayer, такие как полноэкранный режим или размер окна, могут только менять визуальное отображение. При кодировании нужно различать три величины: размер кадра в пикселях, пиксельное соотношение сторон и итоговое отображаемое соотношение сторон. Ошибка в любом из них приводит к растянутым лицам или неправильной геометрии.
Для старых DVD и телевизионных источников квадратные пиксели не гарантированы. Если цель — файл для компьютерного просмотра, часто удобнее пересчитать видео до разрешения с квадратными пикселями, сохранив правильный display aspect ratio. Если же нужен совместимый MPEG для VCD/SVCD/DVD, размеры и частота кадров должны соответствовать требованиям выбранного стандарта.
Перед масштабированием полезно проверить, нет ли в исходнике чёрных полей. Кодирование полей тратит битрейт и ухудшает эффективность сжатия. Фильтр crop позволяет убрать ненужные края до scale. Значения ширины, высоты и смещения выбирают по реальному кадру; автоматическое угадывание без визуальной проверки может отрезать полезное изображение.
Деинтерлейсинг и постобработка
Чересстрочный материал нельзя бездумно обрабатывать как прогрессивный. При неправильном масштабировании поля смешиваются, а движение получает характерные горизонтальные гребёнки. В MPlayer/MEncoder есть фильтры деинтерлейсинга, в том числе yadif в сборках с соответствующей поддержкой, а также набор постобработки. Сначала стоит определить, действительно ли источник чересстрочный: прогрессивный фильм, хранящийся в телевизионном контейнере, не всегда требует деинтерлейсинга.
Для телесина и сложных источников простого фильтра может быть недостаточно. Важны порядок полей, исходная частота и способ преобразования. Если задача — архивное перекодирование, лучше сначала исследовать короткий фрагмент с движением и титрами, а затем переносить цепочку на весь файл. MPlayer удобен как просмотрщик для этой проверки: фильтры можно опробовать без записи результата.
Сетевые потоки, кэш и сохранение входа
MPlayer может принимать медиаданные не только из файла. В документации предусмотрены сетевые источники через HTTP, FTP, MMS, RTSP/RTP и другие поддерживаемые протоколы. Адрес передаётся вместо имени файла, после чего остальная логика остаётся прежней: выбор дорожек, декодирование, фильтры и вывод. Фактическая поддержка протокола зависит от сборки и библиотек.
При нестабильном канале помогает кэш. Параметр -cache задаёт размер буфера, а связанные настройки управляют моментом начала воспроизведения и поведением при перемотке. Увеличение кэша не ускоряет медленный сервер и не исправляет потерянные пакеты, но позволяет сглаживать кратковременные провалы пропускной способности. Слишком большой буфер, наоборот, увеличивает задержку запуска и расход памяти.
mplayer -cache 8192 "<адрес_потока>"
Если поток уже успешно читается MPlayer, его можно сохранить в исходном виде через -dumpstream и -dumpfile. Это не перекодирование: программа записывает получаемые данные в файл. Такой способ полезен, когда нужно сначала стабильно получить поток, а уже потом анализировать или перекодировать локальную копию. Он не исправляет структуру источника и не гарантирует удобный контейнер, если сервер выдаёт нестандартный поток.
Для автоматических сценариев можно читать вход со стандартного ввода. Это позволяет связать загрузчик, генератор или другой процесс с MPlayer конвейером оболочки. В таком варианте важнее кэширование и невозможность произвольного поиска назад: если источник не поддерживает позиционирование, перемотка ограничена тем, что уже находится в буфере.
Плейлисты и безопасность разбора
Список воспроизведения подключается параметром -playlist. MPlayer умеет последовательно проходить элементы, повторять их и перемешивать порядок. Поскольку плейлист может содержать ссылки и специальные конструкции, не стоит принудительно трактовать неизвестные данные как плейлист. В справке отдельно выделен режим, разрешающий опасный разбор плейлистов; его имеет смысл включать только для доверенных источников.
Если сервер отдаёт неправильный MIME-тип или файл с неочевидным расширением, лучше сначала сохранить его и определить структуру по содержимому, чем ослаблять проверки глобально. Для пакетной системы, работающей с внешними материалами, это ещё важнее: медиаплеер не должен становиться универсальным парсером любых непроверенных текстовых ответов.
Оптические диски и специальные источники
MPlayer использует специальные схемы источников для DVD, VCD и CD Audio. Для DVD выбирается титул, для VCD — номер дорожки, а устройство при необходимости задаётся отдельным параметром. Это позволяет работать с диском без предварительного копирования в файл. Навигация и доступные функции зависят от того, используется прямое чтение титула или DVD-навигация.
mplayer dvd://1
mplayer vcd://2
mplayer cdda://1-5
При работе с DVD важны номер титула, глава, аудиодорожка и субтитры. Сначала удобно запустить диск с подробным выводом и посмотреть, какие идентификаторы доступны, затем закрепить выбор -aid, -sid, -alang или -slang. Если диск читается нестандартным приводом, путь к устройству задаётся явно.
MEncoder способен использовать DVD-титул как вход и перекодировать его так же, как обычный файл. Однако создание файла, совместимого с DVD-плеером, не сводится к чтению DVD: выходной MPEG должен соответствовать ограничениям по разрешению, частоте, GOP, аудио и битрейту. Для этого используются специальные параметры MPEG-мультиплексора и кодека.
ТВ, устройства захвата и DVB
В синтаксисе MPlayer предусмотрены источники tv://, dvb://, radio:// и другие аппаратно-зависимые режимы. Они предназначены для сборок, в которых есть соответствующие драйверы. Для аналогового TV-входа параметры -tv задают драйвер, устройство, вход, размер кадра, стандарт и аудио. MEncoder может использовать тот же источник для записи.
При захвате реального сигнала требования строже, чем при перекодировании файла: данные приходят непрерывно, и пропущенный момент нельзя дочитать позже. Поэтому цепочка фильтров и кодер должны успевать обрабатывать кадры в реальном времени. Если процессор не справляется, сначала уменьшают сложность фильтрации или выбирают более лёгкий режим кодирования, а не просто увеличивают буфер.
В документации есть примеры захвата с одновременным crop, постобработкой, масштабированием, MPEG-4-видео и MP3-звуком. Такие команды полезны как схема, но параметры конкретного устройства нельзя переносить буквально: номер входа, имя драйвера, допустимые размеры и аудиоустройство зависят от оборудования и операционной системы.
MEncoder: структура команды преобразования
Типичная команда MEncoder отвечает на четыре вопроса: откуда читать, как обработать видео, как обработать звук и куда записать. Видеокодер выбирается -ovc, аудиокодер — -oac, выходной файл — -o, контейнер при необходимости — -of. Фильтры ставятся до кодирования и получают декодированные данные.
mencoder input.mkv \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2200 \
-oac mp3lame -lameopts abr:br=160 \
-vf scale=1280:720 \
-o output.avi
Команда mencoder -ovc help показывает доступные видеокодеры, -oac help — аудиокодеры. В документации для видео перечисляются, среди прочего, lavc, Xvid, x264, raw и copy, а для звука — LAME MP3, lavc, FAAC, tooLAME/twolame, PCM и copy. Не каждый пункт присутствует в каждой сборке: внешний кодек должен быть подключён при компиляции.
Контейнер выбирается независимо. MEncoder традиционно хорошо работает с AVI, умеет MPEG-PS и может использовать libavformat через -of lavf для других контейнеров. При lavf формат может определяться по расширению или задаваться параметром мультиплексора. Если нестандартный контейнер даёт ошибку синхронизации или несовместимый заголовок, разумно проверить ту же кодирующую часть в более простом контейнере и тем самым отделить проблему кодека от мультиплексора.
Почему расширение выходного файла недостаточно
Имя output.mp4 само по себе не заставляет MEncoder использовать H.264 и AAC. Кодеки задаются отдельно, а контейнер должен уметь их хранить. И наоборот, MPEG-4 Part 2 можно поместить не только в один тип файла. Правильная последовательность выбора такова: определить требования устройства или программы назначения, затем выбрать допустимые видео- и аудиокодеки, после этого — контейнер, и только потом параметры качества.
Для совместимости нужно учитывать не только название кодека, но и профиль, уровень, размер кадра, частоту кадров, формат пикселей и особенности мультиплексирования. MEncoder предоставляет много низкоуровневых параметров, но не превращает произвольную комбинацию в стандартный профиль автоматически.
Копирование потоков без повторного кодирования
Опции -ovc copy и -oac copy копируют сжатые видеопакеты и аудиопакеты без повторного кодирования. Это экономит время и сохраняет исходное качество соответствующей дорожки. Типичный сценарий — перекодировать только звук, оставив видео как есть, или наоборот. Ещё один вариант — объединить существующее видео с внешней аудиодорожкой.
mencoder input.avi -ovc copy -oac mp3lame \
-lameopts abr:br=160 -o new-audio.avi
mencoder input-video.avi -audiofile external-audio.mp3 \
-ovc copy -oac copy -o muxed.avi
Копирование не равно универсальному remux. Контейнер назначения должен принимать исходный формат потока и его служебные метки. Документация прямо предупреждает, что перенос аудио между контейнерами иногда требует корректного format tag. Если плеер не распознаёт скопированную дорожку, нужно проверить FourCC/format tag и возможности выбранного мультиплексора, а не перекодировать всё вслепую.
Видео в режиме copy нельзя пропустить через обычные пиксельные фильтры: кадры не декодируются. Поэтому -vf scale, crop, деинтерлейсинг и наложение субтитров несовместимы с идеей полного stream copy видео. То же относится к аудиофильтрам при копировании сжатого звука.
Резка по времени при stream copy ограничена ключевыми кадрами и структурой контейнера. Если нужен точный начало и конец, особенно на межкадровом кодеке, перекодирование фрагмента надёжнее. Быстрая операция без потери качества возможна только там, где границы и контейнер позволяют корректно начать поток.
Кодирование через libavcodec
Режим -ovc lavc передаёт видео одному из кодеров libavcodec, а параметры задаются в -lavcopts. Классический пример — MPEG-4 Part 2 с vcodec=mpeg4. Можно задать целевой битрейт, размер GOP, режим анализа движения и другие параметры. Для звука -oac lavc использует аудиокодеры той же библиотеки, например MP2 или AC-3, если они присутствуют.
mencoder input.avi \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2000:mbd=2:trell \
-oac lavc -lavcopts acodec=mp2:abitrate=192 \
-o output.avi
В одной строке -lavcopts могут находиться параметры и видео-, и аудиокодера. В больших сценариях это удобно вынести в профиль, чтобы не дублировать длинный набор. При этом параметры, относящиеся к конкретному стандарту, нельзя считать универсальным улучшением качества: например, значения буфера и максимального битрейта для DVD задаются ради соответствия DVD, а не ради абстрактно лучшего изображения.
Битрейт — один из факторов качества, но не единственный. На результат влияют сложность сцены, разрешение, фильтрация, частота кадров, структура GOP и режим анализа. Увеличение битрейта после определённого момента даёт всё меньшую пользу, а нарушение ограничений устройства может сделать файл непригодным для воспроизведения на целевом оборудовании.
Xvid и x264 в MEncoder
Если сборка связана с Xvid, кодер выбирается через соответствующий режим, а параметры передаются в -xvidencopts. Xvid ориентирован на MPEG-4 ASP и традиционно применялся для AVI и совместимых аппаратных плееров. Для таких задач важны профиль, FourCC, B-кадры, quantizer и ограничения конкретного устройства.
x264 подключается отдельно и управляется -x264encopts. Это даёт доступ к H.264/AVC и параметрам анализа, B-кадрам, reference frames, deblocking и другим настройкам кодера. Наличие опции в документации не означает, что любой готовый бинарник содержит x264: сначала проверяют mencoder -ovc help.
При выборе между Xvid и x264 сначала определяют совместимость назначения. Для старого аппаратного проигрывателя MPEG-4 ASP может быть практичнее, а для среды с поддержкой H.264 логичнее x264. MEncoder не скрывает эти различия пресетом для любого устройства, поэтому пользователю приходится понимать ограничения целевого формата.
Двухпроходное кодирование
Двухпроходный режим нужен, когда важен заданный средний битрейт или размер и хочется распределить биты между простыми и сложными сценами осмысленнее. На первом проходе кодер собирает статистику сложности кадров, на втором использует её для распределения битрейта. В документации для libavcodec применяется параметр vpass=1 и vpass=2.
mencoder input.mpg \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:vpass=1 \
-oac copy -o /dev/null
mencoder input.mpg \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800:mbd=2:trell:vpass=2 \
-oac copy -o output.avi
В Windows вместо /dev/null для ненужного файла первого прохода используют соответствующее системное устройство. Суть одинакова: первый результат как видеофайл не нужен, важна статистика. Статистический файл следует сохранять до завершения второго прохода и не смешивать между разными исходниками.
Двухпроходность не исправляет плохой исходник и не заменяет фильтрацию. Если видео требует crop, деинтерлейсинга или масштабирования, одна и та же цепочка должна использоваться в обоих проходах, иначе статистика будет описывать не те кадры, которые кодируются во втором.
При постоянном качестве или при отсутствии строгого ограничения размера двухпроходный режим может быть не нужен. Это инструмент распределения ограниченного битрейта, а не обязательная стадия любого кодирования.
Кодирование звука в MEncoder
Аудио можно копировать, кодировать через libavcodec, LAME MP3, MP2-кодеры и другие доступные модули. Выбор зависит от контейнера и назначения. Для AVI распространён MP3, для MPEG-совместимых дисковых форматов используются MP2 или AC-3 согласно требованиям, а PCM подходит, когда размер не критичен и нужен несжатый звук.
Режим LAME выбирается -oac mp3lame, а параметры передаются в -lameopts. Поддерживаются CBR, ABR и VBR. Не стоит механически повышать битрейт выше качества источника: перекодирование уже сжатого звука не возвращает потерянные данные. Если исходная дорожка уже совместима с контейнером назначения и не требует фильтров, -oac copy сохраняет её без дополнительной потери.
mencoder input.avi -ovc copy \
-oac mp3lame -lameopts abr:br=160 \
-o output.avi
Изменение частоты дискретизации выполняется аудиофильтром или соответствующей опцией ресемплера. Для стандартных дисковых профилей частота может быть обязательной, например 48 кГц для типичных DVD-сценариев. Перед кодированием многоканального материала нужно решить, сохраняются ли все каналы, выполняется ли downmix и поддерживает ли целевой кодек нужную конфигурацию.
Если после преобразования звук уходит от видео, сначала сравнивают временную шкалу исходника, частоту кадров и режимы синхронизации. Повторное аудиокодирование само по себе не гарантирует исправление таймстампов. В сложных случаях полезно отдельно получить видео и звук, проверить их длительность, а затем выбрать способ мультиплексирования.
Создание MPEG, VCD, SVCD и DVD-совместимых потоков
MEncoder умеет формировать MPEG-PS через -of mpeg. Для VCD, SVCD и DVD важны не только кодеки, но и разрешение, частота кадров, буфер декодера, максимальный битрейт, размер GOP, аудиоформат и параметры мультиплексора. Произвольный MPEG-2-файл не становится DVD-совместимым только из-за расширения .mpg.
Для VCD применяется MPEG-1 Video, для SVCD обычно MPEG-2 Video, для DVD — MPEG-2 Video; звуковая часть выбирается согласно ограничениям соответствующего стандарта. В документации приведены наборы -lavcopts для этих случаев и отдельные параметры -mpegopts. Если файл предназначен для авторинга диска, лучше придерживаться этих ограничений, чем рассчитывать на терпимость конкретного бытового плеера.
mencoder input.avi \
-of mpeg -mpegopts format=dvd:tsaf \
-vf scale=720:576,harddup -ofps 25 \
-oac lavc -ovc lavc \
-lavcopts vcodec=mpeg2video:vbitrate=5000:acodec=ac3:abitrate=192 \
-o movie.mpg
Пример показывает структуру, а не универсальный пресет. Соотношение сторон, порядок полей, битрейт, GOP и исходная частота должны соответствовать конкретному материалу. Если исходник уже 25 кадров/с, PAL-цепочка логична; принудительное превращение материала другой частоты в 25 кадров/с без понимания метода может дать рывки движения.
Параметр harddup встречается в рекомендациях для ряда MPEG-сценариев, потому что заставляет фильтровую цепочку выдавать дублированные кадры там, где это требуется временной модели. Использовать его нужно в контексте конкретной цепочки, а не добавлять ко всем командам MEncoder.
Ролик из последовательности изображений
Источник mf:// позволяет создать видео из JPEG, PNG, TGA и других поддерживаемых изображений. Параметр -mf задаёт тип, частоту кадров и при необходимости размеры. Файлы можно выбрать маской, перечислить явно или передать список. Это удобно для таймлапса, визуализации расчётов, кадров рендера и слайд-шоу.
mencoder "mf://*.jpg" -mf fps=25:type=jpg \
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
-oac copy -o sequence.avi
Все изображения в последовательности лучше заранее привести к одинаковому размеру. Документация допускает смешение некоторых типов изображений при совпадении геометрии, но разные размеры усложняют фильтровую цепочку и могут привести к ошибкам. Если кадры имеют альфа-канал, нужно заранее решить, как он будет преобразован в обычное видео.
Режим -ovc copy в источнике изображений имеет особый смысл: при JPEG можно сформировать Motion JPEG без повторного сжатия каждого JPEG-кадра, а для PNG — Motion PNG в подходящем контейнере. Это не универсальная экономия: целевой проигрыватель должен понимать такой формат.
Частота кадров и временная шкала
Видеофайл содержит не только последовательность изображений, но и время их показа. MPlayer старается соблюдать временные метки и синхронизировать звук с видео. MEncoder при преобразовании может менять выходную частоту через -ofps, но это решение должно соответствовать цели. Простая замена 23,976 на 25 или 29,97 на 30 без правильного преобразования движения способна добавить дубли или пропуски кадров.
Если источник имеет переменную частоту кадров или повреждённые таймстампы, сначала полезно посмотреть консольный вывод MPlayer и оценить, где возникает рассинхронизация. В некоторых контейнерах проблема находится на уровне временных меток, а не кодека. Перекодирование с жёстким -ofps может визуально выровнять поток, но при неправильной интерпретации входного времени создаст новый дефект.
Для изображения из серии файлов частота задаётся явно, потому что отдельные JPEG или PNG не несут таймстампов видеоряда. Там -mf fps=... определяет скорость чтения кадров, а -ofps — параметры выходного потока. Если значения различаются, MEncoder должен решить, как распределить кадры, поэтому лучше задавать согласованную схему.
Наложение субтитров при перекодировании
Если субтитры должны стать частью изображения, MEncoder должен декодировать видео, отрисовать текст или графику и закодировать кадры заново. Такой результат называют вшитыми субтитрами: их нельзя отключить после кодирования. Механизм использует те же настройки шрифтов, кодировки и выбора дорожки, что и воспроизведение, поэтому до долгого запуска стоит проверить короткий участок в MPlayer.
Главная практическая ошибка — пытаться совместить отрисовку субтитров с -ovc copy. При копировании сжатые видеопакеты не превращаются в кадры, следовательно, на них нечего рисовать. Для вшивания нужен обычный видеокодер. Звуковую дорожку при этом можно оставить в -oac copy, если контейнер и формат совместимы.
Для SSA/ASS результат зависит от поддержки соответствующего рендерера и шрифтов. Если важны сложные стили, позиционирование и типографика, сначала сравнивают отображение в MPlayer с ожидаемым. Для простого SRT достаточно корректной кодировки, гарнитуры, размера и вертикальной позиции.
Снимки кадров и служебный вывод
MPlayer может использовать видеовыходы, которые записывают кадры в изображения, а также фильтр screenshot в тех сборках, где он доступен. Это удобно для контрольных кадров, поиска сцен и визуальной проверки фильтров. Важно отличать снимок декодированного кадра от снимка окна: первый не содержит рамку оконной системы и обычно соответствует пикселям видеопотока после выбранной стадии обработки.
Если требуется серия кадров, нужно учитывать объём данных. Несжатый или PNG-вывод быстро создаёт большое количество файлов, а JPEG вносит дополнительное сжатие. Для технического сравнения фильтров лучше использовать формат без потерь, а для эскизов достаточно JPEG разумного качества.
Консольный вывод MPlayer полезен не меньше скриншота. В нём видны контейнер, потоковые идентификаторы, параметры видео, выбранный декодер, аудиоформат, драйверы и предупреждения. При обращении за помощью такой журнал часто информативнее изображения ошибки: он показывает этап, на котором произошёл сбой.
Конфигурационные файлы
Параметры можно перенести из длинной командной строки в конфигурацию. Для MPlayer используются системный mplayer.conf и пользовательский ~/.mplayer/config, для MEncoder — соответствующий mencoder.conf. Командная строка имеет более высокий приоритет и может переопределять сохранённые значения.
Синтаксис конфигурации представляет собой пары параметр-значение. Флаги включаются значениями вроде yes, а комментарии начинаются с #. Это удобно для постоянного выбора аудиодрайвера, настроек субтитров, кэша, любимой цепочки фильтров или стандартных параметров кодирования.
# пример конфигурации MPlayer
fs=no
cache=8192
slang=rus,eng
# пример параметров MEncoder
ovc=lavc
oac=mp3lame
lavcopts=vcodec=mpeg4:vbitrate=1800
Глобальная конфигурация должна содержать только действительно универсальные настройки. Если туда поместить жёсткий -vf, конкретный -vo или принудительный декодер, неожиданные проблемы появятся на других файлах. Для специфических сценариев лучше использовать профили.
MPlayer также умеет применять конфигурацию к конкретному файлу и, при явном разрешении, читать настройки из каталога воспроизводимого файла. Последний механизм удобен для личной медиатеки, но небезопасен для недоверенных каталогов: конфигурационный файл рядом с загруженным медиа не должен автоматически получать право влиять на запуск.
Профили MPlayer и MEncoder
Профиль — именованный набор параметров внутри конфигурационного файла. Его вызывают через -profile. Это компромисс между гигантской командой и слишком широкими глобальными настройками. Можно создать отдельные профили для DVD, сетевого потока, проектора, быстрого чернового кодирования и архивного преобразования.
Профили умеют наследовать другие профили. Например, базовый профиль MPEG-4 задаёт кодек и битрейт, а профиль повышенного качества добавляет более дорогие параметры анализа. Так общая часть хранится один раз, а различия остаются видимыми.
[mpeg4]
profile-desc=MPEG-4 encoding
ovc=lavc
lavcopts=vcodec=mpeg4:vbitrate=1800
[mpeg4-hq]
profile=mpeg4
lavcopts=vcodec=mpeg4:vbitrate=1800:mbd=2:trell
Команда -profile help показывает определённые профили, а -show-profile помогает увидеть их содержимое. Перед пакетной обработкой полезно вывести профиль и убедиться, что глобальная конфигурация не добавляет лишние параметры.
Slave-режим и встраивание MPlayer
С ключом -slave MPlayer читает команды из стандартного ввода, по одной строке. Вместо прямого перехвата клавиатуры управление передаётся внешней программе. Это один из способов использовать MPlayer как медиадвижок под собственным интерфейсом или в автоматизированной системе.
Команды slave-режима соответствуют внутренней системе управления: можно запускать поиск, ставить на паузу, менять громкость и запрашивать свойства, если конкретная команда поддерживается. Полный список нужно получать через -input cmdlist для используемой сборки. Внешняя программа должна разбирать ответы MPlayer и не полагаться только на видимый текст статуса.
Сам -slave не отключает остальные источники ввода автоматически. Если нужно полностью контролируемое встраивание, дополнительно отключают обычные привязки клавиш и продумывают, какие события может получать видеокно. Это особенно важно в киоске или тестовой системе, где пользователь не должен случайно остановить процесс.
Edit Decision List: автоматический пропуск и приглушение
EDL позволяет описать интервалы, которые MPlayer должен пропускать или приглушать при просмотре. Файл состоит из времени начала, времени окончания и кода действия. Это не монтаж исходного файла: медиаданные остаются прежними, а MPlayer меняет поведение только во время воспроизведения.
5.3 7.1 0
15.0 16.7 1
420.0 422.0 0
Действие 0 обозначает пропуск, 1 — приглушение. Файл подключается параметром -edl. Для подготовки разметки можно использовать -edlout и интерактивно отмечать границы, после чего вручную уточнить секунды.
EDL удобен для повторяемого просмотра записей, где нужно автоматически пропускать заставки, рекламу или технические участки. Если требуется физически получить новый файл без этих фрагментов, EDL сам по себе этого не делает; потребуется отдельное преобразование или монтаж с учётом ключевых кадров.
Диагностика по консольному выводу
Когда MPlayer не открывает файл или MEncoder останавливается, полезно определить, на каком слое возникла ошибка. Последовательность обычно такая: открытие источника, определение демультиплексора, чтение дорожек, выбор декодеров, создание фильтров, инициализация аудио- и видеовыхода либо кодеров, затем мультиплексирование. Сообщение возле последнего успешно пройденного этапа часто сразу сужает круг причин.
Режим -v увеличивает подробность. Ещё тоньше вывод настраивается через -msglevel, где уровни можно задавать для отдельных модулей. Для обычной проблемы достаточно одного-двух уровней подробности; максимальный debug создаёт огромный журнал, в котором полезное сообщение легко потерять.
Если файл не играет, сначала полезно проверить его без пользовательской конфигурации или с минимальным набором параметров. Иначе сохранённый vo, фильтр, профиль или принудительный декодер может маскировать проблему. После успешного минимального запуска опции возвращают по одной группе.
Для MEncoder диагностику также разделяют на вход и выход. Если MPlayer воспроизводит исходник, но MEncoder не начинает кодирование, источник и декодеры, вероятно, исправны, а искать нужно в выбранном кодере, фильтре или мультиплексоре. Если MPlayer уже не может последовательно прочитать файл, попытка перекодирования теми же компонентами обычно столкнётся с той же проблемой.
Типичные ошибки и способы исправления
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Нет изображения, звук идёт | Не инициализировался видеовыход или выбран несовместимый декодер | -vo help, другой -vo, вывод -v, затем при необходимости -vc |
| Есть видео, нет звука | Проблема аудиодрайвера, дорожки или декодера | -ao help, -aid/-alang, выбранный -ac |
| Неверные символы в субтитрах | Ошибочно определена кодировка или шрифт | -subcp, UTF-8, Fontconfig/FreeType, доступность гарнитуры |
| Перемотка неточная | Повреждён или отсутствует индекс, редкие ключевые кадры | -idx/-forceidx, структура контейнера, режим stream copy |
| Изображение растянуто | Неверно интерпретирован aspect ratio или выполнено неправильное масштабирование | метаданные DAR/PAR, -aspect, порядок crop/scale |
| Рассинхронизация постоянная | Фиксированный сдвиг дорожки | -delay или задержка субтитров |
| Рассинхронизация растёт | Проблема временной шкалы, частоты кадров или захвата | таймстампы, -ofps, источник, режим синхронизации |
| MEncoder отвергает кодер | Модуль не включён в сборку | mencoder -ovc help и -oac help |
| Фильтр не действует при copy | Поток не декодируется | заменить -ovc copy или -oac copy на реальное кодирование |
| Сетевой поток заикается | Колебания канала или слишком маленький буфер | -cache, стабильность источника, локальное сохранение потока |
| OSD не показывает текст | Нет подходящего шрифта или сборка без нужной поддержки | настройки -font, FreeType/Fontconfig, уровень OSD |
| Выходной файл не открывается на устройстве | Несовместим профиль кодека, контейнер или параметры потока | требования устройства, FourCC, профиль, уровень, GOP и аудио |
Сообщение о несовместимом цветовом пространстве
Если выбранный видеовыход или кодер не принимает формат кадра от декодера, MPlayer может предложить преобразование через scale. Это не обязательно означает изменение геометрии: фильтр масштабирования также умеет выполнять преобразования пиксельного формата. При диагностике можно попробовать другой -vo или явно добавить подходящий фильтр и посмотреть, исчезает ли ошибка.
В MEncoder подобная ситуация возникает между декодером, фильтрами и кодером. Некоторые кодеры принимают ограниченный набор YUV-форматов. Правильнее вставить контролируемое преобразование перед кодером, чем менять контейнер: контейнер не определяет формат кадров внутри кодера.
Проблемы с полноэкранным режимом и окном
Если полноэкранный режим даёт чёрные поля, неверную геометрию или не переключается, причина может находиться в оконном менеджере и видеовыходе. Сначала проверяют другой -vo, затем параметры -fs, -zoom, -geometry и соотношение сторон. Не следует лечить проблему окна перекодированием исходного файла, пока не подтверждено, что сами пиксели имеют неправильную геометрию.
Проблемы с сетью и потоками
Если файл по сети открывается, но периодически останавливается, увеличение кэша помогает только при кратковременных провалах. При устойчиво недостаточной скорости буфер рано или поздно опустеет. Если сервер позволяет, надёжнее сначала сохранить поток через -dumpstream, а затем работать с локальным файлом.
Если поток вообще не определяется, проверяют поддержку протокола в сборке, затем доступность адреса внешними средствами и только после этого кодек. Ошибка протокола возникает раньше декодирования, поэтому смена -vc ничего не изменит.
Пакетная обработка и сценарии
MEncoder особенно удобен в сценариях оболочки, где одна и та же команда применяется к множеству входов. Главное правило — отделять параметры от имён файлов и не строить команду простой конкатенацией строк. Имена с пробелами и служебными символами должны передаваться как отдельные аргументы, а выходное имя нужно генерировать так, чтобы не перезаписать исходник.
Хороший пакетный сценарий выполняет предварительную проверку: существует ли вход, не занят ли выход, доступен ли требуемый кодер, успешно ли завершился предыдущий файл. MEncoder возвращает код завершения процессу, поэтому сценарий может остановиться при ошибке вместо того, чтобы продолжать и производить пустые или неполные файлы.
Для разных типов входа удобно создавать профили. Например, один профиль выполняет только remux с копированием потоков, другой масштабирует до 720p и кодирует MPEG-4, третий готовит MPEG-2 для дискового авторинга. Скрипт тогда отвечает за выбор профиля и имена, а длинные кодек-параметры хранятся в одном месте.
Перед массовой обработкой полезно прогнать короткий репрезентативный фрагмент. На нём проверяются субтитры, aspect ratio, порядок полей, громкость, синхронизация и совместимость выходного файла. Это не искусственный тест скорости, а способ избежать многочасовой обработки с неверной цепочкой.
Практические сценарии MPlayer
Быстро проверить неизвестный файл
Запустите файл без принудительных кодеков и драйверов, затем при необходимости добавьте -v. Посмотрите, какой контейнер определён, сколько найдено дорожек, какой декодер выбран и где останавливается инициализация. Если изображение не появляется, попробуйте -vo help и другой видеовыход. Если проблема только со звуком — аналогично -ao help.
Выбрать конкретный язык
Если контейнер содержит языковые метки, задайте приоритет -alang и -slang. Это удобнее числовых ID для коллекции файлов, где номера дорожек различаются. Если меток нет или они неверны, используйте -aid и -sid после просмотра подробного вывода.
Синхронизировать внешние субтитры
Подключите файл через -sub, исправьте кодировку при необходимости и затем настройте постоянную задержку. Если начало совпадает, а к концу субтитры заметно уходят, ищите версию субтитров под другой монтаж или другую частоту кадров: постоянная задержка не исправит линейное растяжение времени.
Проверить crop и scale перед кодированием
Примените в MPlayer ту же цепочку -vf, которую планируете использовать в MEncoder. Просмотрите сцены с титрами, быстрым движением и контрастными границами. Убедитесь, что crop не срезает полезную часть, aspect ratio правильный, а деинтерлейсинг не портит прогрессивные кадры. После этого переносите цепочку в команду кодирования.
Смотреть нестабильный поток
Начните с умеренного -cache. Если паузы сохраняются и источник допускает последовательное сохранение, сначала запишите поток, затем воспроизводите локально. Так проблемы сети отделяются от проблем декодера и видеовыхода.
Практические сценарии MEncoder
Перекодировать только звук
Если видео уже подходит, используйте -ovc copy, а для аудио выберите нужный кодер. Это быстрее полного перекодирования и сохраняет видеодорожку без поколенческой потери. Перед запуском убедитесь, что контейнер назначения поддерживает исходный видеокодек.
Изменить разрешение видео
Выберите реальный видеокодер и добавьте -vf scale=ширина:высота. Режим -ovc copy здесь неприменим. Если у исходника есть чёрные поля, crop лучше поставить перед scale, чтобы не расходовать вычисления и битрейт на лишние пиксели.
Подготовить короткий фрагмент
Используйте -ss и -endpos, затем обычную цепочку кодирования. Для точных границ не рассчитывайте на stream copy межкадрового кодека. Проверьте начало и конец готового файла, особенно если исходник имеет редкие ключевые кадры.
Собрать видео из рендера
Передайте кадры через mf://, задайте -mf fps=... и кодер. Нумерация файлов должна сортироваться в правильной последовательности; имена вроде frame0001, frame0002 надёжнее, чем числа без ведущих нулей в простых масках оболочки.
Сделать двухпроходное MPEG-4
В первом проходе используйте ту же фильтрацию и целевой битрейт, что и во втором, но не сохраняйте ненужный видеорезультат. Во втором проходе переключите vpass и запишите конечный файл. Не удаляйте статистику между проходами и не запускайте параллельно несколько задач в один и тот же passlog.
Сохранить видео и заменить аудио
Используйте -audiofile для внешнего звука, -ovc copy для видео и либо -oac copy, либо аудиокодер. Если длительности различаются, заранее решите, что должно произойти после окончания короткой дорожки; MEncoder не является нелинейным редактором и не подгоняет содержимое автоматически по смыслу.
Ограничения рабочего подхода
Главное ограничение связки — высокая цена ошибки в командной строке. MPlayer и MEncoder дают много низкоуровневых параметров, но не защищают пользователя от всех логически несовместимых комбинаций. Можно создать файл, который формально кодируется, но плохо совместим с целевым устройством, имеет неверный aspect ratio или содержит нежелательное преобразование частоты кадров.
Вторая сложность — зависимость доступных функций от сборки. Документация описывает драйверы и кодеры, которые могут быть отключены при компиляции. Поэтому рецепты с x264, FAAC, конкретным -vo или аппаратным входом нельзя считать гарантированными до проверки help-вывода.
Третья особенность — MEncoder не заменяет полноценный нелинейный монтаж. Он умеет выбирать фрагмент, фильтровать, кодировать и объединять потоки, но не предлагает многодорожечную монтажную шкалу, ключевые кадры графических эффектов и проект с большим количеством клипов. Для такой работы нужен редактор, а MEncoder полезен как преобразователь до или после монтажа.
Как выбирать между MPlayer и MEncoder в одной задаче
Если требуется только посмотреть, проверить или измерить поведение фильтра, начинайте с MPlayer. Он быстрее даёт обратную связь и не создаёт выходной файл. Когда цепочка подтверждена, переносите параметры фильтров и выбора дорожек в MEncoder. Такой двухэтапный подход уменьшает число долгих неудачных кодирований.
Если нужно изменить лишь контейнер или одну дорожку, сначала проверяйте возможность stream copy. Повторное кодирование применяется только там, где меняется содержимое. Если требуется изменить размеры, пиксели, частоту дискретизации, число каналов или вшить субтитры, соответствующий поток придётся декодировать.
Если проблема находится в чтении источника, смена выходного кодека MEncoder её не исправит. Если проблема возникает только после декодирования, MPlayer помогает локализовать её через видеовыход и фильтры. Благодаря общей архитектуре две программы удобно использовать как диагностическую пару.
Параметры, которые полезно знать при воспроизведении
| Параметр | Для чего используется | На что обратить внимание |
|---|---|---|
-ss | Начать с заданного времени | Точность зависит от индекса и ключевых кадров |
-endpos | Остановить обработку через заданную длительность или позицию | Удобно для коротких проверок и фрагментов |
-fs | Полноэкранный режим | Поведение зависит от видеовыхода и оконной системы |
-vo | Выбрать видеодрайвер | Список смотрят через -vo help |
-ao | Выбрать аудиодрайвер | Список смотрят через -ao help |
-vf | Задать цепочку видеофильтров | Порядок фильтров влияет на результат |
-af | Задать цепочку аудиофильтров | Не работает поверх копируемого сжатого звука в MEncoder |
-aid/-alang | Выбрать аудиодорожку | Языковой выбор требует корректных меток контейнера |
-sid/-slang | Выбрать субтитры | Числовой ID надёжнее, если языковые метки отсутствуют |
-sub | Подключить внешний файл субтитров | Проверяют кодировку и шрифт |
-delay | Сдвинуть аудио относительно видео | Исправляет постоянный, а не нарастающий сдвиг |
-cache | Буферизовать вход | Полезно для сети и последовательных источников |
-playlist | Загрузить список воспроизведения | Не стоит ослаблять разбор для недоверенных файлов |
-loop | Повторять воспроизведение | Удобно для стендов и коротких роликов |
-shuffle | Случайный порядок списка | Относится к очереди, а не к кадрам внутри файла |
Эта таблица не заменяет man-страницу: часть опций имеет подопции и особое поведение для разных источников. Её задача — показать, какие группы параметров чаще всего участвуют в диагностике. Если команда становится длинной, повторяющиеся настройки лучше переносить в профиль.
Параметры, которые определяют кодирование
| Параметр | Назначение | Типичная ошибка |
|---|---|---|
-ovc | Выбор видеокодера или copy | Указан кодер, которого нет в сборке |
-oac | Выбор аудиокодера или copy | Контейнер не принимает выбранный звук |
-of | Выбор выходного контейнера | Расширение файла не соответствует мультиплексору |
-o | Имя выходного файла | Случайная перезапись существующего файла |
-lavcopts | Параметры libavcodec | Смешаны несовместимые настройки разных стандартов |
-xvidencopts | Настройки Xvid | Профиль не подходит целевому устройству |
-x264encopts | Настройки x264 | Кодер отсутствует в конкретном бинарнике |
-lameopts | Настройки LAME MP3 | Повторное сжатие уже подходящего MP3 без необходимости |
-ofps | Выходная частота кадров | Механическая смена fps создаёт дубли или пропуски |
-passlogfile | Файл статистики проходов | Несколько параллельных задач используют один и тот же файл |
-audiofile | Внешняя звуковая дорожка | Разная длительность или смещение не проверены заранее |
-mf | Параметры последовательности изображений | Неверная сортировка файлов или разные размеры кадров |
Параметры кодирования лучше рассматривать не по одному, а как согласованный профиль. Кодек задаёт свои ограничения; контейнер — свои; целевое устройство добавляет ещё один уровень. MEncoder не скрывает эти уровни за универсальным экспортным диалогом, поэтому итоговая строка часто длиннее, но её поведение можно точно воспроизвести.
Производительность и расход ресурсов
Скорость MPlayer зависит от сложности декодирования, фильтров, преобразования цветового пространства и видеовыхода. Если воспроизведение не успевает в реальном времени, сначала отключают тяжёлые фильтры и проверяют более подходящий видеодрайвер. Опция пропуска кадров может помочь сохранить синхронизацию на слабой системе, но ценой плавности, поэтому это аварийная мера, а не улучшение качества.
У MEncoder узким местом обычно становится видеокодирование. Более сложный поиск движения, дополнительные reference-кадры, B-кадры и другие алгоритмы повышают вычислительную нагрузку. Нельзя заранее обещать конкретное число кадров в секунду: оно зависит от процессора, сборки кодера, исходного разрешения, фильтров и настроек. Для планирования лучше измерить короткий фрагмент собственной командой.
Масштабирование большого кадра перед crop зря обрабатывает пиксели, которые затем выбрасываются. Поэтому при удалении полей разумно ставить crop раньше scale. Аналогично нет смысла выполнять дорогой деинтерлейсинг после уменьшения изображения, если выбранный алгоритм рассчитан на исходную структуру полей; порядок следует определять по смыслу преобразования, а не только по скорости.
Stream copy почти всегда легче полного перекодирования, потому что кодек не анализирует и не создаёт кадры. Но скорость такой операции всё равно ограничена чтением и записью, а также работой мультиплексора. Для сетевого входа пределом может стать канал. Быстрота не отменяет необходимость проверить совместимость потока с контейнером.
Качество результата: что реально влияет
Для перекодирования важнее всего не отдельная волшебная опция, а правильная последовательность решений. Сначала сохраняют нужный материал — не делают лишний crop и не удаляют кадры. Затем выбирают подходящее разрешение и частоту кадров. После этого определяют кодек и режим управления качеством или битрейтом. Только затем имеет смысл тонко настраивать анализ движения и другие параметры.
Повторное кодирование с потерями всегда добавляет новые потери, даже если битрейт высок. Если поток уже соответствует назначению, copy сохраняет больше качества, чем декодирование и повторное сжатие. Если изменение необходимо, лучше выполнить все нужные пиксельные операции за одно перекодирование, а не последовательно создавать несколько промежуточных lossy-файлов.
Двухпроходный режим полезен при целевом среднем битрейте, но не исправляет неправильно выбранное разрешение. Видео 1920×1080 на слишком низком битрейте может выглядеть хуже разумно уменьшенного варианта. С другой стороны, избыточное уменьшение необратимо удаляет детализацию. MEncoder даёт инструменты, но компромисс выбирает пользователь.
Для архивного мастер-файла лучше использовать формат и кодек, которые соответствуют требованиям архива, а не случайный профиль, предназначенный для бытового воспроизведения. Возможность MEncoder создавать rawvideo или PCM полезна как промежуточный этап, но объём таких файлов велик, и контейнерные ограничения нужно учитывать заранее.
Работа с несколькими экземплярами
MPlayer может запускаться несколькими независимыми процессами, что видно и на старых демонстрационных снимках. Это позволяет одновременно сравнивать разные параметры вывода, субтитры или фильтры. Однако несколько тяжёлых декодеров конкурируют за процессор, память и видеосистему, поэтому результаты производительности одного окна нельзя механически переносить на многопоточный стенд.
Для синхронного воспроизведения в документации предусмотрены UDP master/slave-параметры. Один процесс сообщает позицию, другие стараются держаться рядом с мастером. Это не система кадровой синхронизации профессионального видеостенда: сеть, задержки и декодирование всё равно влияют на точность. Для бытового или лабораторного сценария механизм может быть достаточен, но требования к строгому genlock он не заменяет.
Где удобнее использовать MPlayer, а где другие инструменты
MPlayer особенно силён как диагностический проигрыватель и управляемый медиабэкенд: быстро запускается из скрипта, печатает подробности, позволяет менять выходные драйверы и фильтры, умеет работать с необычными источниками. Если задача — библиотека с современной визуальной медиатекой, постерами и синхронизацией между устройствами, его интерфейсный подход не на это рассчитан.
MEncoder уместен, когда уже известна точная цепочка обработки и её нужно повторять. Для новичка с разовой конвертацией графический конвертер проще; для инженера или администратора возможность сохранить команду и прогнать её над сотней файлов может быть важнее визуального мастера экспорта.
Отдельно стоит различать MEncoder и FFmpeg. Оба могут выполнять многие операции преобразования из командной строки, но синтаксис, набор фильтров, контейнеры и современная экосистема различаются. Перенос опций между ними невозможен напрямую. Если сценарий уже построен на MPlayer-фильтрах и MEncoder, нет причины автоматически переписывать его; если задача требует возможностей, которых MEncoder не предоставляет удобно, FFmpeg может оказаться рациональнее.
Сравнение MPlayer / MEncoder с аналогами
| Программа | Лучше подходит для | Главное ограничение |
|---|---|---|
| MPlayer / MEncoder | Командного воспроизведения, диагностики потоков и сценариев перекодирования с общей системой фильтров | Требует знания параметров; MEncoder не предлагает современную монтажную шкалу |
| FFmpeg | Широкой автоматизации конвертации, фильтрации, remux и потоковой обработки | Сложный синтаксис и большое число взаимосвязанных параметров |
| VLC media player | Обычного просмотра, сетевого воспроизведения и разовой конвертации через графический интерфейс | Тонкие пакетные схемы обработки менее наглядны, чем у специализированного CLI |
| mpv | Командного воспроизведения с современным видеовыводом, скриптами и минимальным интерфейсом | Не является прямой заменой MEncoder как отдельного кодировщика файлов |
| HandBrake | Понятного массового перекодирования видео в распространённые профили через GUI или очередь | Не предназначен как универсальный медиапроигрыватель и низкоуровневый потоковый комбайн |
| Avidemux | Простой обрезки, фильтрации и перекодирования отдельных файлов с визуальным контролем | Менее удобен для сложной сценарной автоматизации большого числа источников |
Практический выбор зависит от того, что является центром работы. Если нужен проигрыватель с точным контролем драйверов, дорожек и фильтров плюс связанный с ним командный кодировщик, MPlayer / MEncoder остаётся целостной связкой. Если основная задача — современная конвертация и сложный фильтр-граф без привязки к MPlayer, чаще удобнее FFmpeg. Для просмотра без работы с командной строкой практичнее VLC или mpv с подходящей оболочкой, а для очереди типовых экспортов — HandBrake.
ВидеоМАСТЕР в эту таблицу не включён: он действительно относится к конвертации видео, но по модели использования заметно отличается от пары MPlayer / MEncoder, где существенная часть ценности находится в проигрывателе, консольном управлении и низкоуровневых драйверах. Сравнивать их как полностью взаимозаменяемые инструменты было бы неточно.
Как построить надёжную команду MEncoder с нуля
- Проверьте вход. Откройте файл в MPlayer без принудительных кодеков. Убедитесь, что нужные дорожки читаются последовательно.
- Определите изменения. Если видео не меняется, рассмотрите
-ovc copy; если звук не меняется —-oac copy. - Выберите контейнер назначения. Он должен принимать выбранные видео- и аудиопотоки и соответствовать требованиям целевого устройства.
- Соберите фильтры. Crop, деинтерлейсинг, scale и другие операции ставьте в осмысленном порядке и предварительно проверяйте в MPlayer.
- Выберите кодеры. Проверьте их наличие через help-режим конкретной сборки.
- Настройте качество. Задайте битрейт, режим качества или проходы согласно возможностям кодера.
- Сделайте короткий фрагмент. Проверьте картинку, звук, субтитры, длительность и совместимость.
- Только затем запускайте весь файл или пакет. Логи и коды завершения сохраняйте для диагностики.
Такой порядок уменьшает число переменных. Если сразу написать длинную строку с новым кодеком, неизвестным контейнером, тремя фильтрами и внешними субтитрами, при ошибке непонятно, какой компонент виноват. Постепенная сборка команды делает поведение предсказуемым.
Частые вопросы о MPlayer / MEncoder
Можно ли пользоваться MPlayer без графического интерфейса?
Да. Основной способ управления — командная строка и интерактивные команды. Видео выводится отдельным окном или через выбранный драйвер, а настройки передаются параметрами и конфигурационными файлами. gmplayer нужен только тем, кому удобнее графическая панель.
Можно ли MEncoder использовать только для смены контейнера?
Можно, если входные потоки совместимы с выходным контейнером и мультиплексором. Для этого применяют -ovc copy и -oac copy. Однако MEncoder не является универсальным remux-инструментом для любой комбинации кодека и контейнера; при несовместимости потребуется другой контейнер или перекодирование.
Почему фильтр не работает вместе с -ovc copy?
Потому что stream copy переносит сжатые пакеты без получения пиксельных кадров. Видео-фильтр работает с декодированным изображением. Чтобы изменить размер, цвет, поля, ориентацию или вшить субтитры, нужен реальный видеокодер.
Как понять, какие кодеки доступны?
Используйте help-команды самой сборки: mencoder -ovc help, mencoder -oac help, а для декодирования — соответствующие списки MPlayer. Документация шире конкретного бинарника, поэтому проверка на месте обязательна.
Как исправить неправильное соотношение сторон?
Сначала определите, неверны ли сами пиксели или только метаданные отображения. Для просмотра можно переопределить aspect ratio. Для нового файла решите, сохранять ли анаморфные пиксели с правильным DAR или пересчитывать кадр до квадратных пикселей. Без этого scale может закрепить ошибочную геометрию.
Можно ли сохранить сетевой поток без перекодирования?
Если MPlayer успешно читает поток, -dumpstream позволяет записать получаемые данные в файл. Это сохранение входа, а не создание нового кодированного файла, поэтому структура и кодеки останутся теми, которые выдаёт источник.
Для чего нужен -slave?
Он переводит MPlayer в режим управления командами через стандартный ввод. Внешняя программа может использовать плеер как бэкенд, посылая команды поиска, паузы, громкости и другие поддерживаемые операции.
Можно ли автоматически пропускать участки без создания нового файла?
Да, для этого подходит EDL. В файле задаются интервалы пропуска или приглушения, а MPlayer применяет их во время просмотра. Сам медиаконтент не меняется.
Почему двухпроходное кодирование занимает почти вдвое больше времени?
Потому что видео анализируется и кодируется в двух отдельных проходах. Первый собирает статистику, второй распределяет целевой битрейт на её основе. Если жёсткое ограничение среднего битрейта не требуется, такой режим не всегда оправдан.
Нужен ли отдельный кодек-пакет?
Зависит от конкретной сборки и формата. MPlayer содержит и использует множество собственных и библиотечных декодеров, но некоторые внешние кодеки или бинарные модули могли подключаться отдельно. Проверять нужно по фактическому сообщению о выбранном декодере и спискам help.
Можно ли одновременно изменить видео и оставить звук без потерь?
Да, если исходный аудиопоток допустим в выходном контейнере. Видео кодируется обычным -ovc, а звук переносится через -oac copy. Это распространённый способ избежать ненужного повторного сжатия аудио.
Можно ли использовать один конфигурационный файл для всех задач?
Технически можно задать много глобальных параметров, но это не лучшая практика. Универсальный config стоит ограничить базовыми настройками, а специфические цепочки кодирования и вывода оформить профилями. Так меньше риск, что скрытая глобальная опция испортит необычный файл.
Итоговый рабочий подход
MPlayer лучше всего использовать как быстрый способ понять вход: что находится в контейнере, какие дорожки доступны, какие декодеры выбраны, как ведут себя субтитры и фильтры, какой видеовыход работает корректно. После этого MEncoder переносит подтверждённую цепочку в выходной файл, при необходимости добавляя кодек, битрейт, контейнер и двухпроходный режим.
Для сохранения качества сначала ищут возможность копирования потока, а перекодируют только то, что действительно нужно изменить. Для надёжности сложную команду строят поэтапно, проверяют короткий фрагмент, фиксируют профиль и только потом запускают пакет. Такой подход хорошо соответствует архитектуре MPlayer / MEncoder: максимум контроля достигается не множеством случайных ключей, а пониманием границ между входом, декодером, фильтрами, кодером, контейнером и выводом.
Как читать строку состояния MPlayer
Во время воспроизведения MPlayer печатает компактную строку с временными позициями аудио и видео, их разницей, количеством обработанных кадров и дополнительными счётчиками. Эти данные полезны при диагностике рассинхронизации. Небольшое мгновенное отличие между временными позициями само по себе не означает неисправность: проигрыватель постоянно подстраивает подачу кадров и звука. Важно наблюдать, остаётся ли разница ограниченной или монотонно растёт.
Если счётчик пропущенных кадров увеличивается, система не всегда успевает вывести видео в реальном времени либо сама временная модель требует пропусков. Сначала отключают тяжёлые фильтры и проверяют более подходящий видеовыход. Если пропуски появляются только на одном повреждённом файле, нужно смотреть его таймстампы и индекс, а не оптимизировать всю систему под аномальный источник.
При MEncoder похожие сообщения помогают оценить ход обработки, но их не следует воспринимать как лабораторный бенчмарк. Скорость меняется от сцены к сцене, особенно у сложных кодеров. Гораздо важнее отсутствие повторяющихся ошибок, пропусков из-за неправильной временной шкалы и предупреждений мультиплексора.
Выбор дорожек до начала перекодирования
Файл с несколькими аудиодорожками лучше сначала исследовать в MPlayer. Числовые ID, языковые метки и порядок дорожек могут различаться между контейнерами. Если MEncoder получит не ту дорожку, само кодирование может пройти идеально, но результат будет содержать другой язык или комментарии режиссёра. Поэтому выбор -aid или -alang относится к содержательной проверке, а не к косметической настройке.
То же относится к субтитрам. Встроенная текстовая дорожка, VOBsub и внешний SRT — разные источники. Если субтитры должны остаться отключаемой дорожкой, MEncoder не следует заставлять отрисовывать их в кадр. Если же итоговый файл должен показывать текст на любом проигрывателе без поддержки выбранного формата субтитров, вшивание оправдано, но потребует повторного кодирования видео.
Для DVD полезно определить не только язык, но и конкретный титул. Диск может содержать меню, трейлеры, короткие служебные клипы и несколько вариантов фильма. Запуск кодирования по первому встреченному титулу без проверки длительности и дорожек — типичный источник неверного результата.
Порядок фильтров на реальном примере
Представим телевизионный источник 720×576 с небольшими чёрными полями, чересстрочной развёрткой и необходимостью получить прогрессивный файл меньшего размера. Логическая цепочка может выглядеть как определение полей, деинтерлейсинг, crop и затем scale. Если сначала уменьшить чересстрочный кадр, строки двух полей смешаются и последующий деинтерлейсер будет работать уже с повреждённой структурой. Если сначала масштабировать вместе с чёрными полями, часть вычислений и битрейта уйдёт на ненужную область.
Однако универсального порядка для любого видео нет. Некоторые операции зависят от точной структуры источника, а некоторые фильтры сами меняют временную шкалу. Поэтому MPlayer удобен как интерактивный стенд: одну и ту же сцену можно открыть с разными цепочками и проверить движение, мелкий текст, диагональные линии и границы кадра до запуска MEncoder.
После утверждения цепочки её нужно перенести без изменений во все проходы кодирования. Если первый проход двухпроходного кодера анализировал кадры без crop, а второй получает уже обрезанное видео, статистика перестаёт соответствовать реальному потоку. Это ухудшает смысл двухпроходного анализа и может привести к неожиданному распределению битрейта.
Когда принудительный FourCC помогает, а когда мешает
Некоторые старые проигрыватели распознают MPEG-4 ASP не только по реальному содержимому, но и по FourCC в контейнере AVI. MEncoder позволяет менять тег формата, однако это не превращает один кодек в другой. Подмена FourCC имеет смысл только для совместимого потока, когда проблема действительно в распознавании метки конкретным устройством.
Если декодер не поддерживает профиль, B-кадры, разрешение или другую реальную особенность потока, смена FourCC проблему не решит. Более того, ложная метка усложняет диагностику в других программах. Поэтому такие параметры применяют после проверки спецификации устройства, а не как универсальное средство от сообщения неподдерживаемый файл.
Что делать с повреждённым или неполным видео
MPlayer часто способен воспроизвести читаемую часть файла даже при ошибках отдельных пакетов. Это полезно для оценки повреждения, но успешный просмотр не гарантирует идеальное перекодирование: MEncoder проходит данные последовательно и может встретить участок, на котором декодер уже не может продолжить. Перед длительной обработкой повреждённого файла полезно прогнать его целиком с минимальным выводом или выполнить пробное декодирование без сложной фильтрации.
Если проблема связана с индексом AVI, помогают средства перестроения индекса. Если потеряны сами сжатые данные, индекс их не восстановит. В таком случае задача меняется: нужно сохранить максимально читаемые участки, принять возможные пропуски и только после этого создавать новый корректный контейнер.
Не стоит одновременно добавлять сложное масштабирование, смену частоты кадров и новый аудиокодек при попытке спасения. Чем проще первая успешная цепочка, тем понятнее, какие данные удаётся извлечь. После получения стабильного промежуточного результата можно выполнять обычное преобразование.
Разница между визуальной проверкой и проверкой файла
То, что изображение хорошо выглядит в окне MPlayer, ещё не доказывает правильность будущего файла. Видеовыход может масштабировать кадр только для экрана, а MEncoder сохранит исходное разрешение. MPlayer может применить фильтр в реальном времени, но если его забыть в команде MEncoder, результат будет другим. Поэтому после настройки нужно сравнивать не только вид окна, но и полный набор параметров.
Обратная ситуация тоже встречается: выходной файл может быть технически корректным, но конкретный -vo показывает его с неправильным aspect ratio или цветом. Проверка другим видеовыходом либо другим независимым проигрывателем помогает отделить дефект файла от дефекта отображения. Для ответственной конвертации это важнее, чем опираться на один экранный путь.
Организация каталога для повторяемых задач
При регулярном использовании удобно разделять исходники, временные файлы, статистику проходов и готовые результаты. Файл статистики двухпроходного кодирования не должен случайно использоваться для другого ролика. Временный WAV или промежуточный поток не должен иметь то же имя, что и мастер. Такая дисциплина особенно важна в сценариях, где несколько процессов MEncoder могут идти одновременно.
Команду или профиль полезно хранить рядом с описанием назначения: например, DVD PAL 16:9, MPEG-4 для внутреннего архива, только замена аудио. Название должно объяснять цель, а не обещать абстрактное максимальное качество. Это снижает риск применить профиль с жёсткими ограничениями к материалу, для которого он не предназначен.
Если набор параметров меняется, лучше создавать новый профиль или версию сценария, а не тихо переписывать старый. Тогда уже обработанные файлы можно воспроизвести теми же настройками и понять, почему два результата отличаются.
Что проверить после завершения MEncoder
- Файл открывается с начала и ближе к концу без ошибок контейнера.
- Длительность соответствует ожидаемому фрагменту, а не только исходному имени.
- Выбрана нужная аудиодорожка и сохранено требуемое число каналов.
- Субтитры либо корректно вшиты, либо сознательно не включены в изображение.
- Соотношение сторон не искажено, чёрные поля обработаны так, как планировалось.
- В сценах с движением нет артефактов неправильного деинтерлейсинга.
- Начало и конец не потеряны из-за неточного поиска по ключевым кадрам.
- Целевое устройство или программа действительно принимает выбранный контейнер и профиль кодека.
Эта проверка не требует пересматривать весь фильм. Достаточно нескольких контрольных мест: начало, фрагмент с быстрым движением, сцена с титрами или субтитрами, участок после крупной перемотки и конец. Если задача пакетная, те же точки можно выбирать автоматически по времени и просматривать выборочно.