如何使用 ffmpeg-python 将视频剪切到一定长度并添加介绍视频?

问题描述

如何使用 ffmpeg-python 将视频剪切到一定长度并添加介绍视频?

我正在做的是:

        intro = ffmpeg.input(intro)
        mainvid = ffmpeg.input(mainvid)

        v1 = intro.video
        a1 = intro.audio
        v2 = mainvid.video
        a2 = mainvid.audio

        joined = ffmpeg.concat(v1,a1,v2,a2,v=1,a=1).node
        v3 = joined[0]
        a3 = joined[1]

        (
            ffmpeg
            .output(
                v3,a3,'out.mkv',vcodec='libx265',)
            .run()
        )

但我不知道如何在加入前将 mainvid 剪切到特定长度,例如 10 分钟,我知道 ss 会有所帮助,但不知道如何仅将其用于 mainvid。

解决方法

您可以使用 trimatrim 过滤器来修剪视频和音频。
建议的解决方案基于以下answer

  • FFmpeg 支持 3 types 的串联:“Concat demuxer”、“Concat protocol”和“Concat filter”。
    方法 ffmpeg.concat 适用于 Concat filter
    由于使用了“Concat 过滤器”,一个实用的解决方案是通过“链接”trimatrim 过滤器来修剪视频和音频。
  • setptsasetpts 过滤器是修复时间戳所必需的。

v2 = mainvid.videoa2 = mainvid.audio 替换为:

v2 = mainvid.video.filter('trim',start=0,end=600).filter('setpts','PTS-STARTPTS')
a2 = mainvid.audio.filter('atrim',end=600).filter('asetpts','PTS-STARTPTS')
,

我设法做到了:

        intro = ffmpeg.input(intro)
        mainvid = ffmpeg.input(mainvid,ss='00:00:00',t='00:10:00') 

        v1 = intro.video
        a1 = intro.audio
        v2 = mainvid.video
        a2 = mainvid.audio

        joined = ffmpeg.concat(v1,a1,v2,a2,v=1,a=1).node
        v3 = joined[0]
        a3 = joined[1]

        (
            ffmpeg
            .output(
                v3,a3,'out.mkv',vcodec='libx265',)
            .run()
        )