Skip to content

FFmpeg命令大全

完整的FFmpeg使用指南,包含各种常用命令、参数说明和实际应用场景示例

格式转换

basic

将视频从一种格式转换为另一种格式

ffmpeg -i input.avi output.mp4
-i 指定输入文件

输出格式由文件扩展名决定,FFmpeg会自动选择合适的编码器。

提取音频

basic

从视频文件中提取音频轨道

ffmpeg -i video.mp4 -vn -c:a libmp3lame audio.mp3
-vn 禁用视频流
-c:a 设置音频编码器

此命令从视频中提取音频并保存为MP3格式,保留原始音频质量。

视频截图

basic

从视频中捕获指定时间的画面

ffmpeg -i video.mp4 -ss 00:01:30 -vframes 1 screenshot.jpg
-ss 定位到指定时间
-vframes 设置捕获帧数

在视频的1分30秒处截取一张图片,适合制作视频缩略图。

获取媒体信息

basic

查看视频或音频文件的详细信息

ffmpeg -i input.mp4
-i 指定输入文件

不指定输出文件时,FFmpeg会显示文件的详细信息,包括编码、时长、分辨率等。

视频转GIF

basic

将视频转换为GIF动画

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" output.gif
-vf 视频过滤器
fps 设置帧率
scale 调整大小

将视频转换为10fps、宽度320像素的GIF动画,适合制作表情包或短动画。

批量格式转换

basic

将文件夹中所有视频转换为指定格式

for %i in (*.mov) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac "%~ni.mp4"
for循环 批量处理文件
-c:v 设置视频编码器

在Windows批处理中循环转换所有MOV文件为MP4格式,适用于从相机导入的视频处理。

提取视频帧序列

basic

将视频逐帧提取为图片序列

ffmpeg -i video.mp4 frame_%04d.jpg
%04d 四位数字序列号

将视频逐帧提取为JPEG图片,文件名格式为frame_0001.jpg、frame_0002.jpg等。

视频剪辑

basic

从长视频中提取指定时间段

ffmpeg -i input.mp4 -ss 00:10:00 -to 00:15:30 -c copy clip.mp4
-ss 开始时间
-to 结束时间
-c copy 直接复制不重新编码

使用流复制快速提取10分钟到15分30秒的视频片段,保持原始质量。

视频合并

basic

将多个视频文件合并为一个

ffmpeg -f concat -i filelist.txt -c copy output.mp4
-f concat 使用连接协议
-i filelist.txt 输入文件列表

通过文件列表将多个视频合并为一个,filelist.txt包含要合并的文件路径。

调整视频播放速度

basic

加快或减慢视频播放速度

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -an output.mp4
-vf setpts 设置显示时间戳
-an 禁用音频

将视频播放速度加快一倍(setpts=0.5*PTS),减慢为一半使用setpts=2*PTS。

调整视频大小

video

改变视频的分辨率

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
-vf scale 视频过滤器缩放

将视频分辨率调整为1280x720像素,保持原始宽高比。

压缩视频

video

减小视频文件大小

ffmpeg -i input.mp4 -c:v libx264 -crf 23 compressed.mp4
-c:v 设置视频编码器
-crf 恒定质量因子(0-51)

使用H.264编码压缩视频,CRF值越小质量越高(18-28是常用范围)。

添加水印

video

在视频上叠加图片或文字水印

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
-filter_complex 复杂过滤器图
overlay 叠加位置(左上角)

在视频的左上角(10,10)位置添加PNG水印图片。

视频裁剪

video

裁剪视频的特定区域

ffmpeg -i input.mp4 -vf "crop=640:360:100:100" output.mp4
-vf crop 视频裁剪过滤器

从视频的(100,100)位置开始,裁剪640x360像素的区域。

视频旋转

video

将视频旋转90度、180度或270度

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
-vf transpose 视频旋转过滤器

transpose参数:0=逆时针旋转90度并垂直翻转,1=顺时针旋转90度,2=逆时针旋转90度,3=顺时针旋转90度并垂直翻转。

视频稳定处理

video

使用vid.stab插件稳定抖动视频

