如何分割、插入和合并视频文件 ffmpeg

如何分割、插入和合并视频文件 ffmpeg

我有一个 20 秒长的视频 (00.20.00)。
我想将其分成 20 个部分 (第 1 部分、第 2 部分、第 3 部分...第 20 部分),然后在这些部分之间插入视频效果(第 1 部分,视频效果 1,第 2 部分,视频效果 1,第 3 部分,视频效果 1,.... par20)

我没有想到要执行这个命令,我该怎么做?

=========================== 我反复试验@Mulvya

ffmpeg -i inputvideo.mp4 -i effect.mp4 -filter_complex
   "[0]split=20[v1][v2][v3][v4][v5][v6][v7][v8][v9][v10][v11][v12][v13][v14][v15][v16][v17][v18][v19][v20];
    [v1]trim=0:1,setpts=PTS-STARTPTS[v1t];
    [v2]trim=1:2,setpts=PTS-STARTPTS[v2t];
    [v3]trim=2:3,setpts=PTS-STARTPTS[v3t];
    [v4]trim=3:4,setpts=PTS-STARTPTS[v4t];
    [v5]trim=4:5,setpts=PTS-STARTPTS[v5t];
    [v6]trim=5:6,setpts=PTS-STARTPTS[v6t];
    [v7]trim=6:7,setpts=PTS-STARTPTS[v7t];
    [v8]trim=7:8,setpts=PTS-STARTPTS[v8t];
    [v9]trim=8:9,setpts=PTS-STARTPTS[v9t];
    [v10]trim=9:10,setpts=PTS-STARTPTS[v10t];
    [v11]trim=10:11,setpts=PTS-STARTPTS[v11t];
    [v12]trim=11:12,setpts=PTS-STARTPTS[v12t];
    [v13]trim=12:13,setpts=PTS-STARTPTS[v13t];
    [v14]trim=13:14,setpts=PTS-STARTPTS[v14t];
    [v15]trim=14:15,setpts=PTS-STARTPTS[v15t];
    [v16]trim=15:16,setpts=PTS-STARTPTS[v16t];
    [v17]trim=16:17,setpts=PTS-STARTPTS[v17t];
    [v18]trim=17:18,setpts=PTS-STARTPTS[v18t];
    [v19]trim=18:19,setpts=PTS-STARTPTS[v19t];      
    [v20]trim=19:20,setpts=PTS-STARTPTS[v20t];
    [v1t][1][v2t][1][v3t][1][v3t][1][v4t][1][v5t][1][v6t][1][v7t][1][v8t][1][v9t][1][v10t][1][v11t][1][v12t][1][v13t][1][v14t][1][v15t][1][v16t][1][v17t][1][v18t][1][v19t][1][v20t]concat=n=39:v=1:a=0[v]" -map [v] processed.mp4

。。。[AVFilterGraph @ 03e5dae0] 为“concat”过滤器指定的输入过多。初始化复杂过滤器时出错。参数无效

答案1

ffmpeg -i myVideo.avi -acodec copy -f segment -segment_time 1 -vcodec copy -reset_timestamps 1 -map 0 -an video%d.avi

取自unix.stackexchange.com

将视频分割成 20 个片段,分别命名为 video1.avi - video20.avi;然后我们需要将视频重新组合在一起,videoEffect1.avi 位于中间:

ffmpeg -f concat -i <(for f in ./video*.avi; do echo "file '$PWD/$f'" && echo "file '$PWD/videoEffect1.avi'"; done) -c copy output.avi

更多信息请访问ffmpeg 维基

或者,作为一个巨大的命令:

ffmpeg -i myVideo.avi -acodec copy -f segment -segment_time 1 -vcodec copy -reset_timestamps 1 -map 0 -an video%d.avi && ffmpeg -f concat -i <(for f in ./video*.avi; do echo "file '$PWD/$f'" && echo "file '$PWD/videoEffect1.avi'"; done) -c copy output.avi && rm -rf ./video[0-9]*.avi

答案2

要通过一个命令执行此操作,请使用

ffmpeg -i video.avi -i effect.avi -filter_complex
       "[0]split=20[v1][v2][v3]...[v20];
        [v1]trim=0:1,setpts=PTS-STARTPTS[v1t];
        [v2]trim=1:2,setpts=PTS-STARTPTS[v2t];
        [v3]trim=2:3,setpts=PTS-STARTPTS[v3t];
        ...
        [v20]trim=19:20,setpts=PTS-STARTPTS[v20t];
        [v1t][1][v2t][1][v3t][1]...[v19t][1][v20t]concat=n=39:v=1:a=0[v]"
-map [v] processed.mp4

我以为没有音频。

为防止不清楚,我跳过了写出所有修剪操作和 concat 过滤器的所有输入。这些都应该指定。

相关内容