我使用此命令来生成缩放并带有覆盖图像的文件:
ffmpeg
-i input.* -i overlay.png
-filter_complex "[0:v]...; ...[1:v]overlay=... ... [resultingvideo]"
-map "[resultingvideo]" -vcodec libx264 -f mp4
-acodec libmp3lame -q:a 50
outputfilename.mov
其中“...”代表一些遗漏的过滤。
问题是没有音频。
如果我添加-map 0:a
,如果输入有音频,则会有音频,如果输入没有音频,则会出错并且没有输出文件。
如果输入中存在音频,我怎样才能让 ffmpeg 选择性地使用它,否则忽略音频或产生静音等?
或者,我是否必须先使用 ffprobe 分析文件,然后才能生成脚本命令?
答案1
答案2
如果您愿意运行 ffmpeg 两次,您可以先进行覆盖,然后执行第二个命令来复制该视频并从原始视频中编码音频。如果音频不存在,ffmpeg 会发出警告并执行任何操作。如果它成功了,那么您将获得音频和视频。
它看上去有点像这样。
ffmpeg -i input.* -i overlay.png -filter_complex "[0:v]...; ...[1:v]overlay=... ... [resultingvideo]" -map "[resultingvideo]" -vcodec libx264 -f mp4 outputfilenameJustVideo.mov
其次是
ffmpeg -y -i outputfilenameJustVideo.mov -i input.*
-acodec libmp3lame -q:a 50 -c:v copy -map 0:v -map 1:a outputfilename.mov
根据我的简单测试,当没有音频时,ffmpeg 不会创建/覆盖任何内容,而当有音频时则会创建/覆盖任何内容。
需要明确的是,这是一种 hack。您可能希望使用某种逻辑将最终产品重命名为您想要的任何名称。
我不知道有一个简单的、单命令的方法。