ffmpeg -i shaky.mp4 -vf vidstabdetect=shakiness=5:accuracy=15:result="transform_vectors.trf" -f null -
-vf vidstabdetect 视频稳定检测

第一步:分析视频抖动并生成变换向量文件。

视频稳定应用

video

应用视频稳定效果

ffmpeg -i shaky.mp4 -vf vidstabtransform=smoothing=10:input="transform_vectors.trf" stable.mp4
-vf vidstabtransform 视频稳定变换

第二步:应用稳定效果,smoothing参数控制平滑程度。

视频反交错

video

去除视频的交错扫描线

ffmpeg -i input.mp4 -vf yadif output.mp4
-vf yadif 反交错过滤器

去除隔行扫描视频的交错线,使视频更适合在逐行扫描设备上播放。

视频去隔行

video

将隔行扫描视频转换为逐行扫描

ffmpeg -i interlaced.mp4 -vf bwdif=0:-1:0 deinterlaced.mp4
-vf bwdif 去隔行过滤器

使用bwdif过滤器将隔行扫描视频转换为逐行扫描,提高观看体验。

视频降噪

video

减少视频中的噪点

ffmpeg -i noisy.mp4 -vf hqdn3d denoised.mp4
-vf hqdn3d 高质量降噪过滤器

使用hqdn3d过滤器减少视频中的噪点,提高画面质量。

调整音频音量

audio

增加或减少音频音量

ffmpeg -i input.mp3 -af "volume=1.5" output.mp3
-af 音频过滤器
volume=1.5 表示增加50%音量

此命令将音频音量提高50%,可以设置为小于1的值来降低音量。

音频格式转换

audio

将音频从一种格式转换为另一种格式

ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3
-c:a 设置音频编码器
-b:a 设置音频比特率

将WAV格式音频转换为192kbps的MP3格式,适合网络传输。

音频剪辑

audio

从音频中提取指定时间段

ffmpeg -i input.mp3 -ss 00:01:30 -to 00:03:45 -c copy clip.mp3
-ss 开始时间
-to 结束时间
-c copy 直接复制不重新编码

提取音频从1分30秒到3分45秒的片段,不重新编码,保持原始质量。

音频淡入淡出

audio

为音频添加淡入淡出效果

ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=10:d=3" output.mp3
-af afade 音频淡入淡出过滤器

为音频添加3秒淡入效果(从0秒开始)和3秒淡出效果(从10秒开始)。

音频降噪

audio

减少音频中的背景噪音

ffmpeg -i input.wav -af "afftdn=nf=-20" output.wav
-af afftdn FFT降噪过滤器

使用FFT降噪算法减少音频中的背景噪音,nf参数控制降噪强度。

音频合并

audio

将多个音频文件合并为一个

ffmpeg -i "concat:input1.mp3|input2.mp3" -c copy output.mp3
concat: 连接多个输入文件

将多个音频文件按顺序合并为一个文件,不重新编码,保持原始质量。

改变音频采样率

audio

调整音频的采样率

ffmpeg -i input.wav -ar 44100 output.wav
-ar 设置音频采样率

将音频采样率调整为44.1kHz,这是CD质量的采样率。

音频声道处理

audio

转换立体声为单声道或反之

ffmpeg -i input.wav -ac 1 output.wav
-ac 设置音频声道数

将立体声音频转换为单声道,设置为2可将单声道转换为立体声。

音频均衡器

audio

调整音频的频率响应

ffmpeg -i input.wav -af "equalizer=f=1000:width_type=o:width=2:g=5" output.wav
-af equalizer 音频均衡器过滤器

在1000Hz频率处增加5dB增益,调整音频的频率平衡。

音频压缩

audio

动态范围压缩

ffmpeg -i input.wav -af "acompressor=threshold=0.1:ratio=9:attack=200:release=1000" output.wav
-af acompressor 音频压缩器

应用动态范围压缩,减少音频的动态范围,使安静部分更响亮。

添加文字水印

filter

在视频上添加文字水印

ffmpeg -i input.mp4 -vf "drawtext=text='Sample Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4
-vf drawtext 文字绘制过滤器

在视频的(10,10)位置添加白色文字水印,字体大小为24。

视频模糊效果

filter

为视频添加模糊效果

ffmpeg -i input.mp4 -vf "boxblur=5:1" output.mp4
-vf boxblur 方框模糊过滤器

为视频添加模糊效果,第一个参数控制模糊强度,第二个参数控制模糊算法质量。

视频颜色调整

filter

调整视频的亮度、对比度和饱和度

ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.5" output.mp4
-vf eq 均衡器过滤器

调整视频的亮度(+0.1)、对比度(1.2倍)和饱和度(1.5倍)。

视频镜像效果

filter

创建视频的镜像效果

ffmpeg -i input.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" output.mp4
-vf split 分割视频流
vflip 垂直翻转

创建视频的垂直镜像效果,下半部分是上半部分的镜像。

视频老电影效果

filter

为视频添加老电影效果

ffmpeg -i input.mp4 -vf "noise=alls=20:allf=t+u, curves=vintage" output.mp4
-vf noise 添加噪点
curves 调整颜色曲线

为视频添加噪点和复古颜色曲线,模拟老电影效果。

视频锐化

filter

增强视频的细节和清晰度

ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0" output.mp4
-vf unsharp 锐化过滤器

使用unsharp mask算法锐化视频,增强细节和清晰度。

视频边缘检测

filter

检测并突出显示视频中的边缘

ffmpeg -i input.mp4 -vf "edgedetect=low=0.1:high=0.4" output.mp4
-vf edgedetect 边缘检测过滤器

检测视频中的边缘并突出显示,适用于计算机视觉应用。

视频色彩空间转换

filter

转换视频的色彩空间

ffmpeg -i input.mp4 -vf "colorspace=bt709:iall=bt601-6-625:fast=1" output.mp4
-vf colorspace 色彩空间转换过滤器

将视频从BT.601色彩空间转换为BT.709色彩空间。

视频灰度化

filter

将彩色视频转换为灰度视频

ffmpeg -i input.mp4 -vf "hue=s=0" output.mp4
-vf hue 色调饱和度过滤器

将彩色视频转换为灰度视频,通过将饱和度设置为0实现。

视频反色效果

filter

创建视频的反色效果

ffmpeg -i input.mp4 -vf "negate" output.mp4
-vf negate 反色过滤器

创建视频的反色效果,将所有颜色值取反。

RTMP流录制

stream

录制RTMP直播流并保存为本地文件

ffmpeg -i rtmp://server/live/stream -c copy -f flv recording.flv
-c copy 直接复制不重新编码
-f flv 指定输出格式为FLV

录制RTMP直播流并保存为FLV格式,-c copy参数避免重新编码,节省CPU资源。

HLS流生成

stream

将视频文件转换为HLS流格式

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8
-f hls 指定输出格式为HLS
-hls_time 设置每个分片的时长

将MP4视频转换为HLS流,每个分片10秒,适合网页视频播放。

RTMP推流

stream

将本地视频推送到RTMP服务器

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream
-re 以原始帧率读取输入
-f flv 指定输出格式为FLV

将本地视频文件以直播流的形式推送到RTMP服务器,适合直播场景。

屏幕录制

stream

录制电脑屏幕并保存为视频

ffmpeg -f gdigrab -i desktop output.mp4
-f gdigrab 使用GDI抓取屏幕(Windows)

在Windows系统上录制整个屏幕,Linux系统可使用x11grab。

摄像头录制

stream

录制摄像头视频流

ffmpeg -f dshow -i video="Integrated Camera" output.mp4
-f dshow 使用DirectShow输入(Windows)

在Windows系统上录制摄像头视频,需要指定正确的设备名称。

音频流录制

stream

录制音频输入设备

ffmpeg -f alsa -i default output.wav
-f alsa 使用ALSA输入(Linux)

在Linux系统上录制默认音频输入设备,保存为WAV格式。

多分辨率HLS流

stream

生成适应不同带宽的多分辨率HLS流

