12

У меня есть файл WMV (v9 (WMV3), 960x720, 30.000030 кадров в секунду, планарный формат 4:2:0 YUV, созданный PowerPoint 2010), и мне необходимо преобразовать его в MPEG2 - единственный формат, который мой телевизор может читать с флэш-накопителя USB (Я также пробовал MP4/h.264, AVI/XVID - ничего, кроме MPEG2 работает).

Я сумел на работу с простой

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

но качество результата ужасно (вносятся отчетливо видимые визуальные искажения), и воспроизведение не плавное (в некоторых моментах оно слишком медленное).

Я также пытался

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(Я нашел это где-то в Интернете и немного изменил - изменил разрешение, частоту обновления и формат вывода (с VOB на голый MPG)), но качество все еще слишком плохое.

Какие параметры я должен использовать, чтобы сохранить как можно больше качества? Степень сжатия вообще не имеет значения, даже увеличение размера файла допустимо.

Еще одна вещь, которая мне действительно нужна (я решил не включать ее в заголовок вопроса, чтобы не сделать ее слишком конкретной, но я был бы признателен за то, что это было учтено в ответах), добавляет чистую тишину в качестве звуковой дорожки - в Оригинальный, но телевизор жалуется на это, и я хотел бы избавиться от этой жалобы. Я создал файл молчания OGG Vorbis одинаковой длины (с точностью до секунды) с помощью Audacity, но мне не удается объединить его с видео:

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

и даже голые

ffmpeg -i in.mpg -c:v copy -out.mpg

выдает ошибки "переполнение буфера" и "слишком большой пакет". (in.mpg - это файлы, созданные одним и тем же двоичным файлом FFMPEG и одним и тем же исходным WMV-файлом с использованием первых двух рассматриваемых команд).

Я использую Zeranoe FFMPEG на Windows 7.

2 ответа2

11

Проблема в том, что битрейт по умолчанию для MPEG-2 довольно низкий (как и в большинстве других видеокодеров в ffmpeg, исключение - H.264). MPEG-2 также не лучший выбор в качестве кодека в наши дни.

Лучшее качество для MPEG-2

У вас есть несколько вариантов, если вы хотите придерживаться MPEG-2:

  • Увеличьте битрейт. Теперь вы используете -b:v 2500k . Если это HD-видео, вы не доберетесь далеко, только с 2,5 Мбит / с. Вам нужно как минимум вдвое больше или даже больше, чтобы результат выглядел хорошо. Например, используйте -b:v 6000k -target pal-dvd .

    Для 720p я думаю, что вы все равно должны использовать более высокий битрейт. Помните, что DVD-диски используют MPEG-2 и занимают около 4,7 ГБ на 2 часа фильма, так что в итоге вы получаете около 5–8 Мбит / с. MPEG-2 на самом деле не очень эффективен при сжатии и лучше работает на высоких битрейтах.

  • Используйте определенный параметр качества. Измените -b:v … на -qscale:v 2 . Число здесь колеблется от 1 до 31 и выше означает более низкое качество. Нет смысла выходить за рамки 4 или 5. Если вам не важен битрейт, начните с 2 и посмотрите, подходит ли он вам.

Неразбериха с количеством B-кадров, методом оценки движения или размером GOP может немного изменить качество, но не приведет к большим изменениям.

Тихий звук

Используйте -f lavfi -i aevalsrc=0 для генерации тихого аудиопотока. Например:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

Возможно, вам понадобится добавить -target pal-dvd к вышеприведенной команде, чтобы принудительно установить определенный размер буфера.

Я выбрал MP3 в качестве кодека. Файлы MPEG не могут содержать аудио, кроме аудио MPEG Layer I и II, а также потоков PCM, поэтому использование файла Ogg Vorbis без звука не будет работать, если вы также не конвертируете аудиопоток (а это не то, что вы делаете, когда используете -c:a copy).

Используйте другой видео кодек

Я удивлен, что телевизор, который воспроизводит видеофайлы, будет читать MPEG-2, но не что-нибудь еще. По крайней мере, видео MPEG-4 Part II должно поддерживаться (это то, что вы знаете как "DivX" - кодер MPEG-4 Part II). Так что вы можете попробовать:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

Ваш телевизор может на самом деле также поддерживать H.264, но только определенный профиль. Попробуйте использовать baseline профиль, например:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

В приведенном выше примере я использовал опцию CRF для установки качества вместо qscale . См. Руководство по кодированию H.264 для получения дополнительной информации.

0

Я бы сразу сказал, что если размер файла не имеет большого значения, просто поэкспериментируйте с увеличением скорости передачи данных.

Для тихого аудио вы можете просто использовать ffmpeg, я не знаю достаточно об Audacity, чтобы давать какие-либо комментарии. Я использовал это раньше.

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

Это не будет работать для вас, так как вы используете контейнер MPG, поэтому вы можете попробовать.(MP3-контейнер)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

Казалось, это работает для меня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .