You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg技术问询:竖屏基础视频裁剪叠加及音频提取问题

解决方案与问题解答

1. 获取基础视频时长

用ffprobe命令直接提取:

  • 输出秒数格式:
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 base.mp4
    
  • 输出时分秒格式:
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal base.mp4
    

如果只是要让基础视频时长匹配叠加视频,无需手动获取,用-shortest参数即可自动让输出时长取两个输入视频中较短的那个(即叠加视频的时长)。

2. 实现视频叠加(裁剪+居中覆盖)

必须使用FFmpeg的overlay滤镜,而非单纯映射流。以下是整合裁剪与叠加的滤镜逻辑:
先将基础视频裁剪为9:16竖屏,再把叠加视频水平居中、放置在基础视频上方区域(可调整垂直位置),同时自动对齐时长。

3. 映射叠加视频的音频

  • 先确认overlay.mp4是否有音频流:运行ffmpeg -i overlay.mp4,查看输出中是否有音频流条目(如Stream #0:1)。如果没有音频,需先给叠加视频补音频,否则无法满足“保留叠加视频音频”的需求。
  • 如果有音频,用-map 0:a映射叠加视频的音频;怕无音频时报错,就用-map 0:a?(?表示流不存在时自动忽略)。你的原命令用-map 1:a是取基础视频的音频,所以要改成0:a或0:a?。

完整FFmpeg命令

ffmpeg -i overlay.mp4 -i base.mp4 \
-vf "[1:v]crop=ih*(9/16):ih,scale=1080:1920[base];[base][0:v]overlay=(main_w-overlay_w)/2:(main_h*0.1):shortest=1" \
-map 0:a? -map "[base]" \
-c:v libx264 -crf 21 \
output.mp4

命令说明:

  • [1:v]crop=ih*(9/16):ih:将基础视频裁剪为9:16竖屏比例;scale=1080:1920强制固定为手机竖屏分辨率(可根据需求修改)
  • overlay=(main_w-overlay_w)/2:(main_h*0.1):叠加视频水平居中,垂直位置在基础视频顶部往下10%的区域(可把0.1改成0贴顶,或(main_h-overlay_h)/2完全居中)
  • shortest=1:输出时长自动匹配叠加视频的长度,无需手动裁剪基础视频
  • -map 0:a?:优先取叠加视频的音频,无音频时不报错

内容的提问来源于stack exchange,提问作者roku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:05:38