ffmpeg -i input.mp4 -map 0 -c:v libx264 -b:v:0 800k -s:v:0 640x360 -c:v:1 libx264 -b:v:1 1500k -s:v:1 854x480 -c:a aac -f hls -var_stream_map "v:0,a:0 v:1,a:0" -hls_segment_filename stream_%v/data%02d.ts -master_pl_name master.m3u8 stream_%v.m3u8
-map 选择流映射
-var_stream_map 变量流映射

生成两种分辨率(640x360和854x480)的HLS流,适应不同网络条件。

DASH流生成

stream

将视频文件转换为DASH流格式

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f dash -window_size 5 -extra_window_size 5 -remove_at_exit 1 output.mpd
-f dash 指定输出格式为DASH
-window_size 设置窗口大小

将MP4视频转换为DASH流,适合自适应比特率流媒体播放。

RTSP流录制

stream

录制RTSP视频流

ffmpeg -i rtsp://server/stream -c copy output.mp4
-i 输入RTSP流地址

录制RTSP视频流并保存为MP4格式,适用于监控摄像头等场景。

HTTP流推送

stream

将视频推送到HTTP服务器

ffmpeg -i input.mp4 -c copy -f mp4 http://server/upload
-f mp4 指定输出格式为MP4

将视频文件通过HTTP POST请求推送到服务器,适合文件上传场景。

画中画效果

advanced

创建画中画效果,将小视频叠加到大视频上

ffmpeg -i main.mp4 -i pip.mp4 -filter_complex "[1:v]scale=iw/4:ih/4 [pip]; [0:v][pip] overlay=W-w-10:10" output.mp4
-filter_complex 复杂过滤器图
overlay 叠加过滤器

创建画中画效果,将小视频缩放为1/4大小并放置在主视频右上角。

硬件加速转码

advanced

使用GPU加速视频转码过程

ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
-hwaccel 启用硬件加速
-c:v h264_nvenc 使用NVIDIA硬件编码器

使用NVIDIA GPU加速H.264编码,大幅提高转码速度。

多路流处理

advanced

同时处理多个视频流

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4
-filter_complex hstack 水平堆叠多个视频流

将两个视频水平并排合并为一个视频,vstack可垂直堆叠。

视频时间码叠加

advanced

在视频上叠加时间码信息

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='%{pts\:hms}':x=10:y=10:fontsize=24:fontcolor=white" output.mp4
-vf drawtext 文字绘制过滤器
%{pts\:hms} 时间码表达式

在视频左上角叠加时间码信息,显示小时:分钟:秒格式。

视频元数据编辑

advanced

修改视频的元数据信息

ffmpeg -i input.mp4 -metadata title="My Video" -metadata year="2023" output.mp4
-metadata 设置元数据字段

修改视频的元数据信息,如标题、年份、作者等。

视频质量评估

advanced

使用PSNR评估视频质量

ffmpeg -i compressed.mp4 -i original.mp4 -lavfi psnr -f null -
-lavfi psnr 使用PSNR过滤器

比较压缩视频与原始视频的质量,输出PSNR值评估质量损失。

视频码率控制

advanced

使用CRF模式控制视频码率

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 2M -bufsize 4M output.mp4
-crf 恒定质量因子
-maxrate 最大码率

使用CRF模式控制视频质量,同时限制最大码率防止文件过大。

视频隔行扫描

advanced

将逐行扫描视频转换为隔行扫描

ffmpeg -i progressive.mp4 -vf "fieldorder=tff" interlaced.mp4
-vf fieldorder 场序过滤器

将逐行扫描视频转换为顶场先行的隔行扫描视频,适用于广播电视。

视频帧率转换

advanced

改变视频的帧率

ffmpeg -i input.mp4 -vf "fps=30" output.mp4
-vf fps 帧率过滤器

将视频帧率转换为30fps,使用帧插值或丢帧方法适应新帧率。

视频去块效应

advanced

减少视频压缩产生的块效应

ffmpeg -i blocky.mp4 -vf "deblock" debocked.mp4
-vf deblock 去块效应过滤器

减少因高压缩率产生的块效应,提高视频视觉质量。

