У меня есть файл 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.
Philips 42PFL3606H/58
, я кодирую в H.264 сffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4"
- профиль - самый низкий, который я знаю, и еще больше настроек используются, чтобы сделать воспроизведение полученного файла более легкой задачей.Ответы:
Проблема в том, что битрейт по умолчанию для 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
для генерации тихого аудиопотока. Например:Возможно, вам придется добавить
-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). Так что вы можете попробовать:
Ваш телевизор может также поддерживать H.264, но только определенный профиль. Попробуйте использовать
baseline
профиль, например:В приведенном выше примере я использовал параметр CRF, чтобы установить качество вместо
qscale
. См. Руководство по кодированию H.264 для получения дополнительной информации.источник
ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"
) - она кодирует около 100 кадров, а затем начинает заполнять экран ошибками типа[mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761
и[mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
.-b:v
. Добавил это в мой ответ. Относительно настроек кодера: Вы не можете сделать каждый кадр B-кадром. Кроме того, вам нужна оценка движения - чем более исчерпывающий метод, тем лучше сжатие. Но если это динамическое видео, первое, что вам нужно, это значительно увеличить битрейт. Настройки кодирования действительно не оказывают большого влияния. Что касается вашей ошибки, вы уверены, что это ошибка правильной команды?[mpeg]
Ошибка может произойти , только если ваш выходной файл.mpg
, а не когда это.mp4
.ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"
конечно.-target pal-dvd
решает проблему, не-bufsize
работает (я пробовал-b:v 7M -bufsize 7M -maxrate 7M
).Я бы сразу сказал, что если размер файла не имеет большого значения, просто поэкспериментируйте с увеличением скорости передачи данных.
Для тихого звука вы можете просто использовать ffmpeg, я не знаю достаточно об Audacity, чтобы давать какие-либо комментарии. Я использовал это раньше.
Это не будет работать для вас, так как вы используете контейнер MPG, поэтому вы можете попробовать. (MP3-контейнер)
Казалось, это работает для меня.
источник