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

时间:2019-05-13 13:27:34

标签: ffmpeg

我正在尝试使用绘画文字应用标题,该标题应在视频结束前一秒消失:

with open(text_file_list, "r") as ins: 
    array = [] 
    for line in ins: 
        array.append(line) 
        print(line) 
        m = re.search(r"(?<=tinted_combined).*?(?=.jpg::1)", your_text).group(0) 
        if m: 
            found = m.group(1) 
            print(found)

问题是我事先不知道视频长度。我试过使用'between(t,0,-1)',但是它不起作用,标题从不显示。 有人知道有没有办法不必先打开视频来检查长度,而仅在绘制字幕后才这样做? 预先感谢!

1 个答案:

答案 0 :(得分:0)

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