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

服务器端FFmpeg处理视频:添加圆形遮罩、转黑白及与标题视频拼接

嘿,很高兴能帮到你!作为刚接触FFmpeg的开发者,你这个自定义视频简历的需求完全可以通过几个清晰的步骤来实现,我给你拆解成具体的操作细节:

整体实现思路

我们可以把需求拆成两部分:先批量处理每段用户上传的视频(加圆形遮罩+转黑白),然后按指定顺序拼接处理后的用户视频和标题视频。

分步操作细节

1. 处理单段用户视频(加遮罩+转黑白)

假设你已经有了带透明通道的圆形遮罩mask.png,FFmpeg可以通过滤镜组合一次性完成转黑白和添加遮罩的操作。

单段视频处理命令

ffmpeg -i user_video_1.mp4 -i mask.png -filter_complex \
"[0:v]hue=s=0[blackwhite]; \
[1:v]scale=iw:ih[mask_scaled]; \
[blackwhite][mask_scaled]overlay=(W-w)/2:(H-h)/2:format=auto,format=yuv420p[final_v]" \
-map "[final_v]" -map 0:a? -c:a copy processed_user_1.mp4

参数解释:

  • hue=s=0:把视频转为黑白(将饱和度设为0)
  • scale=iw:ih:把遮罩缩放成和用户视频一样的尺寸,避免遮罩和视频大小不匹配
  • overlay=(W-w)/2:(H-h)/2:将遮罩居中覆盖在视频上
  • format=yuv420p:输出兼容移动设备的视频格式
  • -map 0:a? -c:a copy:如果用户视频有音频,就直接保留原音频(无音频也不会报错)

2. 批量处理5段用户视频

如果服务器是Linux/macOS环境,可以写一个简单的shell脚本批量处理,不用重复敲5次命令:

#!/bin/bash

# 循环处理1-5号用户视频
for i in {1..5}
do
  ffmpeg -i "user_video_$i.mp4" -i mask.png -filter_complex \
  "[0:v]hue=s=0[blackwhite]; \
  [1:v]scale=iw:ih[mask_scaled]; \
  [blackwhite][mask_scaled]overlay=(W-w)/2:(H-h)/2:format=auto,format=yuv420p[final_v]" \
  -map "[final_v]" -map 0:a? -c:a copy "processed_user_$i.mp4"
done

把这个脚本保存为process_videos.sh,给它加执行权限(chmod +x process_videos.sh)就能运行了。

3. 按指定顺序拼接视频

处理完用户视频后,我们需要按照[用户视频1][标题视频1][用户视频2][标题视频2]...的顺序拼接。FFmpeg的concat demuxer是最稳定的拼接方式,适合不同编码的视频。

步骤1:生成拼接列表

创建一个文本文件concat_list.txt,内容如下(注意文件路径要正确):

file 'processed_user_1.mp4'
file 'title_1.mp4'
file 'processed_user_2.mp4'
file 'title_2.mp4'
file 'processed_user_3.mp4'
file 'title_3.mp4'
file 'processed_user_4.mp4'
file 'title_4.mp4'
file 'processed_user_5.mp4'
file 'title_5.mp4'

如果你的标题视频和处理后的用户视频在同一个目录下,直接写文件名就行;如果不在,要写绝对路径。

步骤2:执行拼接命令

ffmpeg -f concat -safe 0 -i concat_list.txt -c:v libx264 -c:a aac -crf 23 final_resume_video.mp4

参数解释:

  • -safe 0:允许使用绝对路径的文件
  • -c:v libx264 -c:a aac:统一编码格式,确保拼接后的视频兼容性(如果所有视频编码一致,可以换成-c copy来提升速度)
  • -crf 23:视频质量参数,数值越小质量越高,23是默认的平衡值
实用提示
  • 确保服务器上已经安装了最新版的FFmpeg,默认就支持我们用到的所有滤镜
  • 遮罩mask.png必须带透明通道(圆形区域不透明,其他区域透明),否则遮罩会变成实心方块
  • 如果用户上传的视频格式不是MP4(比如MOV),不用修改命令,FFmpeg会自动识别处理
  • 如果想加快处理速度,可以加上-hwaccel auto参数启用硬件加速(需要服务器支持)

如果在实际操作中遇到具体问题,比如视频尺寸不匹配、编码报错之类的,可以再描述细节,我再帮你调整!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:50:57