Потеря качества видео во время ffmpeg filter_complex - PullRequest
0 голосов
/ 21 июня 2019

Мое входное видео имеет размер 720x1280.Выходные данные, которые я получаю из приведенной ниже команды: 1920x1080.

Проблема, с которой я сталкиваюсь, заключается в том, что хорошее видео 720p теряет свое качество, а выходное видео ухудшается.

ffmpeg -i inter.mpg -filter_complex "[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2" inter_1920x1080.mpg

Я в порядке, чтобы увеличить размер моего видео, чтобы он соответствовал высоте 1280, если уменьшение высоты вызывает проблему.Но есть ли способ добавить пользовательское значение в «шкалу»?

Ссылка: я сослался на этот ответ от Гаяна.


Я пыталсяс помощью следующей команды сейчас -

ffmpeg -i 6691602248444677381.mp4 -c:v -filter_complex "[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2" -b:v 800k output.mp4

Я получаю следующую ошибку -

[NULL @ 0x7fa2af800000] Unable to find a suitable output format for '[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2'
[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2: Invalid argument

1 Ответ

2 голосов
/ 21 июня 2019

Вопрос 1: .mpg качество плохое

Вы используете кодер mpeg1video, используемый по умолчанию для .mpg, который выводит очень старый, устаревший формат (видео MPEG-1).Значение битрейта по умолчанию для этого древнего кодера недостаточно для видео современного размера.Если это тот формат, который вы хотите, то добавьте параметр вывода -q:v 3.Увеличьте значение для меньшего качества.Или выберите битрейт, например -b:v 8000k (это просто произвольное значение битрейта для демонстрационных целей).

Если MPEG-1 не тот формат, который вам нужен, используйте опцию -c:v, чтобы выбрать нужный кодер,и / или измените формат выходного контейнера (например, .mkv или .mp4).

Пример:

ffmpeg -i inter.mpg -filter_complex "[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2" -c:v mpeg2video -q:v 3 inter_1920x1080.mpg

Вопрос 2: Невозможно найти подходящий выходной формат для [0]scale=hd1080...

Вы добавили -c:v, но не указали фактическое значение, поэтому предполагается, что ваш фильтр-график - это имя кодера, который вы хотите использовать.Правильный пример: -c:v libx264.

Теперь вы используете .mp4, поэтому просто опустите -c:v, потому что он выберет нормальный кодировщик по умолчанию, который будет libx264.Этот кодировщик выводит видео H.264.

libx264 также имеет стандартное значение битрейта по умолчанию, поэтому удалите -b:v 800k.

Теперь ваша команда должна выглядеть следующим образом:

ffmpeg -i 6691602248444677381.mp4 -filter_complex "[0]scale=hd1080,setsar=1,boxblur=20:20[b]; [0]scale=-1:1080[v];[b][v]overlay=(W-w)/2" output.mp4
...