使用 ffmpeg-python 创建交错视频
Creating interlaced videos with ffmpeg-python
我可能做错了什么and/or有些事情我不明白但是...
我有一个渐进式视频(这里是 failing1.mp4)。
对该视频执行 mediainfo 确认“扫描类型”是渐进式。
如果我使用以下代码来隔行扫描相同的视频:
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 告诉我“扫描类型”是 progressive.
如果我对同一个输入文件使用该代码(根据我在 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 生成隔行扫描视频文件?
举个小例子就好了。
回答我自己的问题。以下 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)
我可能做错了什么and/or有些事情我不明白但是...
我有一个渐进式视频(这里是 failing1.mp4)。 对该视频执行 mediainfo 确认“扫描类型”是渐进式。
如果我使用以下代码来隔行扫描相同的视频:
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 告诉我“扫描类型”是 progressive.
如果我对同一个输入文件使用该代码(根据我在 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 生成隔行扫描视频文件? 举个小例子就好了。
回答我自己的问题。以下 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)