1

如何使用 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

4

2 回答 2

1

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

  • FFmpeg 支持3 种类型的连接:“Concat demuxer”、“Concat 协议”和“Concat 过滤器”。
    该方法ffmpeg.concat应用Concat 过滤器
    由于使用了“Concat 过滤器”,一个实用的解决方案是通过“链接”trimatrim过滤器来修剪视频和音频。
  • setpts并且asetpts需要过滤器来修复时间戳。

替换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')
于 2021-07-16T10:12:42.030 回答
1

我设法做到了:

        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()
        )
于 2021-07-16T10:29:57.523 回答