FFMpeg - 去除重复帧后裁剪视频

6

我使用了以下命令从视频中删除了许多重复帧(并完全删除了音频)

ffmpeg -i scene.mkv -vf mpdecimate,setpts=N/FRAME_RATE/TB -map:v 0  scene3.mp4

(感谢Mulvya的回答)。

生成的视频质量还可以,但总时长不会改变——原始视频的最后一帧被冻结以填补剩余时间(播放视频时)。

有没有办法裁剪视频,使其在这个最后一帧结束?

2个回答

7
地图语法应该是:
ffmpeg -i scene.mkv -vf mpdecimate,setpts=N/FRAME_RATE/TB -map 0:v scene3.mp4

2
在去除重复帧的同时,是否有办法修剪音频?我在每几百个实际帧之后就有数千个重复帧。在这些片段中没有音频。 因此,8分钟的视频被剪裁为2分钟,但音频保持不变。是否可能也删除不需要的音频部分? - Saif
工作得非常好,但是-map 0:v选项将从修剪后的视频中删除音轨。我认为应该有一种方法可以在使用保留帧的时间戳复制音频的同时过滤视频轨道。这可能会导致奇怪的结果,但对于仅包含视频动画部分评论的基本视频来说应该没问题。 - Claudio Floreani

1
我尝试了Gyan提供的解决方案,但它省略了音频。我还尝试了多个其他解决方案,但似乎都无法正常工作。然而,有一个mpdecimate_trim存储库做得很好。它基本上列出了所有要删除的帧(使用mpdecimate),然后创建一个复杂的过滤器来修剪所有这些帧(以及相应的音频)从视频中通过分割视频并仅包括没有重复帧的部分。
但是,我确实需要在代码中调整一些选项。例如,在mpdecimate_trim.py中,我不得不更改此行: dframes2 = get_dframes(ffmpeg(True, "-vf", "mpdecimate=hi=576", "-loglevel", "debug", "-f", "null", "-").stderr) 我必须更积极地检测重复项,因此我将mpdecimate选项更改为mpdecimate=hi=64*32:lo=64*24:frac=0.05

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接