关注

FFmpeg 工具介绍

FFmpeg是什么?

FFmpeg 是音视频处理的终极工具箱,支持编解码、转换、剪辑、合并、流媒体推拉流等几乎所有音视频操作。

ffmpeg = 视频编码转换 + 音频处理 + 流媒体 + 提取/合并 + 滤镜特效

核心组件

组件

功能

ffmpeg

音视频转换/处理主程序

ffprobe

分析媒体文件信息

ffplay

简易播放器

ffmpeg-libav*

库供其他程序调用

使用场景

1. 格式转换

# 视频转换 MP4 → WebM

ffmpeg -i input.mp4 output.webm

# 视频转 GIF

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1" output.gif

# 音频转格式 WAV → MP3

ffmpeg -i audio.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3

2. 剪辑提取

# 剪切片段(从 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.jpg

3. 合并/拼接

# 合并两个视频

ffmpeg -f concat -i filelist.txt -c copy output.mp4

4. 压缩优化

# 压缩视频(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 "overlay=10:10" output.mp4

# 烧录 SRT 字幕

ffmpeg -i input.mp4 -vf " subtitles=subs.srt" output.mp4

6. 流媒体推流

# 推流到 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.mp4

7. 降噪/增强

# 视频降噪

ffmpeg -i input.mp4 -filter_complex "denoise=s=7" output.mp4

# 音频降噪

ffmpeg -i input.mp4 -af "audiodenoise=0.8" output.mp4

8. 分辨率/帧率调整

# 缩放到 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 \

"ssim=stats_file=ssim.log" -f null -

# 检测像素差异(找出画面变化)

ffmpeg -i before.mp4 -i after.mp4 -lavfi \

"psnr=stats_file=psnr.log" -f null -

3. 生成测试数据

# 生成特定规格的测试视频

ffmpeg -f lavfi -i testsrc=duration=10:size=1280x720:rate=30 \

-c:v libx264 -pix_fmt yuv420p test_video.mp4

# 生成纯色/静音测试文件

ffmpeg -f lavfi -i color=c=blue:s=1280x720:d=5 test_blue.mp4

ffmpeg -f lavfi -i anullsrc=r=44100:cl=stereo -t 5 silent.wav

4. 流媒体推拉流测试

# 自动启动推流

ffmpeg -re -i test.mp4 -f flv rtmp://server/live &

# 自动验证拉流是否成功

ffprobe -v error -select_streams v:0 -show_entries \

stream=codec_name,codec_type rtmp://server/live

5. 性能/压力测试

# 批量并发转码测试

for i in {1..100}; do

ffmpeg -i input.mp4 -c:v libx264 output_$i.mp4 &

done

wait

# 统计成功率、耗时、资源占用

6. 音视频同步测试

# 提取音视频分别计算时长,验证同步性

ffprobe -v error -show_entries format=duration input.mp4

ffprobe -v error -select_streams a:0 -show_entries stream=duration input.mp4

ffprobe -v error -select_streams v:0 -show_entries stream=duration input.mp4

7. 兼容性测试

测试矩阵:

├── 编码器: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 "fps=1" frames_%04d.png

# 比对 UI 渲染后的视频输出

ffmpeg -i render_output.mp4 -ss 00:00:01 -vframes 1 frame1.png

常见测试框架集成

框架

集成方式

Python + PyTest

subprocess 调用 FFmpeg,解析输出

Node.js

child_process 执行命令

Robot Framework

自定义 Library 调用 FFmpeg

Jenkins/GitLab CI

Docker 容器中运行 FFmpeg

典型测试流程示例

def test_video_transcoding_1080p():

# 1. 生成测试文件

subprocess.run([

'ffmpeg', '-f', 'lavfi', '-i', 'testsrc=duration=5:size=1920x1080',

'-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', 'stream=width,height,codec_name',

'-of', 'json', 'output.webm'

], capture_output=True, text=True)

# 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 在测试中既是「造雨者」(生成测试素材)又是「裁判」(验证输出结果),是音视频相关产品自动化测试的利器。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/aovenus/article/details/160451215

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--