Использование ffmpeg для кодирования высококачественного видео
У меня есть набор видеокадров, сохраненных как изображения в каталоге, и я пытаюсь кодировать их на видео хорошего качества, однако каждая настройка и каждый формат, который я пытаюсь сделать, создают очень заметные артефакты.
Основная команда такова:
ffmpeg -r 25 -i %4d.png myvideo.mpg
и я пробовал флаги minrate и maxrate. Любой из форматов {mpg, avi, mov, flv} будет делать.
Любые предложения по настройкам? Конечный размер файла не является проблемой.
Ответы
Ответ 1
Несколько вещей:
-
Вам нужно установить битрейт видео. Я никогда не использовал minrate и maxrate, поэтому я не знаю, как именно они работают, но, установив битрейт с помощью переключателя -b
, я могу получить высококачественное видео. Вам нужно придумать битрейт, который предлагает хороший компромисс между сжатием и качеством видео. Возможно, вам придется поэкспериментировать с этим, потому что все зависит от размера кадра, частоты кадров и количества движения в содержимом вашего видео. Имейте в виду, что DVD обычно составляет около 4-5 Мбит/с в среднем для 720x480, поэтому я обычно начинаю оттуда и решаю, нужно ли мне больше или меньше, а затем просто экспериментируем. Например, вы можете добавить -b 5000k
в командную строку, чтобы получить более или менее битрейт DVD-видео.
-
Вам нужно указать видеокодек. Если вы этого не сделаете, ffmpeg по умолчанию будет использовать MPEG-1, который довольно старый и не обеспечивает почти объем сжатия, как MPEG-4 или H.264. Если версия ffmpeg построена с поддержкой libx264, вы можете указать -vcodec libx264
как часть командной строки. В противном случае -vcodec mpeg4
также будет работать лучше, чем MPEG-1, но не так хорошо, как x264.
-
Существует множество других дополнительных опций, которые помогут вам выжать лучшее качество при минимальных битрейтах. Посмотрите здесь для некоторых примеров.
Ответ 2
Вам нужно указать опцию -vb для увеличения битрейта видео, иначе вы получите значение по умолчанию, которое производит меньшие видео, но с большим количеством артефактов.
Попробуйте что-то вроде этого:
ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg
Ответ 3
Перед созданием видео убедитесь, что PNG полностью непрозрачны.
например. с imagemagick, дать им черный фон:
convert 0.png -background black -flatten +matte 0_opaque.png
В моих тестах нет битрейта или кодека, чтобы видео выглядело хорошо, если вы подаете PNG с ffmpeg с прозрачностью
Ответ 4
Если вы не выполняете какую-либо пост-обработку, видео никогда не будет лучше исходных кадров. Также как флип-книжка, если у вас большой "прыжок" между ключевыми кадрами, это будет выглядеть смешно. Обычно вам нужно достаточно "tweens" между ключевыми кадрами, чтобы обеспечить плавную анимацию. НТН