【发布时间】:2016-10-12 00:12:40
【问题描述】:
我非常坚持 FFmpeg 修剪视频的方式,所以如果有人能帮助我,我将不胜感激。 基本上,我想做的是:我有一个视频序列,我希望它在某一秒钟内停止,将图像冻结几秒钟(如暂停),然后从同一帧再次再现。我可以说我正在处理三个视频:A.mp4(视频序列的第一部分)、B.mp4(冻结的图像)和 C.mp4(第二部分)视频序列的一部分)。此外,我还使用 filter_complex 进行叠加。
从静态图像生成视频的部分不是问题,我主要关心的是找到准确修剪和连接视频的方法。从其他帖子和来源中,我发现 FFmpeg 从那些是关键帧的帧中修剪,可以强制执行。但是,我得到的结果并不合适,因为我的视频 A 以与 C 开头的帧不同的帧结束。
我使用的命令如下:
ffmpeg -y -i VideoSequence.mp4 -c:v libx264 -pix_fmt yuv420p \
-force_key_frames "expr: gte(t,n_forced * 15)" -t 30 VideoOut.mp4
[请注意,Filter Complex 中的所有内容都是关于叠加的,效果很好]
据我所知,生成的视频应该每 15 秒有一个关键帧。现在,我想将视频分成两部分(“15 秒前”和“15 秒后”):
ffmpeg -y -ss 00:00:01 -i VideoOut.mp4 -t 14 -c copy A.mp4
ffmpeg -y -ss 00:00:15 -i VideoOut.mp4 -t 5 -c copy C.mp4
如前所述,我希望 A.mp4 的结尾与 C.mp4 的开头“匹配”(以帧精度),但我获得的结果远非完美。
非常感谢您,任何形式的帮助将不胜感激!
【问题讨论】:
-
这是真正的 ffmpeg 还是 libav-tools 的 Debian 包装器,什么版本?
-
您能否也删除与问题无关的任何内容,例如
-filter_complex,以提供minimal reproducible example。 -
@OrangeDog 已编辑。感谢您的建议。顺便说一句,它是真正的 ffmpeg 版本 N-81696-gd38dff8e。
-
不,这是构建时 git repo 的 HEAD。那这不是正式版吗?不用我去搜索发布历史,你知道它最接近什么吗?
-
您了解 MPEG 的工作原理吗?关键帧是一个完整的帧,它在关键帧之间进行插值。所以如果我们想在非关键帧的帧处进行剪切,我们必须使用解码器生成帧,然后将其作为人工关键帧插入。
标签: ffmpeg