FFmpeg在Go、Python、C++、Rust实践案例
FFmpeg Windows环境下安装详解
下载FFmpeg官方版本
访问FFmpeg官网(https://www.ffmpeg.org/)或GitHub Releases(https://github.com/BtbN/FFmpeg-Builds/releases),选择Windows平台的静态构建版本(Static Builds)。推荐下载最新稳定版,文件通常为ffmpeg-master-latest-win64-gpl.zip
或类似名称。
解压下载的压缩包至任意目录(如C:\ffmpeg
),确保解压后包含ffmpeg.exe
、ffplay.exe
和ffprobe.exe
三个核心文件。
配置环境变量
右键“此电脑”选择“属性” > “高级系统设置” > “环境变量”,在“系统变量”中找到Path
并编辑。点击“新建”,添加FFmpeg的bin
目录路径(如C:\ffmpeg\bin
)。
验证安装是否成功:打开命令提示符(Win + R,输入cmd
),运行以下命令:
ffmpeg -version
若输出版本信息,说明配置成功。
通过包管理器安装(可选)
使用Chocolatey或Scoop等包管理器快速安装:
choco install ffmpeg # Chocolatey
scoop install ffmpeg # Scoop
安装后无需手动配置环境变量。
验证基础功能
测试音频转码(MP3转WAV):
ffmpeg -i input.mp3 output.wav
测试视频截图(第10秒的画面):
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 screenshot.jpg
常见问题解决
错误“ffmpeg不是内部命令”:检查环境变量路径是否包含bin
目录,或重启终端。
缺少编解码器:下载GPL或LGPL版本的FFmpeg(包含更多编解码器),或手动编译所需模块。
GPU加速支持:需安装NVIDIA CUDA或AMD AMF工具包,并使用对应参数(如-hwaccel cuda
)。
进阶配置
自定义编译FFmpeg:下载MSYS2(https://www.msys2.org/),安装GCC和依赖库后,从源码编译。
集成到脚本或程序:调用FFmpeg命令行或使用libavformat/libavcodec等库开发。
ffmpeg 基础命令
安装ffmpeg后,可通过命令行调用。常用命令结构为:
ffmpeg [全局选项] [输入文件选项] -i 输入文件 [输出文件选项] 输出文件
视频格式转换
将MP4转为AVI:
ffmpeg -i input.mp4 output.avi
指定编码器(H.264视频+AAC音频):
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
视频裁剪
按时间裁剪(从00:01:30开始截取10秒):
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 -c copy output.mp4
按画面尺寸裁剪(从左上角(100,50)截取640x480区域):
ffmpeg -i input.mp4 -filter:v "crop=640:480:100:50" output.mp4
视频合并
文本文件list.txt内容:
file 'clip1.mp4'
file 'clip2.mp4'
执行合并:
ffmpeg -f concat -i list.txt -c copy output.mp4
调整视频参数
修改分辨率(缩放为1280x720):
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
调整帧率(改为30fps):
ffmpeg -i input.mp4 -r 30 output.mp4
改变比特率(视频1500k,音频128k):
ffmpeg -i input.mp4 -b:v 1500k -b:a 128k output.mp4
音频处理
提取音频:
ffmpeg -i input.mp4 -vn -c:a copy output.aac
替换音频:
ffmpeg -i input.mp4 -i new_audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 output.mp4
调整音量(2倍音量):
ffmpeg -i input.mp4 -filter:a "volume=2" output.mp4
高级滤镜应用
添加水印:
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
视频加速(2倍速,音频保持正常):
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
画面旋转(顺时针90度):
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
屏幕录制
录制桌面(Linux系统):
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
录制摄像头(Mac系统):
ffmpeg -f avfoundation -i "0" output.mkv
直播推流
RTMP推流:
ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -c:a aac -f flv rtmp://server/live/stream_key
HLS切片:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_playlist_type event stream.m3u8
硬件加速
使用NVIDIA GPU编码:
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast output.mp4
QSV加速(Intel):
ffmpeg -hwaccel qsv -i input.mp4 -c:v h264_qsv output.mp4
视频基础处理
-
视频格式转换
ffmpeg -i input.mp4 output.avi
将MP4转为AVI格式。 -
调整视频分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
将视频分辨率调整为1280x720。 -
修改视频帧率
ffmpeg -i input.mp4 -r 30 output.mp4
强制输出帧率为30fps。 -
提取视频音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac
提取音频并保留原始编码。 -
替换视频音轨
ffmpeg -i input.mp4 -i new_audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 output.mp4
保留原视频流,替换为新的音频。 -
视频静音处理
ffmpeg -i input.mp4 -an -c:v copy output.mp4
移除所有音频流。 -
视频片段剪切
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
精确剪切1分钟到2分30秒的内容。 -
合并多个视频
ffmpeg -f concat -i file_list.txt -c copy output.mp4
通过文本文件列表合并视频。 -
调整视频比特率
ffmpeg -i input.mp4 -b:v 2M output.mp4
设置视频比特率为2Mbps。 -
旋转视频方向
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
顺时针旋转90度。
特效与滤镜
-
添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
在左上角(10,10)位置添加静态水印。 -
动态水印跟踪
结合剪影工具的关键帧跟踪功能,生成动态坐标文件后通过FFmpeg应用:
ffmpeg -i input.mp4 -vf "movie=logo.png[wm];[in][wm]overlay=x='if(gte(t,5),10,NAN)':y=10" output.mp4
-
模糊背景
ffmpeg -i input.mp4 -vf "split[original][blur];[blur]boxblur=10[bg];[original][bg]overlay=0:0" output.mp4
主体保持清晰,背景添加10强度模糊。 -
老电影效果
ffmpeg -i input.mp4 -vf "noise=c0s=60:c0f=u" -color_range mpeg output.mp4
添加颗粒噪声模拟胶片质感。 -
颜色校正
ffmpeg -i input.mp4 -vf "eq=contrast=1.5:brightness=-0.05:saturation=0.8" output.mp4
调整对比度、亮度和饱和度。 -
画中画效果
ffmpeg -i bg.mp4 -i fg.mp4 -filter_complex "[1]scale=iw/4:ih/4[fg];[0][fg]overlay=main_w-overlay_w-10:10" output.mp4
将第二个视频缩小后置于主视频右下角。 -
绿幕抠像
ffmpeg -i bg.mp4 -i green_screen.mp4 -filter_complex "[1]chromakey&