Создание чересстрочных видео с помощью ffmpeg-python
Я, наверное, что-то делаю не так и / или чего-то не понимаю, но ...
У меня прогрессивное видео (здесь failing1.mp4). Медиаинформация об этом видео подтверждает, что «Тип сканирования» является прогрессивным.
Если я использую следующий код для получения того же чересстрочного видео:
import ffmpeg
ffmpeg.input("/home/dbr/Videos/failing1.mp4") \
.filter("interlace") \
.output(
"output_via_filter.mp4",
vcodec="libx264",
preset="ultrafast"
) \
.run(overwrite_output=True)
используя mpv, vlc или любой достойный проигрыватель видеофайлов, я вижу, что сгенерированный файл (output_via_filter.mp4) действительно чересстрочный (я вижу "артефакты" чересстрочной развертки). Однако запуск mediainfo output_via_filter.mp4 говорит мне, что "Тип сканирования" прогрессивный .
Если я использую этот код вместо этого для того же входного файла (еще одна попытка получить файл с чересстрочной разверткой без использования фильтра «чересстрочной развертки», на основе моих поисков в intarweb):
ffmpeg.input("/home/dbr/Videos/failing1.mp4") \
.output(
"output_via_interlace.mp4",
vcodec="libx264",
preset="ultrafast"
) \
.global_args("-vf", "tinterlace=interleave_top,fieldorder=tff", "-flags", "+ilme+ildct") \
.run(overwrite_output=True)
Созданный файл (output_via_interlace.mp4) не имеет чересстрочной развертки, а mediainfo output_via_interlace.mp4 подтверждает, что «Тип сканирования» является прогрессивным.
Тем не менее, используя ffmpeg непосредственно в командной строке с теми же аргументами:
ffmpeg -i f/home/dbr/Videos/failing1.mp4 -vf tinterlace=interleave_top,fieldorder=tff -flags +ilme+ildct output.mp4
дает мне:
mediainfo output.mp4 | grep Scan
Scan type : MBAFF
Scan type, store method : Interleaved fields
Scan order : Top Field First
Думаю, мой вопрос действительно таков: как я могу сгенерировать чересстрочный видеофайл с помощью ffmpeg-python? Было бы неплохо привести небольшой пример.
1 ответ
Отвечая на свой вопрос. Следующий код ffmpeg-python работает должным образом:
ffmpeg.input("/home/dbr/Videos/failing1.mp4") \
.filter("tinterlace", "interleave_top") \
.filter("fieldorder", "tff") \
.output(
"output_via_interlace.mp4",
vcodec="libx264",
preset="ultrafast",
flags="+ilme+ildct"
) \
.run(overwrite_output=True)