5

Я пытаюсь преобразовать серию PNG в MP4 видео. Я использую ffmpeg и хочу кодировать видео с помощью кодека H.264. Используя команду

ffmpeg -y -r 30 -b 1800k -i _tmp%04d.png -vcodec libx264 out.mp4

Я получаю следующее предупреждение

Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'

Насколько я понимаю, в pngs есть альфа-канал, который не может обработать кодер x264. Есть ли способ обойти эту проблему? Есть ли, например, способ заставить кодировщик игнорировать альфа-канал (мои pngs на самом деле не имеют прозрачных элементов)?

Я знаю, что могу предварительно преобразовать png-файлы для обрезки альфа-канала, но последовательность изображений создается другой программой, и необходимость предварительной обработки изображений каждый раз, когда я делаю видео, будет менее чем оптимальной.

Изменить: после удаления альфа-канала из каждого кадра с помощью команды

convert in.png -background white -flatten +matte out.png

ffmpeg выдает предупреждение

Incompatible pixel format 'pal8' for codec 'libx264', auto-selecting format 'yuv420p'

так что до сих пор нет игры в кости.

1 ответ1

0

Я думал об использовании AVISynth и обслуживании кадров, чтобы обойти эту проблему, но, похоже, ffmpeg теперь имеет встроенную поддержку AVISynth. Это означает, что вы можете использовать скрипты AVISynth в качестве входных данных.

Итак, со скриптом sequence.avs вы можете сделать:
ffmpeg -i sequence.avs -vcodec libx264 out.mp4

Где sequence.avs это:
ImageSource("_tmp%04d.png", start=0, end=1, fps=30).ConvertToYV12()

Примечание. Необязательные параметры начала и конца отражают то, что я тестировал с двумя изображениями: _tmp0000.png и _tmp0001.png .

Смотрите также: Больше цветовых форматов. Документация ImageSource.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .