剪切多个视频并与ffmpeg合并

rin*_*can 5 video ffmpeg

我有一个视频我想把它分成很多部分,然后一起制作一个新的视频我该怎么办?我用你谢谢?请帮助我

Gya*_*yan 6

您可以使用concat demuxer.

#1创建一个文本文件

file video.mp4
inpoint 34.5
outpoint 55.1
file video.mp4
inpoint 111.0
outpoint 155.3
file video.mp4
inpoint 278
outpoint 316.4
Run Code Online (Sandbox Code Playgroud)

inpoint/outpoint指令指定上面列出的文件的修剪入点和出点(秒).

#2a创建联合文件

ffmpeg -f concat -i list.txt combined.mp4
Run Code Online (Sandbox Code Playgroud)

#2b将叠加层放在一起

ffmpeg -f concat -i list.txt -i background.mp4 -filter_complex "[0:v]scale=400:400[v1];[1:v][v1]overlay=0:0:shortest=1" -shortest -preset superfast "output.mp4"
Run Code Online (Sandbox Code Playgroud)

外部音频流与concat

ffmpeg -i 12m.mp4 -f concat -i list.txt -vf setpts=(PTS-STARTPTS)/1.1 -af atempo=1.1 -map 1:v -map 0:a -shortest new.mp4
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 6

对于任何进入此领域的人,我注意到 Gyan 的答案有一个缺点,即在帧间编解码器的情况下,入点和出点是近似的(请参阅文档

以下命令(来自Ilogan 的回答)没有这个缺点。它适用于一个或多个输入。

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 \ 
-filter_complex \
"[0:v]trim=3.48:5.72,setpts=PTS-STARTPTS[v0]; \
 [0:v]trim=6.56:8.68,setpts=PTS-STARTPTS[v0b]; \
 [1:v]trim=13.52:15.36,setpts=PTS-STARTPTS[v1]; \
 [1:v]trim=17.56:23.32,setpts=PTS-STARTPTS[v1b]; \
 [2:v]trim=20.6:23.96,setpts=PTS-STARTPTS[v2]; \
 [v0][v0b][v1][v1b][v2]concat=n=5:v=1:a=0[v]" \
-map "[v]" -an -crf 17 output.mp4
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案的缺点是视频需要重新编码,这对于某些用例来说可能没问题。 (2认同)

Rot*_*tem 5

您的问题很笼统……
以下示例可能对您有所帮助,但可能无法解决您的具体问题。

该示例适用于三个阶段:

合成视频如下图所示:
在此处输入图片说明