视频滤镜详解:裁剪、缩放、水印、滤镜链一条龙

发布时间:2026/7/8 1:18:57
视频滤镜详解:裁剪、缩放、水印、滤镜链一条龙 视频滤镜详解裁剪、缩放、水印、滤镜链一条龙转码是 FFmpeg 的基础滤镜才是 FFmpeg 的灵魂。缩放、裁剪、旋转、加水印、加字幕、去水印……所有对视频画面的修改都靠滤镜系统。这篇把常用滤镜讲透再教你怎么把多个滤镜串成一条链。大家好我是黒漂技术佬。上一篇讲了转码参数这篇讲视频滤镜——-vf和-filter_complex。简单的滤镜用-vf就能搞定复杂的比如画中画、多输入多输出就得用-filter_complex。看完这篇加水印、裁画面、改分辨率、加字幕、画中画——这些常见需求你都能自己写命令。一、滤镜是什么滤镜Filter就是对视频帧做处理的模块。一帧画面进去处理完出来可能变了大小、加了文字、裁了一块、调了颜色。FFmpeg 的滤镜系统是流水线式的输入帧 → 滤镜1 → 滤镜2 → 滤镜3 → 输出帧多个滤镜用逗号隔开按顺序执行这叫滤镜链。两种用法简单滤镜-vf单输入单输出一个视频流进去处理完出来。ffmpeg-iinput.mp4-vfscale720:-1,crop720:720output.mp4先缩放再裁剪。复杂滤镜-filter_complex多输入多输出比如两个视频合成画中画、一个视频拆成两路。ffmpeg-imain.mp4-ilogo.png-filter_complexoverlay10:10output.mp4两个输入主视频 logo 图片合成一个输出。二、最常用的 8 个滤镜1. scale缩放# 固定宽高ffmpeg-iinput.mp4-vfscale1280:720output.mp4# 宽度固定高度等比例ffmpeg-iinput.mp4-vfscale1280:-1output.mp4# 高度固定宽度等比例ffmpeg-iinput.mp4-vfscale-1:720output.mp4# 按比例缩放缩小一半ffmpeg-iinput.mp4-vfscaleiw/2:ih/2output.mp4iw input widthih input height输入视频的宽高可以直接用在表达式里。缩放算法默认是 bicubic追求速度用fast_bilinear追求质量用lanczosffmpeg-iinput.mp4-vfscale1280:720:flagslanczosoutput.mp42. crop裁剪# 从左上角 (x,y) 开始裁 w×h 的区域ffmpeg-iinput.mp4-vfcropw:h:x:youtput.mp4# 裁出中间 720×720 的正方形ffmpeg-iinput.mp4-vfcrop720:720output.mp4# 裁掉左右各 100 像素ffmpeg-iinput.mp4-vfcropiw-200:ih:100:0output.mp4x 和 y 不写的话默认居中。售货柜项目里我经常用——摄像头拍整个柜子但 YOLO 只需要识别货架区域。裁掉多余画面推理速度能快 30%。3. rotate / transpose旋转# 顺时针 90 度ffmpeg-iinput.mp4-vftranspose1output.mp4# 逆时针 90 度ffmpeg-iinput.mp4-vftranspose2output.mp4# 180 度ffmpeg-iinput.mp4-vftranspose1,transpose1output.mp4# 任意角度旋转比如 30 度ffmpeg-iinput.mp4-vfrotate30*PI/180output.mp4transpose只有 0/1/2/3 四个值是硬件加速友好的 90 度旋转速度快。任意角度用rotate但慢一些。4. drawtext文字水印ffmpeg-iinput.mp4-vfdrawtexttext黒漂技术佬:x10:y10:fontsize24:fontcolorwhiteoutput.mp4常用参数参数作用text文字内容x/y位置坐标fontsize字号fontcolor颜色white/black/red/#FFFFFFfontfile字体文件路径中文需要指定中文字体box加背景框1加boxcolor背景框颜色alpha透明度0-1显示时间码ffmpeg-iinput.mp4-vfdrawtexttext%{pts\:hms}:x10:y10:fontsize24:fontcolorwhiteoutput.mp4⚠️踩坑中文文字需要指定中文字体文件否则会显示成方块。Windows 可以用C:/Windows/Fonts/msyh.ttc微软雅黑。ffmpeg-iinput.mp4-vfdrawtexttext测试中文:fontfileC\:/Windows/Fonts/msyh.ttc:x10:y10:fontsize24:fontcolorwhiteoutput.mp45. overlay图片水印 / 画中画两个输入一个叠在另一个上面。ffmpeg-iinput.mp4-ilogo.png-filter_complexoverlay10:10output.mp4位置写法# 左上角overlay10:10# 右上角视频宽 - 水印宽 - 10overlayW-w-10:10# 左下角overlay10:H-h-10# 右下角overlayW-w-10:H-h-10# 居中overlay(W-w)/2:(H-h)/2W/H是底层视频宽高w/h是叠加层宽高。动态水印从左往右飘ffmpeg-iinput.mp4-ilogo.png-filter_complexoverlayxt*100:y10output.mp4t是时间秒每秒 x 坐标增加 100 像素。6. fps调整帧率# 转成 30fpsffmpeg-iinput.mp4-vffps30output.mp4# 转成 1fps每秒一帧做抽帧预览ffmpeg-iinput.mp4-vffps1output.mp47. subtitles加字幕ffmpeg-iinput.mp4-vfsubtitlessubtitle.srtoutput.mp4支持 srt、ass 等字幕格式。字幕会烧录到视频画面里播放器不需要再加载字幕文件。8. eq调色# 调亮度-1 到 10 是原始ffmpeg-iinput.mp4-vfeqbrightness0.1output.mp4# 调对比度ffmpeg-iinput.mp4-vfeqcontrast1.2output.mp4# 调饱和度ffmpeg-iinput.mp4-vfeqsaturation1.5output.mp4# 组合亮一点、饱和一点ffmpeg-iinput.mp4-vfeqbrightness0.05:saturation1.2output.mp4摄像头拍出来画面偏暗偏灰的时候用 eq 简单调一下效果很明显。三、滤镜链多个滤镜串起来多个滤镜用逗号隔开从左到右按顺序执行。例先缩放到 720p再裁成正方形再加文字水印ffmpeg-iinput.mp4-vfscale-1:720,crop720:720,drawtexttexttest:x10:y10:fontsize24output.mp4执行顺序缩放 → 裁剪 → 加文字。 顺序很重要先裁后缩和先缩后裁结果不一样性能也不一样。一般建议先裁后缩处理的像素少更快。四、复杂滤镜filter_complex-vf只能处理一个输入流涉及多个输入或者多个输出的时候必须用-filter_complex。例 1画中画ffmpeg-imain.mp4-ipip.mp4-filter_complex[1:v]scale320:-1[pip];[0:v][pip]overlayW-w-10:H-h-10output.mp4拆解一下[1:v]第二个输入的视频流scale320:-1[pip]缩完之后命名为pip[0:v][pip]overlay...把主视频和 pip 叠加[0:v]表示第 0 个输入的视频流[1:a]表示第 1 个输入的音频流。例 2一个输入两个输出同时出 1080p 和 720pffmpeg-iinput.mp4-filter_complex[0:v]split2[v1][v2];[v1]scale1920:1080[out1];[v2]scale1280:720[out2]\-map[out1]-vcodeclibx264-crf23output_1080p.mp4\-map[out2]-vcodeclibx264-crf28output_720p.mp4split滤镜把视频流一分为二分别处理输出。只解码一次效率比转两次高。例 3拼接两个视频带过渡效果复杂的视频拼接、转场特效都可以用 filter_complex 实现。五、音频滤镜音频也有滤镜用-af参数和视频类似。音量调节ffmpeg-iinput.mp3-afvolume1.5output.mp3淡入淡出# 前 3 秒淡入最后 3 秒淡出ffmpeg-iinput.mp3-afafadetin:d3,afadetout:st27:d3output.mp3降噪ffmpeg-iinput.mp3-afafftdnnf-25output.mp3压缩器动态范围压缩说话声音忽大忽小的时候用ffmpeg-iinput.mp3-afacompressorthreshold-20dB:ratio4:attack5:release50output.mp3六、滤镜性能优化1. 先裁剪后缩放裁剪越早后面处理的像素越少速度越快。# 好先裁后缩crop640:480,scale320:240# 不好先缩后裁白处理了多余像素scale960:540,crop320:2402. 用硬件滤镜部分滤镜有硬件加速版本比如scale_cudaNVIDIA、scale_rkmppRK3588。3. 减少滤镜数量能一步完成的别拆两步。比如缩放和裁剪在某些场景可以合并优化。七、踩过的三个坑坑 1滤镜参数里的冒号要转义滤镜参数本身用冒号分隔如果参数值里有冒号比如时间码需要加反斜杠转义drawtexttext%{pts\:hms}坑 2Windows 下引号嵌套问题命令行里滤镜字符串有特殊字符容易被 shell 解析。复杂滤镜建议写进文件用-filter_script加载。坑 3加了滤镜就不能 -c copy只要用了滤镜视频帧就被修改了必须重新编码不能用-c:v copy。音频没改的话可以-c:a copy。八、本篇小结-vf单输入单输出-filter_complex多输入多输出常用滤镜scale缩放、crop裁剪、drawtext文字、overlay叠加、fps帧率、subtitles字幕、eq调色滤镜链用逗号连接从左到右顺序执行先裁后缩性能更好加了滤镜必须重新编码不能 copy 视频流下一篇讲抽帧与截图进阶精确抽帧、关键帧抽帧、批量处理、缩略图生成——做数据集、做预览图都用得上。我是黒漂技术佬。