我正在使用 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
我的解决方案是将任务分成两行,一行处理视频,一行处理音频。如果音频失败,则继续处理。