我正在使用ffmpeg加入一堆视频。
我使用的是经典的连接ffmpeg代码:
ffmpeg -f concat -i joinlist.txt -c copy joinedfile.mp4
但问题是视频的格式,编码不同,但大小相同:全部为640x480。我想加入所有这些并且在每个其他视频中放置一个没有声音的黑屏视频:
video1 + black_screen_video + video2 + black_screen_video + video3 ...
我使用以下方法生成了持续时间为2秒的黑屏视频:
ffmpeg -f lavfi -i color=c=black:s=640x480:d=2 black_screen_video.mp4
因此所有视频都具有相同的尺寸:640x480和25 fps但不同的编解码器。除黑屏视频外,视频都有声音。 我无法做任何手动操作,因为视频数量大约是几百个。所以它必须是一种自动完成所有这些的方法。
当我使用上面的代码将它们连接在一起时,生成的视频根本无法正常播放。
我知道我必须对它们进行重新编码,但是如何使用一行代码一次对所有这些视频进行重新编码?
更新: 我已经成功使用此代码将它们连接在一起,但只有三个,如果我有一百多个,那么逐个写下来是很费时的:
ffmpeg -i vid1.avi -i vid2.avi -i vid3.avi -filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4
但这只是加入视频,而不是循环播放黑屏视频。当我使用黑屏时,ffmpeg会给我流匹配错误。
答案 0 :(得分:2)
像以前一样使用concat demuxer。
您的文字文件将是:
git rev-parse
你的命令:
file 'vid1.avi'
file 'black_screen_video.mp4'
file 'vid2.avi'
file 'black_screen_video.mp4'
file 'vid3.avi'
file 'black_screen_video.mp4'
...
您还需要在黑屏视频中包含虚拟音频。
ffmpeg -f concat -i joinlist.txt joinedfile.mp4
答案 1 :(得分:1)
希望它也可以解决相同的问题,并通过使用此命令将所有视频更改为相同的帧频以及将音频更改为相同的频率来解决此问题
ffmpeg -y -i in.mp4 -vf fps=60 -ar 48000 out.mp4
转换并再次连接
如果有帮助,请投票(: