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

How can I cut a video to a certain length and add an intro video to it using 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()
)

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

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

  • FFmpeg 支持 3 types 串联:“Concat demuxer”、“Concat 协议”和“Concat 过滤器”。
    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', start=0, 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()
        )