能否通过单次文件处理简化FFmpeg添加Logo与电话号码的命令?
单次FFmpeg命令实现同时添加Logo和电话号码
我原本通过两次FFmpeg命令完成视频Logo与电话号码的添加:
ffmpeg -i input.mp4 -i ./assets/logo.png -filter_complex "[1][0]scale2ref=w='iw*1/5':h='ow/mdar'[wm][vid];[vid][wm]overlay=main_w-overlay_w-5:5" 'uploads/output.mp4' 2>&1 ffmpeg -i ./uploads/output.mp4 -i ./assets/telephone.png -filter_complex "[1][0]scale2ref=w='iw*9/10':h='ow/mdar'[wm][vid];[vid][wm]overlay=10:main_h-overlay_h-10" './uploads/output2.mp4'
为提升处理效率,我尝试合并为单次命令,但未成功添加电话号码:
ffmpeg -i input.mp4 -i ./assets/logo.png -filter_complex "[1][0]scale2ref=w='iw*1/5':h='ow/mdar'[wm][vid];[vid][wm]overlay=main_w-overlay_w-5:5" -i ./assets/telephone.png -filter_complex "[1][0]scale2ref=w='iw*9/10':h='ow/mdar'[wm][vid];[vid][wm]overlay=10:main_h-overlay_h-10" './uploads/output2.mp4'
问题原因
FFmpeg仅会执行最后一个-filter_complex参数,前一个滤镜逻辑会被直接忽略,导致只有电话号码的滤镜生效(且输入流索引错误,实际也未正确处理)。
正确解决方案
将两个叠加逻辑整合到**同一个-filter_complex**中,通过临时标签传递中间处理结果,完整命令如下:
ffmpeg -i input.mp4 -i ./assets/logo.png -i ./assets/telephone.png -filter_complex \ "[1][0]scale2ref=w='iw*1/5':h='ow/mdar'[wm_logo][vid_base]; \ [vid_base][wm_logo]overlay=main_w-overlay_w-5:5[tmp_video]; \ [2][tmp_video]scale2ref=w='iw*9/10':h='ow/mdar'[wm_phone][vid_tmp]; \ [vid_tmp][wm_phone]overlay=10:main_h-overlay_h-10" \ './uploads/output2.mp4'
命令说明
- 输入流索引:视频源为
[0],Logo图片为[1],电话号码图片为[2] - 第一步:对Logo做尺寸适配,生成缩放后的Logo
[wm_logo]和原视频流[vid_base],叠加到视频右上角得到临时视频[tmp_video] - 第二步:以临时视频
[tmp_video]为基准,适配电话号码图片尺寸,生成[wm_phone],叠加到视频底部指定位置 - 所有滤镜链通过分号分隔,中间结果用自定义标签(如
[tmp_video])传递
内容的提问来源于stack exchange,提问作者Gabriel-Joy
相关产品推荐
相关产品推荐

