![如何分割、插入和合并视频文件 ffmpeg](https://linux22.com/image/1498556/%E5%A6%82%E4%BD%95%E5%88%86%E5%89%B2%E3%80%81%E6%8F%92%E5%85%A5%E5%92%8C%E5%90%88%E5%B9%B6%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%20ffmpeg.png)
我有一个 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
将视频分割成 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 过滤器的所有输入。这些都应该指定。