gpt4 book ai didi

FFMpeg:如何使用 between() 选择最后一秒?

转载 作者:行者123 更新时间:2023-12-04 23:24:03 26 4
gpt4 key购买 nike

我正在尝试使用应该在视频结束前一秒消失的 drawtext 应用标题:

ffmpeg -i input.mp4 -vf "drawtext=enable='between(t,0,5)':fontfile=font.ttf:text='Some caption':x=60:y=640:fontsize=40:fontcolor=#f0f0f0@0.9" -vcodec libx264 -crf 27 -preset ultrafast -strict -2 -acodec copy output.mp4

问题是我事先不知道视频长度。我试过使用 'between(t,0,-1)' 但它不起作用,标题永远不会出现。
任何人都知道是否有办法做到这一点,而不必先打开视频检查长度,然后才绘制标题?
提前致谢!

最佳答案

FFmpeg 不会将流持续时间传递给过滤器,因此必须以迂回的方式完成。

FFmpeg 有一个 sseof 函数,可以从文件末尾开始寻找。它还有一个 copyts 选项来维护时间戳。所以,我们加载输入两次,一次是完整的输入,另一次是最后一秒。然后我们在整个第一个输入上绘制文本,但覆盖第二个输入的最后一秒,由于保留的时间戳,它将被烧毁。

ffmpeg -copyts -i input.mp4 -sseof -1 -i input.mp4 -filter_complex  "[0]drawtext=fontfile=font.ttf:text='Some caption':x=60:y=640:fontsize=40:fontcolor=#f0f0f0@0.9[txt];[txt][1]overlay" -vcodec libx264 -crf 27 -preset ultrafast -acodec copy output.mp4

关于FFMpeg:如何使用 between() 选择最后一秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56113372/

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