文章

FFmpeg

FFmpeg

下载安装

1. 下载 FFmpeg 安装包

1.打开 Dpwnload FFmpeg 官网,选择安装包Windows builds from gyan.dev

2.下滑找到release bulids部分,选择ffmpeg-git-full.7z或者直接访问ffmpeg-git-full

3.下载完成后,解压缩得到 FFmpeg 文件夹。

2. 配置环境变量

为了方便在命令行中直接调用 FFmpeg,需要将其添加到系统的环境变量中。

解压完毕后,找到解压目录下的 bin 文件夹,复制其完整路径。接着,右键点击 “此电脑”,选择 “属性”,在弹出窗口左侧点击 “高级系统设置”,进入 “系统属性” 窗口后点击下方的 “环境变量” 按钮。在 “系统变量” 区域找到名为 “Path” 的变量,点击 “编辑”,于弹出的编辑窗口点击 “新建”,把之前复制的 bin 文件夹路径粘贴进去,一路点击 “确定” 保存设置。

注意:确保路径准确,以便系统能正确找到 FFmpeg 文件。


3. 测试安装是否成功

1.按 Win + R 键,输入 cmd 打开命令行窗口。

2.在命令行中输入以下命令查看 FFmpeg 版本:ffmpeg -version

3.如果正确显示 FFmpeg 版本号和相关信息,说明安装成功。

FFmpeg 常用参数汇总

命令行结构

一个完整的 FFmpeg 命令行大致分为以下几个部分:

` ffmpeg [全局选项] -i <输入文件/流> [针对输入的过滤与参数] [输出选项] <输出文件/流>`

  • ffmpeg:可执行程序,直接调用。
  • [全局选项]:影响整个 FFmpeg 进程的参数,如日志级别(-loglevel)、线程数(-threads)等。
  • -i <输入>:指定输入文件、URL 或设备。 如果需要多个输入,可多次使用 -i
  • [针对输入的过滤与参数]:可以对输入进行一些局部参数调整,比如输入裁剪、开始偏移、抓取帧率等。
  • [输出选项]:包括输出文件格式、编解码器、码率、分辨率、帧率等设置。
  • <输出>:输出到本地文件、管道、网络推流地址等。

1. 输入输出基础控制

用于指定输入源、输出规则及格式,是所有 FFmpeg 命令的基础。

