我有一个视频 我想把它分成许多部分,然后联合起来制作一个新的视频 我该怎么办 ?我用 谢谢 ?请帮助我
答案 0 :(得分: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
inpoint / outpoint指令指定上面列出的文件的修剪入点和出点(秒)。
#2a 创建联合文件
ffmpeg -f concat -i list.txt combined.mp4
#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"
带有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
答案 1 :(得分:2)
你的问题是安静的将军...
以下示例可能对您有所帮助,但它可能无法解决您的具体问题。
该示例适用于三个阶段:
创建合成视频(没有音频):
ffmpeg -f lavfi -i testsrc=duration=3:size=160x120:rate=10 -c:v rawvideo -pix_fmt rgb24 testsrc.avi
(创建的视频未压缩) 参考:https://trac.ffmpeg.org/wiki/FilteringGuide
将视频分为3部分(创建3个视频文件):
ffmpeg -i testsrc.avi -ss 00:00:00 -c copy -t 00:00:01 sec0.avi
ffmpeg -i testsrc.avi -ss 00:00:01 -c copy -t 00:00:01 sec1.avi
ffmpeg -i testsrc.avi -ss 00:00:02 -c copy -t 00:00:01 sec2.avi
参考:https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video
以相反的顺序连接(合并)3个部分:
ffmpeg -i "concat:sec2.avi|sec1.avi|sec0.avi" -codec copy output.avi
注意:对于Linux,请使用单引号'
参考:Concatenate two mp4 files using ffmpeg
答案 2 :(得分:2)
对于任何涉及此问题的人,我注意到 Gyan 的答案有一个缺点,即在帧间编解码器的情况下,入点和出点是近似值(请参阅 doc)。
以下命令(来自 Ilogan's answer)没有这个缺点。它适用于一个或多个输入。
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