批量添加水印

utility

为文件夹中的所有视频添加相同水印

for %i in (*.mp4) do ffmpeg -i "%i" -i watermark.png -filter_complex "overlay=10:10" "watermarked_%~ni.mp4"
for循环 批量处理文件

批量处理文件夹中的所有MP4文件,在左上角添加水印。

批量调整视频分辨率

utility

将文件夹中所有视频调整为统一分辨率

for %i in (*.mp4) do ffmpeg -i "%i" -vf scale=1280:720 "resized_%~ni.mp4"
for循环 批量处理文件

批量调整所有MP4文件为1280x720分辨率,适合统一视频规格。

批量提取视频音频

utility

从文件夹中所有视频提取音频

for %i in (*.mp4) do ffmpeg -i "%i" -vn -c:a libmp3lame "%~ni.mp3"
for循环 批量处理文件

批量提取所有MP4文件的音频并保存为MP3格式。

批量生成视频缩略图

utility

为文件夹中所有视频生成缩略图

for %i in (*.mp4) do ffmpeg -i "%i" -ss 00:00:05 -vframes 1 "%~ni_thumb.jpg"
for循环 批量处理文件

为每个视频在第5秒处生成一张缩略图。

批量视频压缩

utility

压缩文件夹中所有视频以减少文件大小

for %i in (*.mp4) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac -b:a 128k "compressed_%~ni.mp4"
for循环 批量处理文件

批量压缩所有MP4文件,使用CRF 23和128kbps音频,平衡质量与文件大小。

视频时长统计

utility

统计文件夹中所有视频的总时长

for %i in (*.mp4) do ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "%i"
ffprobe FFmpeg的媒体分析工具

使用ffprobe统计每个视频的时长,可用于计算总时长。

视频信息导出

utility

将视频信息导出为文本文件

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 > video_info.json
-print_format json 以JSON格式输出

将视频的详细格式和流信息导出为JSON文件,便于分析。

视频帧信息分析

utility

分析视频的帧类型和时间戳

ffprobe -show_frames input.mp4
-show_frames 显示帧信息

显示视频的每一帧信息,包括帧类型(I/P/B)、时间戳等。

视频码率分析

utility

分析视频的码率变化

ffmpeg -i input.mp4 -vf "showinfo" -f null -
-vf showinfo 显示流信息

分析视频的码率变化,显示每一帧的详细信息。

视频格式验证

utility

验证视频文件的完整性和兼容性

ffmpeg -v error -i input.mp4 -f null -
-v error 只显示错误信息

验证视频文件的完整性和兼容性,只输出错误信息。

常用场景与应用示例

视频格式批量转换

将文件夹中的所有MOV文件转换为MP4格式,保持原始质量

for %i in (*.mov) do ffmpeg -i "%i" -c:v libx264 -crf 18 -c:a aac "%~ni.mp4"

在Windows批处理中使用循环转换所有MOV文件,适用于从相机导入的视频处理。

生成视频缩略图集

从视频中每隔一段时间提取一帧,创建缩略图集合

ffmpeg -i video.mp4 -vf "fps=1/60,scale=320:-1" thumbnails/thumb%03d.jpg

每分钟提取一帧,缩放宽度为320像素(高度按比例自动计算),保存为序列图片。

视频剪辑与合并

从长视频中提取片段或合并多个视频

ffmpeg -i input.mp4 -ss 00:10:00 -to 00:15:30 -c copy clip.mp4

使用流复制(不重新编码)快速提取10分钟到15分30秒的视频片段,保持原始质量。

视频旋转

将视频旋转90度、180度或270度

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

transpose参数:0=逆时针旋转90度并垂直翻转,1=顺时针旋转90度,2=逆时针旋转90度,3=顺时针旋转90度并垂直翻转。

视频压缩优化

优化视频压缩参数以获得最佳质量体积比

ffmpeg -i input.mp4 -c:v libx264 -preset slower -crf 18 -c:a aac -b:a 128k output.mp4

使用slower预设获得更好的压缩效率,CRF 18提供高质量,音频比特率128kbps。