Использование 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" между ключевыми кадрами, чтобы обеспечить плавную анимацию. НТН