如果没有流,FFmpeg 会忽略音频导出

如果没有流,FFmpeg 会忽略音频导出

我正在使用 ffmpeg 转换/缩放视频,并将音频流导出为单个音频文件。

/usr/local/bin/ffmpeg  -i video.mov -vf  scale="480:480"   -c:v libx264 -profile:v baseline -preset ultrafast -crf 22 -c:a aac  -pix_fmt yuv420p -y video-output.mp4  -y audio-output.mp3

然而,如果视频缺少音频文件,它就会中断。

如果没有音频,有没有办法忽略音频导出?

答案1

有一个条件映射运算符-map "0:a?",例如,如果输入流没有音频,则会创建一个没有音频的输出文件(并且该-c:a选项将被忽略):

ffmpeg -f lavfi -i testsrc -c:v libx264 -map "0:a?" -c:a aac out.mkv

但是,如果您想要有多个输出文件(如示例中所示),则必须在构造命令之前以编程方式检测这一点。否则 ffmpeg 会抱怨您的第二个输出文件不包含任何流。

例如:

ffprobe <input> -loglevel error \
  -show_streams -show_entries stream=codec_type \
  -of compact=nk=1:p=0

如果输入文件有音频流,这将打印一行audio。当然还有其他方法可以解析ffmpeg流的输出。

答案2

我的解决方案是将任务分成两行,一行处理视频,一行处理音频。如果音频失败,则继续处理。

相关内容