参数功能说明示例命令
-i <input>指定输入文件(支持单个/多个输入,如视频、音频、图片序列)ffmpeg -i input.mp4 -i bgm.mp3 output.mkv(双输入:视频+背景音乐)
-f <format>强制指定输入/输出格式(解决无扩展名或格式识别错误问题)ffmpeg -f rawvideo -i input.yuv -f mp4 output.mp4(强制输入为 raw 视频)
-y强制覆盖输出文件(无需手动确认,适合批量处理)ffmpeg -i input.mp4 -y output_compressed.mp4
-t <time>指定输出文件时长(支持秒数或 hh:mm:ss 格式,如 01:23:45ffmpeg -i input.mp4 -t 120 output_2min.mp4(截取前 2 分钟)
-ss <time>指定音视频处理的起始时间点(结合 -t 可实现精准截取)ffmpeg -i input.mp4 -ss 00:01:30 -t 60 output_1.5min_start.mp4(从1分30秒开始截取1分钟)

2. 编解码器与比特率设置

控制音视频的编码格式及质量/体积平衡,-b:v/-b:a 是核心比特率参数。

参数功能说明示例命令
-c:v <codec>指定视频编码器(copy 表示直接复制流,不重新编码,速度最快)ffmpeg -i input.mkv -c:v libx264 output.mp4(用 H.264 编码视频)
-c:a <codec>指定音频编码器(copy 同理,避免重复编码损耗)ffmpeg -i input.mp4 -c:a aac output.m4a(用 AAC 编码音频)
-b:v <bitrate>设置视频目标比特率(单位:k=kbps,m=Mbps,平衡质量与体积)ffmpeg -i input.mp4 -c:v libx264 -b:v 2500k output.mp4(视频2500kbps)
-b:a <bitrate>设置音频目标比特率(常见范围:MP3 128-320k,AAC 96-192k)ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3(音频192kbps)
-crf <value>恒定速率因子(仅适用于 x264/x265 编码器,0-51,值越小质量越高,默认23)ffmpeg -i input.mp4 -c:v libx265 -crf 28 output_4k.mp4(4K视频低码率高质量)
-q:a <value>音频质量参数(适用于 MP3/OGG 等,0-9,值越小质量越高,推荐2-5)ffmpeg -i input.flac -c:a libmp3lame -q:a 2 output_highq.mp3(高质量MP3)

3. 视频尺寸与帧率调整

控制输出视频的分辨率、帧率等画面基础属性。

参数功能说明示例命令
-s <width>x<height>直接指定视频分辨率(如 1280x720=720p,1920x1080=1080p)ffmpeg -i input.mp4 -s 1280x720 output_720p.mp4(转为720p)
-vf <filter>视频滤镜(功能强大,支持缩放、裁剪、旋转、水印等,替代 -s 更灵活)ffmpeg -i input.mp4 -vf "scale=1920:1080,crop=1600:900:160:90" output_cropped.mp4(先缩放至1080p,再裁剪画面)
-r <fps>指定输出视频帧率(常见值:24fps 电影、30fps 短视频、60fps 高流畅度视频)ffmpeg -i input_60fps.mp4 -r 30 output_30fps.mp4(60fps 降为 30fps)

4. 音频精细控制

调整音频的采样率、声道数、音量等属性。

参数功能说明示例命令
-ar <rate>指定音频采样率(常见值:44100Hz 标准音频、48000Hz 专业音频)ffmpeg -i input.mp3 -ar 44100 output_std.wav(转为标准采样率)
-ac <num>指定音频声道数(1=单声道,2=立体声,6=5.1声道)ffmpeg -i input_stereo.mp4 -ac 1 output_mono.mp3(立体声转单声道)
-vol <value>调整音频音量(百分比,如 200=音量加倍,50=音量减半,默认 100ffmpeg -i input_quiet.mp4 -vol 180 output_louder.mp4(音量提升80%)

5. 音视频流分离/合并

单独提取音频/视频,或禁用某一流(如静音视频、无画面音频)。

参数功能说明示例命令
-vn禁用视频流(仅保留音频,用于提取音频)ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k output_audio.m4a(提取音频并设128kbps)
-an禁用音频流(仅保留视频,用于提取静音视频)ffmpeg -i input.mp4 -an -c:v copy -b:v 3000k output_video_only.mp4(提取视频并设3000kbps)

6. 其他实用参数

提升命令执行效率或输出可读性的辅助参数。

参数功能说明示例命令
-hide_banner隐藏 FFmpeg 启动时的版本信息、版权声明(使输出日志更简洁)ffmpeg -hide_banner -i input.mp4 output.mp4
-stats显示编码过程中的实时统计(如进度、比特率、剩余时间,默认关闭)ffmpeg -i input.mp4 -stats output.mp4
-threads <num>指定编码使用的线程数(通常设为 CPU 核心数,提升编码速度)ffmpeg -i input.mp4 -c:v libx264 -threads 8 output_fast.mp4(8线程编码)

常用组合命令示例

  1. 视频压缩(平衡质量与体积)
    ffmpeg -i input_4k.mp4 -hide_banner -c:v libx264 -b:v 5000k -c:a aac -b:a 192k -s 1920x1080 -r 30 output_1080p.mp4
    (4K 转 1080p,视频5000kbps,音频192kbps,30fps)

  2. 批量提取音频
    for file in *.mp4; do ffmpeg -i "$file" -vn -c:a libmp3lame -b:a 128k "${file%.mp4}.mp3"; done
    (遍历当前目录所有 MP4,提取为 128kbps 的 MP3)

  3. 视频裁剪+加水印
    ffmpeg -i input.mp4 -ss 00:00:30 -t 180 -vf "scale=1280:720,drawtext=fontfile=simhei.ttf:text='我的水印':fontcolor=white:fontsize=24:x=10:y=10" -c:v libx264 -b:v 2000k -c:a aac -b:a 128k output_watermark.mp4
    (从30秒开始裁剪3分钟,缩为720p,添加白色文字水印)

常见使用场景示例

本节通过实际案例逐步演示常见操作,方便初学者上手。

一、基础格式转换与提取

1. 视频格式转换(通用)

1
2
3
4
5
# MP4 转 MKV(快速复制流,不重新编码)
ffmpeg -i input.mp4 -c:v copy -c:a copy output.mkv

# 任意格式转 MP4(H.264+AAC 标准编码,兼容性好)
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4

2. 提取音频/视频

1
2
3
4
5
6
7
8
# 提取音频(不重新编码,速度最快,如 MP4 中的 AAC 音频)
ffmpeg -i input.mp4 -vn -c:a copy output.aac

# 从视频中提取音频(转 MP3)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3

# 提取纯视频(无音频)
ffmpeg -i input.mp4 -an -c:v copy output_no_audio.mp4

3. 音频格式转换

1
2
3
4
5
# WAV 转 MP3
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3

# FLAC 转 AAC
ffmpeg -i input.flac -c:a aac -b:a 128k output.m4a

二、视频剪辑与裁剪

1. 截取片段(按时间)

1
2
3
4
5
# 从第30秒开始,截取60秒(1分钟)
ffmpeg -i input.mp4 -ss 30 -t 60 -c copy output_clip.mp4

# 截取到指定时间点(如截取前5分钟)
ffmpeg -i input.mp4 -to 00:05:00 -c copy output_short.mp4

2. 裁剪画面(按区域)

1
2
# 裁剪视频(宽640x高480,从左上角(100,50)开始)
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" -c:v libx264 output_cropped.mp4

三、视频压缩与质量调整

1. 按比特率压缩

1
2
# 压缩视频(视频2000kbps,音频128kbps)
ffmpeg -i input.mp4 -b:v 2000k -b:a 128k -c:v libx264 -c:a aac output_small.mp4

2. 按质量压缩(CRF 模式)

1
2
# H.264 编码(CRF 0-51,值越小质量越高,默认23)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -c:a copy output_compressed.mp4

3. 调整分辨率(缩小尺寸)

1
2
3
4
5
# 转为720p(1280x720)
ffmpeg -i input_1080p.mp4 -s 1280x720 -c:v libx264 output_720p.mp4

# 按比例缩小(宽度缩为原50%,高度自动计算)
ffmpeg -i input.mp4 -vf "scale=iw*0.5:-1" output_half.mp4

四、音频处理

1. 调整音量

1
2
3
4
5
# 音量放大1.5倍(150%)
ffmpeg -i input.mp4 -vol 150 output_louder.mp4

# 音量降低一半(50%)
ffmpeg -i input.mp3 -vol 50 output_quieter.mp3

2. 音频拼接

1
2
# 合并两个音频文件(按顺序)
ffmpeg -i "concat:input1.mp3|input2.mp3" -c:a copy output_combined.mp3

3. 去除音频杂音(简单降噪)

1
2
3
# 先提取噪音样本(前1秒静音部分),再降噪
ffmpeg -i input.mp3 -t 1 -af "arnndn=noise_profile=noise.prof" -y /dev/null
ffmpeg -i input.mp3 -af "arnndn=noise_profile=noise.prof" output_denoise.mp3

五、特殊功能

1. 视频转 GIF

1
2
# 截取10-15秒,转为640x360的GIF(10fps)
ffmpeg -i input.mp4 -ss 10 -t 5 -s 640x360 -r 10 output.gif

2. 图片转视频

1
2
# 多张图片(img001.jpg 到 img999.jpg)转视频(24fps)
ffmpeg -framerate 24 -i img%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4

3. 视频添加水印

1
2
3
4
# 在右上角添加水印图片(水印占视频宽度的10%)
ffmpeg -i input.mp4 -i watermark.png -filter_complex \
"[1:v]scale=iw*0.1:-1 [wm]; [0:v][wm]overlay=W-w-10:H-h-10" \
output_watermark.mp4

六、批量处理

1
2
3
4
5
6
7
8
9
# 批量将当前目录的 MP4 转为 MKV
for file in *.mp4; do
  ffmpeg -i "$file" -c copy "${file%.mp4}.mkv"
done

# 批量压缩图片(JPG 转为 80% 质量)
for img in *.jpg; do
  ffmpeg -i "$img" -q:v 2 "${img%.jpg}_compressed.jpg"
done

这些命令可根据实际需求组合参数(如同时设置比特率+分辨率+裁剪),核心是通过 -i 指定输入, -c:v/-c:a 控制编解码器,辅以各种滤镜(-vf/-af)实现复杂处理。

本文由作者按照 CC BY 4.0 进行授权