FFmpeg 工具介绍
FFmpeg是什么FFmpeg 是音视频处理的终极工具箱支持编解码、转换、剪辑、合并、流媒体推拉流等几乎所有音视频操作。ffmpeg 视频编码转换 音频处理 流媒体 提取/合并 滤镜特效核心组件组件功能ffmpeg音视频转换/处理主程序ffprobe分析媒体文件信息ffplay简易播放器ffmpeg-libav*库供其他程序调用使用场景1. 格式转换# 视频转换 MP4 → WebM ffmpeg -i input.mp4 output.webm # 视频转 GIF ffmpeg -i input.mp4 -vf fps10,scale480:-1 output.gif # 音频转格式 WAV → MP3 ffmpeg -i audio.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp32. 剪辑提取# 剪切片段从 10秒 开始剪 30秒 ffmpeg -i input.mp4 -ss 10 -t 30 -c copy output.mp4 # 提取音频 ffmpeg -i video.mp4 -vn -c:a copy audio.aac # 提取单帧图片 ffmpeg -i input.mp4 -ss 00:01:23 -vframes 1 frame.jpg3. 合并/拼接# 合并两个视频 ffmpeg -f concat -i filelist.txt -c copy output.mp44. 压缩优化# 压缩视频H.264 ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4 # CRF 范围18接近无损~ 28高压缩5. 添加水印/字幕# 添加图片水印 ffmpeg -i input.mp4 -i watermark.png -filter_complex overlay10:10 output.mp4 # 烧录 SRT 字幕 ffmpeg -i input.mp4 -vf subtitlessubs.srt output.mp46. 流媒体推流# 推流到 RTMP 服务器 ffmpeg -i input.mp4 -f flv rtmp://live.example.com/live/stream_key # 拉流录制 ffmpeg -i rtmp://live.example.com/live/stream_key -c copy record.mp47. 降噪/增强# 视频降噪 ffmpeg -i input.mp4 -filter_complex denoises7 output.mp4 # 音频降噪 ffmpeg -i input.mp4 -af audiodenoise0.8 output.mp48. 分辨率/帧率调整# 缩放到 720p ffmpeg -i input.mp4 -vf scale-2:720 output.mp4 # 帧率从 30fps 降到 24fps ffmpeg -i input.mp4 -r 24 output.mp4常用参数速查参数含义-i输入文件-c:v视频编码器-c:a音频编码器-ss开始时间-t持续时间-crf质量压缩率-b:a音频比特率-vf视频滤镜-af音频滤镜-f强制格式-y自动覆盖输出核心应用场景1. 媒体处理功能测试测试场景验证视频转码功能是否正确├── 输入各种格式的视频文件mp4/mkv/avi/webm├── 调用转码逻辑└── 用 FFmpeg 提取输出文件的元数据/帧进行断言2. 视频对比/回归测试# 对比两个视频是否完全一致 ffmpeg -i actual.mp4 -i expected.mp4 -lavfi \ ssimstats_filessim.log -f null - # 检测像素差异找出画面变化 ffmpeg -i before.mp4 -i after.mp4 -lavfi \ psnrstats_filepsnr.log -f null -3. 生成测试数据# 生成特定规格的测试视频 ffmpeg -f lavfi -i testsrcduration10:size1280x720:rate30 \ -c:v libx264 -pix_fmt yuv420p test_video.mp4 # 生成纯色/静音测试文件 ffmpeg -f lavfi -i colorcblue:s1280x720:d5 test_blue.mp4 ffmpeg -f lavfi -i anullsrcr44100:clstereo -t 5 silent.wav4. 流媒体推拉流测试# 自动启动推流 ffmpeg -re -i test.mp4 -f flv rtmp://server/live # 自动验证拉流是否成功 ffprobe -v error -select_streams v:0 -show_entries \ streamcodec_name,codec_type rtmp://server/live5. 性能/压力测试# 批量并发转码测试 for i in {1..100}; do ffmpeg -i input.mp4 -c:v libx264 output_$i.mp4 done wait # 统计成功率、耗时、资源占用6. 音视频同步测试# 提取音视频分别计算时长验证同步性 ffprobe -v error -show_entries formatduration input.mp4 ffprobe -v error -select_streams a:0 -show_entries streamduration input.mp4 ffprobe -v error -select_streams v:0 -show_entries streamduration input.mp47. 兼容性测试测试矩阵├── 编码器libx264 / libx265 / VP9 / AV1├── 容器mp4 / mkv / webm / mov├── 分辨率720p / 1080p / 4K / 8K└── FFmpeg 版本4.4 / 5.0 / 6.0 / 7.0→ 用 FFmpeg 生成所有组合的测试文件→ 验证播放器能否正确解析8. 自动化截图对比# 定时截取视频帧 ffmpeg -i video.mp4 -vf fps1 frames_%04d.png # 比对 UI 渲染后的视频输出 ffmpeg -i render_output.mp4 -ss 00:00:01 -vframes 1 frame1.png常见测试框架集成框架集成方式Python PyTestsubprocess 调用 FFmpeg解析输出Node.jschild_process 执行命令Robot Framework自定义 Library 调用 FFmpegJenkins/GitLab CIDocker 容器中运行 FFmpeg典型测试流程示例def test_video_transcoding_1080p(): # 1. 生成测试文件 subprocess.run([ ffmpeg, -f, lavfi, -i, testsrcduration5:size1920x1080, -c:v, libx264, -pix_fmt, yuv420p, test_input.mp4 ]) # 2. 调用被测转码器 result video_codec.transcode(test_input.mp4, output.webm) # 3. 用 FFmpeg 验证输出 probe subprocess.run([ ffprobe, -v, error, -select_streams, v:0, -show_entries, streamwidth,height,codec_name, -of, json, output.webm ], capture_outputTrue, textTrue) # 4. 断言 info json.loads(probe.stdout) assert info[streams][0][width] 1920 assert info[streams][0][height] 1080 assert info[streams][0][codec_name] vp8一句话FFmpeg 在测试中既是「造雨者」生成测试素材又是「裁判」验证输出结果是音视频相关产品自动化测试的利器。