Проблема в том, что битрейт по умолчанию для 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 для получения дополнительной информации.