gpt4 book ai didi

FFmpeg - 如何高精度修剪?

转载 作者:行者123 更新时间:2023-12-03 16:15:48 27 4
gpt4 key购买 nike

我非常坚持 FFmpeg 修剪视频的方式,所以如果有人能帮助我,我将不胜感激。
基本上,我想要做的是:我有一个视频序列,我希望它在某一秒钟内停止,将图像卡住几秒钟(如暂停),然后从同一帧再次再现。我可以说我正在处理三个视频: A.mp4 (视频序列的第一部分)、B.mp4(卡住图像)和 C.mp4 (视频序列的第二部分)。此外,我还使用 filter_complex 执行覆盖。

从静态图像生成视频的部分不是问题,我主要关心的是找到准确修剪和连接视频的方法。从其他帖子和来源中,我发现 FFmpeg 从那些是关键帧的帧中修剪,可以强制执行。但是,我得到的结果并不合适,因为我的视频 一个 以不同于 开头的帧结束中号 .

我使用的命令如下:

ffmpeg -y -i VideoSequence.mp4 -c:v libx264 -pix_fmt yuv420p \
-force_key_frames "expr: gte(t,n_forced * 15)" -t 30 VideoOut.mp4

[请注意,过滤器复合体中的所有内容都是关于叠加的,效果很好]

据我所知,生成的视频应该每 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 的开头“匹配”(以帧精度),但我获得的结果远非完美。

非常感谢您,任何形式的帮助将不胜感激!

最佳答案

假设您的最终目标是我希望它在某一秒钟内停止,将图像卡住几秒钟(如暂停),然后从相同的确切帧再次再现。当前的方法,具有多个视频生成,是不必要的浪费。

这是在一个命令中执行此操作的方法,假设视频为 25 FPS。

ffmpeg -i original.mp4 -filter_complex
"[0]split[a][b];
[a]trim=1:15,loop=75:1:349,setpts=N/FRAME_RATE/TB[pre];
[b]trim=15,setpts=N/FRAME_RATE/TB[post];
[0]atrim=1:15,asetpts=N/SR/TB[apre];
[0]atrim=15,asetpts=N/SR/TB[apost];
[pre][apre][post][apost]concat=a=1[v][a]"
-map "[v]" -map "[a]" paused.mp4

这是过滤图中发生的事情:

首先,视频被分成两个相同的流。然后从第 2 秒开始到第 15 秒结束修剪第一个流。在环路滤波器中, 1从(最后一帧)开始的帧# 349循环 75 帧。然后时间戳被规范化,因为修剪或循环过滤器不会这样做。第二个拆分流被修剪为从第 16 秒开始,其时间戳重置,两个流使用 concat 连接。如果您需要在联合流顶部覆盖某些内容,请插入 overlay连接后过滤。

关于FFmpeg - 如何高精度修剪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com