Bash FFMPEG—尝试在有音频和无音频的情况下压缩多个文件时出错

Bash FFMPEG—尝试在有音频和无音频的情况下压缩多个文件时出错,bash,ffmpeg,Bash,Ffmpeg,好的,多亏了一位同事,我有了下面的FFMPEG命令,可以将4个视频连接在一起。现在,如果我对4个视频文件使用这个命令,所有文件都有音频,一切正常!但是,如果一个或多个视频没有声音,我会得到一个“匹配无流”错误 有人能指出这里出了什么问题吗 视频输入1-无音频,因此添加anullsrc 视频2-有音频 视频3-无音频 视频4-有音频 ffmpeg -i noSound1.mp4 -i story1.mp4 -i noSound2.mp4 -i story2.mp4 -t 0.1 -f lavfi

好的,多亏了一位同事,我有了下面的FFMPEG命令,可以将4个视频连接在一起。现在,如果我对4个视频文件使用这个命令,所有文件都有音频,一切正常!但是,如果一个或多个视频没有声音,我会得到一个“匹配无流”错误

有人能指出这里出了什么问题吗

视频输入1-无音频,因此添加anullsrc 视频2-有音频 视频3-无音频 视频4-有音频

ffmpeg -i noSound1.mp4 -i story1.mp4 -i noSound2.mp4 -i story2.mp4 -t 0.1 -f lavfi -i anullsrc=channel_layout=stereo -filter_complex 
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v0]; 
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v1]; 
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v2]; 
 [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v3]; 
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0]; 
 [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1]; 
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2]; 
 [3:a]aformat=sample_rates=48000:channel_layouts=stereo[a3]; 
 [v0][a0][v1][a1][v2][a2][v3][a3]concat=n=4:v=1:a=1[v][a]" 
-map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart testOutput.mp4
以下是错误:

Stream specifier ':a' in filtergraph description [0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v0];  [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v1];  [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v2];  [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v3];  [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0];  [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1];  [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2];  [3:a]aformat=sample_rates=48000:channel_layouts=stereo[a3];  [v0][a0][v1][a1][v2][a2][v3][a3]concat=n=4:v=1:a=1[v][a] matches no streams.
现在是一个稍微独立的问题。如果我有N个输入视频,我不知道它们是否有声音,有没有一种方法可以让我有一个循环来完成上述操作,而不需要大量的命令行? 非常感谢

有人能指出这里出了什么问题吗

在您的命令中,您试图将音频从
noSound1.mp4
[0:a]
)和
noSound2.mp4
[2:a]
)馈送到格式,但这些输入没有音频

所有输入必须有音频或无音频:不能混音。这就是anullsrc(无声音频发生器)的用途。它将为没有音频的输入生成虚拟/静音/填充音频。对于没有音频的输入,您需要将anullsrc(在您的示例中为
[4]
[4:a]
)馈送到concat:

ffmpeg-i noSound1.mp4-i story1.mp4-i noSound2.mp4-i story2.mp4-t 0.1-f lavfi-i anullsrc=channel\u layout=stereor-filter\u complex
“[0:v]比例=1280:720:force_original_aspect_ratio=减少,pad=1280:720:(ow iw)/2:(oh ih)/2,setsar=1,fps=30,格式=yuv420p[v0];
[1:v]比例=1280:720:force_original_aspect_ratio=减少,pad=1280:720:(ow iw)/2:(oh ih)/2,setsar=1,fps=30,格式=yuv420p[v1];
[2:v]比例=1280:720:force_original_aspect_ratio=Desculation,pad=1280:720:(ow iw)/2:(oh ih)/2,setsar=1,fps=30,format=yuv420p[v2];
[3:v]比例=1280:720:force_original_aspect_ratio=减少,pad=1280:720:(ow iw)/2:(oh ih)/2,setsar=1,fps=30,格式=yuv420p[v3];
[1:a]a格式=采样率=48000:频道布局=立体声[a1];
[3:a]a格式=采样率=48000:频道布局=立体声[a3];
[v0][4][v1][a1][v2][4][v3][a3]concat=n=4:v=1:a=1[v][a]。”
-映射“[v]”-map“[a]”-c:v libx264-c:a aac-movflags+faststart testOutput.mp4
要理解
[0:a]
语法,请参阅和

现在是一个稍微独立的问题。如果我有N个输入视频,我不知道它们是否有声音,有没有一种方法可以让我有一个循环来完成上述操作,而不需要大量的命令行


否,但您可以使用
ffprobe
确定输入是否有音频,这对于编写解决方案脚本应该很有帮助。请参阅。

谢谢您的回复。非常有用。现在它可能很蠢,但我认为anullsrc=channel\u layout=stereo的目的是确保始终有音频(如果没有,它会添加音频)?@Philban
-f lavfi-I anullsrc=channel\u layout=stereo
只是作为另一个输入。在使用concat过滤器时,没有自动“如果没有音频,则添加”功能,因此您必须手动告诉concat要参考哪些输入。对不起!我以为我已经回答了。再次感谢你的帮助!一切都整理好了……现在;)