格式转换
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 只显示错误信息
验证视频文件的完整性和兼容性,只输出错误信息。