在多媒体处理领域,FFmpeg 是一款几乎无所不能的开源命令行工具。无论是视频格式转换、提取音频、视频分帧、添加字幕、图像合成还是转码压缩,FFmpeg 都能胜任。本文将结合大量实用命令示例,系统介绍 FFmpeg 的常见功能、参数含义及其应用场景,帮助你提升学习和工作效率!!
FFmpeg 是一个开源的音视频处理框架,支持几乎所有音视频格式的编解码、转封装和流媒体处理。安装简单、依赖少、跨平台,是视频开发者和机器视觉研究者的首选。
安装方式(Ubuntu):
sudo apt update
sudo apt install ffmpeg
查看版本与帮助文档:
ffmpeg -version
ffmpeg -h
视频分帧是指将视频中的每一帧或每隔一定时间提取一帧图像,用于图像处理、视频摘要、训练数据准备等。
ffmpeg -i first.mp4 frames/frame_%04d.jpg
-i first.mp4
:输入视频文件。frames/frame_%04d.jpg
:输出路径和命名格式,%04d 表示编号为 4 位数字(如 frame_0001.jpg)。ffmpeg -i first.mp4 -vf "fps=1" frames/frame_%04d.jpg
ffmpeg -ss 00:00:10 -to 00:00:20 -i first.mp4 -vf fps=2 frames/frame_%04d.jpg
-ss
:起始时间。-to
:结束时间。fps=2
:每秒提取 2 帧。ffmpeg -i first.mp4 frames/frame_%04d.png
统一缩放成 640×480
ffmpeg -i first.mp4 -vf "scale=640:480" frames/frame_%04d.jpg
按比例缩放为原始尺寸的一半
ffmpeg -i first.mp4 -vf "scale=iw/2:ih/2" frames/frame_%04d.jpg
scale=width:height
:统一图像尺寸。iw
表示输入宽度,ih
表示输入高度ffmpeg -i first.mp4 -vf "select='not(mod(n,10))',setpts=N/FRAME_RATE/TB" frames/frame_%04d.jpg
mod(n,10)
:每隔 10 帧提取。ffmpeg -i first.mp4 -vsync 0 -frame_pts 1 frames/frame_%d.jpg
提取中间区域(从中心 300×300)
ffmpeg -i first.mp4 -vf "crop=300:300" frames/frame_%04d.jpg
从左上角(x=100, y=50)裁剪出 400×400 区域
ffmpeg -i first.mp4 -vf "crop=400:400:100:50" frames/frame_%04d.jpg
设置 JPEG 图片质量(值越小质量越高)
ffmpeg -i first.mp4 -qscale:v 2 frames/frame_%04d.jpg
2
(高质量)到 5
(中等),最大为 31
(低质量)ffmpeg -i first.mp4 -vf "transpose=1,fps=1" frames/frame_%04d.jpg
transpose=1
表示顺时针旋转 90 度;可以根据 ffprobe 结果调整旋转方向。for f in *.mp4; do
name=$(basename "$f" .mp4)
mkdir -p frames/"$name"
ffmpeg -i "$f" -vf "fps=1" frames/"$name"/frame_%04d.jpg
done
若你在 .mp4 视频中看不到明显帧变化,可以尝试加 -analyzeduration
、-probesize
提前预处理。
用 ffprobe -i first.mp4 -show_streams
查看帧率/编码等信息,有助于调整 fps
参数。
ffmpeg -i first.mp4 -q:a 0 -map a audio.mp3
-q:a 0
:高音质。-map a
:仅提取音频流。ffmpeg -i first.mp4 -vf "crop=300:300:100:50" cropped.mp4
ffmpeg -i first.mp4 -vf "scale=1280:720" scaled.mp4
ffmpeg -i first.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
ffmpeg -framerate 25 -i frames/frame_%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
参数 | 含义及用途 |
---|---|
-i |
输入文件路径 |
-vf |
视频滤镜,例如 scale、crop、fps、overlay 等 |
-af |
音频滤镜,例如 volume、atempo |
-ss 、-to |
设置时间段(起始/结束) |
-c:v |
指定视频编码器(如 libx264、libx265) |
-crf |
控制质量(推荐 18-28,越小质量越高) |
-preset |
控制编码速度(ultrafast 到 slow) |
-q:v |
图像质量,数值越小质量越高(2-5 推荐) |
-pix_fmt |
像素格式,yuv420p 为最通用 |
FFmpeg 是视频图像处理工具链中的瑞士军刀。尤其在视频分帧场景下,不仅可以自由控制帧率、图像格式和输出大小,还能精细选择时间范围和帧编号,满足数据提取和图像分析等需求。
本文通过详细讲解 FFmpeg 的视频分帧命令,并拓展到音频提取、裁剪、水印、视频合成等功能,让你在实践中理解其强大之处。熟练掌握这些用法后,无论是构建数据集、视频分析还是内容剪辑,都能得心应手。
后续你还可以探索 FFmpeg 的高级功能,例如字幕处理、流媒体推送、GPU 加速等,继续挖掘它的潜力。