格式转换
basic将视频从一种格式转换为另一种格式
ffmpeg -i input.avi output.mp4输出格式由文件扩展名决定,FFmpeg会自动选择合适的编码器。
完整的FFmpeg使用指南,包含各种常用命令、参数说明和实际应用场景示例
了解最强大的多媒体处理框架
支持 Linux、macOS、Windows 等系统
采用 LGPL 或 GPL 许可证,免费使用
支持几乎所有音视频格式
命令行界面,便于自动化处理
新手快速入门指南
将视频从一种格式转换为另一种格式
ffmpeg -i input.avi output.mp4输出格式由文件扩展名决定,FFmpeg会自动选择合适的编码器。
从视频文件中提取音频轨道
ffmpeg -i video.mp4 -vn -c:a libmp3lame audio.mp3此命令从视频中提取音频并保存为MP3格式,保留原始音频质量。
从视频中捕获指定时间的画面
ffmpeg -i video.mp4 -ss 00:01:30 -vframes 1 screenshot.jpg在视频的1分30秒处截取一张图片,适合制作视频缩略图。
查看视频或音频文件的详细信息
ffmpeg -i input.mp4不指定输出文件时,FFmpeg会显示文件的详细信息,包括编码、时长、分辨率等。
将视频转换为GIF动画
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" output.gif将视频转换为10fps、宽度320像素的GIF动画,适合制作表情包或短动画。
将文件夹中所有视频转换为指定格式
for %i in (*.mov) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac "%~ni.mp4"在Windows批处理中循环转换所有MOV文件为MP4格式,适用于从相机导入的视频处理。
将视频逐帧提取为图片序列
ffmpeg -i video.mp4 frame_%04d.jpg将视频逐帧提取为JPEG图片,文件名格式为frame_0001.jpg、frame_0002.jpg等。
从长视频中提取指定时间段
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:15:30 -c copy clip.mp4使用流复制快速提取10分钟到15分30秒的视频片段,保持原始质量。
将多个视频文件合并为一个
ffmpeg -f concat -i filelist.txt -c copy output.mp4通过文件列表将多个视频合并为一个,filelist.txt包含要合并的文件路径。
加快或减慢视频播放速度
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -an output.mp4将视频播放速度加快一倍(setpts=0.5*PTS),减慢为一半使用setpts=2*PTS。
改变视频的分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4将视频分辨率调整为1280x720像素,保持原始宽高比。
减小视频文件大小
ffmpeg -i input.mp4 -c:v libx264 -crf 23 compressed.mp4使用H.264编码压缩视频,CRF值越小质量越高(18-28是常用范围)。
在视频上叠加图片或文字水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4在视频的左上角(10,10)位置添加PNG水印图片。
裁剪视频的特定区域
ffmpeg -i input.mp4 -vf "crop=640:360:100:100" output.mp4从视频的(100,100)位置开始,裁剪640x360像素的区域。
将视频旋转90度、180度或270度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4transpose参数:0=逆时针旋转90度并垂直翻转,1=顺时针旋转90度,2=逆时针旋转90度,3=顺时针旋转90度并垂直翻转。
使用vid.stab插件稳定抖动视频
ffmpeg -i shaky.mp4 -vf vidstabdetect=shakiness=5:accuracy=15:result="transform_vectors.trf" -f null -第一步:分析视频抖动并生成变换向量文件。
应用视频稳定效果
ffmpeg -i shaky.mp4 -vf vidstabtransform=smoothing=10:input="transform_vectors.trf" stable.mp4第二步:应用稳定效果,smoothing参数控制平滑程度。
去除视频的交错扫描线
ffmpeg -i input.mp4 -vf yadif output.mp4去除隔行扫描视频的交错线,使视频更适合在逐行扫描设备上播放。
将隔行扫描视频转换为逐行扫描
ffmpeg -i interlaced.mp4 -vf bwdif=0:-1:0 deinterlaced.mp4使用bwdif过滤器将隔行扫描视频转换为逐行扫描,提高观看体验。
减少视频中的噪点
ffmpeg -i noisy.mp4 -vf hqdn3d denoised.mp4使用hqdn3d过滤器减少视频中的噪点,提高画面质量。
增加或减少音频音量
ffmpeg -i input.mp3 -af "volume=1.5" output.mp3此命令将音频音量提高50%,可以设置为小于1的值来降低音量。
将音频从一种格式转换为另一种格式
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3将WAV格式音频转换为192kbps的MP3格式,适合网络传输。
从音频中提取指定时间段
ffmpeg -i input.mp3 -ss 00:01:30 -to 00:03:45 -c copy clip.mp3提取音频从1分30秒到3分45秒的片段,不重新编码,保持原始质量。
为音频添加淡入淡出效果
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=10:d=3" output.mp3为音频添加3秒淡入效果(从0秒开始)和3秒淡出效果(从10秒开始)。
减少音频中的背景噪音
ffmpeg -i input.wav -af "afftdn=nf=-20" output.wav使用FFT降噪算法减少音频中的背景噪音,nf参数控制降噪强度。
将多个音频文件合并为一个
ffmpeg -i "concat:input1.mp3|input2.mp3" -c copy output.mp3将多个音频文件按顺序合并为一个文件,不重新编码,保持原始质量。
调整音频的采样率
ffmpeg -i input.wav -ar 44100 output.wav将音频采样率调整为44.1kHz,这是CD质量的采样率。
转换立体声为单声道或反之
ffmpeg -i input.wav -ac 1 output.wav将立体声音频转换为单声道,设置为2可将单声道转换为立体声。
调整音频的频率响应
ffmpeg -i input.wav -af "equalizer=f=1000:width_type=o:width=2:g=5" output.wav在1000Hz频率处增加5dB增益,调整音频的频率平衡。
动态范围压缩
ffmpeg -i input.wav -af "acompressor=threshold=0.1:ratio=9:attack=200:release=1000" output.wav应用动态范围压缩,减少音频的动态范围,使安静部分更响亮。
在视频上添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Sample Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4在视频的(10,10)位置添加白色文字水印,字体大小为24。
为视频添加模糊效果
ffmpeg -i input.mp4 -vf "boxblur=5:1" output.mp4为视频添加模糊效果,第一个参数控制模糊强度,第二个参数控制模糊算法质量。
调整视频的亮度、对比度和饱和度
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.5" output.mp4调整视频的亮度(+0.1)、对比度(1.2倍)和饱和度(1.5倍)。
创建视频的镜像效果
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创建视频的垂直镜像效果,下半部分是上半部分的镜像。
为视频添加老电影效果
ffmpeg -i input.mp4 -vf "noise=alls=20:allf=t+u, curves=vintage" output.mp4为视频添加噪点和复古颜色曲线,模拟老电影效果。
增强视频的细节和清晰度
ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0" output.mp4使用unsharp mask算法锐化视频,增强细节和清晰度。
检测并突出显示视频中的边缘
ffmpeg -i input.mp4 -vf "edgedetect=low=0.1:high=0.4" output.mp4检测视频中的边缘并突出显示,适用于计算机视觉应用。
转换视频的色彩空间
ffmpeg -i input.mp4 -vf "colorspace=bt709:iall=bt601-6-625:fast=1" output.mp4将视频从BT.601色彩空间转换为BT.709色彩空间。
将彩色视频转换为灰度视频
ffmpeg -i input.mp4 -vf "hue=s=0" output.mp4将彩色视频转换为灰度视频,通过将饱和度设置为0实现。
创建视频的反色效果
ffmpeg -i input.mp4 -vf "negate" output.mp4创建视频的反色效果,将所有颜色值取反。
录制RTMP直播流并保存为本地文件
ffmpeg -i rtmp://server/live/stream -c copy -f flv recording.flv录制RTMP直播流并保存为FLV格式,-c copy参数避免重新编码,节省CPU资源。
将视频文件转换为HLS流格式
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8将MP4视频转换为HLS流,每个分片10秒,适合网页视频播放。
将本地视频推送到RTMP服务器
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream将本地视频文件以直播流的形式推送到RTMP服务器,适合直播场景。
录制电脑屏幕并保存为视频
ffmpeg -f gdigrab -i desktop output.mp4在Windows系统上录制整个屏幕,Linux系统可使用x11grab。
录制摄像头视频流
ffmpeg -f dshow -i video="Integrated Camera" output.mp4在Windows系统上录制摄像头视频,需要指定正确的设备名称。
录制音频输入设备
ffmpeg -f alsa -i default output.wav在Linux系统上录制默认音频输入设备,保存为WAV格式。
生成适应不同带宽的多分辨率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生成两种分辨率(640x360和854x480)的HLS流,适应不同网络条件。
将视频文件转换为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将MP4视频转换为DASH流,适合自适应比特率流媒体播放。
录制RTSP视频流
ffmpeg -i rtsp://server/stream -c copy output.mp4录制RTSP视频流并保存为MP4格式,适用于监控摄像头等场景。
将视频推送到HTTP服务器
ffmpeg -i input.mp4 -c copy -f mp4 http://server/upload将视频文件通过HTTP POST请求推送到服务器,适合文件上传场景。
创建画中画效果,将小视频叠加到大视频上
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创建画中画效果,将小视频缩放为1/4大小并放置在主视频右上角。
使用GPU加速视频转码过程
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4使用NVIDIA GPU加速H.264编码,大幅提高转码速度。
同时处理多个视频流
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4将两个视频水平并排合并为一个视频,vstack可垂直堆叠。
在视频上叠加时间码信息
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='%{pts\:hms}':x=10:y=10:fontsize=24:fontcolor=white" output.mp4在视频左上角叠加时间码信息,显示小时:分钟:秒格式。
修改视频的元数据信息
ffmpeg -i input.mp4 -metadata title="My Video" -metadata year="2023" output.mp4修改视频的元数据信息,如标题、年份、作者等。
使用PSNR评估视频质量
ffmpeg -i compressed.mp4 -i original.mp4 -lavfi psnr -f null -比较压缩视频与原始视频的质量,输出PSNR值评估质量损失。
使用CRF模式控制视频码率
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 2M -bufsize 4M output.mp4使用CRF模式控制视频质量,同时限制最大码率防止文件过大。
将逐行扫描视频转换为隔行扫描
ffmpeg -i progressive.mp4 -vf "fieldorder=tff" interlaced.mp4将逐行扫描视频转换为顶场先行的隔行扫描视频,适用于广播电视。
改变视频的帧率
ffmpeg -i input.mp4 -vf "fps=30" output.mp4将视频帧率转换为30fps,使用帧插值或丢帧方法适应新帧率。
减少视频压缩产生的块效应
ffmpeg -i blocky.mp4 -vf "deblock" debocked.mp4减少因高压缩率产生的块效应,提高视频视觉质量。
为文件夹中的所有视频添加相同水印
for %i in (*.mp4) do ffmpeg -i "%i" -i watermark.png -filter_complex "overlay=10:10" "watermarked_%~ni.mp4"批量处理文件夹中的所有MP4文件,在左上角添加水印。
将文件夹中所有视频调整为统一分辨率
for %i in (*.mp4) do ffmpeg -i "%i" -vf scale=1280:720 "resized_%~ni.mp4"批量调整所有MP4文件为1280x720分辨率,适合统一视频规格。
从文件夹中所有视频提取音频
for %i in (*.mp4) do ffmpeg -i "%i" -vn -c:a libmp3lame "%~ni.mp3"批量提取所有MP4文件的音频并保存为MP3格式。
为文件夹中所有视频生成缩略图
for %i in (*.mp4) do ffmpeg -i "%i" -ss 00:00:05 -vframes 1 "%~ni_thumb.jpg"为每个视频在第5秒处生成一张缩略图。
压缩文件夹中所有视频以减少文件大小
for %i in (*.mp4) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac -b:a 128k "compressed_%~ni.mp4"批量压缩所有MP4文件,使用CRF 23和128kbps音频,平衡质量与文件大小。
统计文件夹中所有视频的总时长
for %i in (*.mp4) do ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "%i"使用ffprobe统计每个视频的时长,可用于计算总时长。
将视频信息导出为文本文件
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 > video_info.json将视频的详细格式和流信息导出为JSON文件,便于分析。
分析视频的帧类型和时间戳
ffprobe -show_frames input.mp4显示视频的每一帧信息,包括帧类型(I/P/B)、时间戳等。
分析视频的码率变化
ffmpeg -i input.mp4 -vf "showinfo" -f null -分析视频的码率变化,显示每一帧的详细信息。
验证视频文件的完整性和兼容性
ffmpeg -v error -i input.mp4 -f null -验证视频文件的完整性和兼容性,只输出错误信息。
探索 FFmpeg 在实际场景中的强大应用
将文件夹中的所有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.mp4transpose参数: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。
关于 FFmpeg 使用的常见疑问
使用命令 ffmpeg -i input.mp4 output.avi。FFmpeg 会根据输出文件的扩展名智能识别格式。这种方法支持 MP4, AVI, MKV, MOV 等多种主流视频格式的互转,且无需第三方软件。
推荐使用 CRF (Constant Rate Factor) 模式:ffmpeg -i input.mp4 -crf 23 output.mp4。CRF 值范围为 0–51:数值越大,压缩率越高,文件越小。通常设置在 18–28 之间可以在体积与画质间取得平衡。
运行 ffmpeg -i video.mp4 -vn -acodec copy audio.aac。参数 -vn 用于禁用视频流,-acodec copy 则直接复制音频轨道而不重新编码,确保处理速度最快且音质零损失。
1. 先创建一个 filelist.txt,内容格式为 file 'part1.mp4'。 2. 运行 ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4。使用 -c copy 参数可以实现秒级无损合并,避免重新渲染导致的画质下降。