FFmpeg 安装与使用

发布于:2025-08-01 ⋅ 阅读:(32) ⋅ 点赞:(0)

1. 环境部署(Windows)

1.1. 安装包下载

访问 FFmpeg 官网,点击 Windows builds from gyan.dev。
在 Release Builds 区域选择最新版本(如 ffmpeg-7.0.2-essentials_build.zip):

  • Essentials:基础功能版(推荐)。
  • Full:完整功能版(需更多存储空间)。

GitHub 下载地址
在这里插入图片描述
版本任选
在这里插入图片描述
这里我选择 full 版本,解压后复制 bin 目录路径:

├── bin      # 核心可执行文件(ffmpeg.exe、ffplay.exe、ffprobe.exe)
	├── ffmpeg.exe
	├── ffplay.exe
	└── ffprobe.exe
├── doc      # 文档
└── presets  # 预设编码方案

1.2. 配置环境变量

  1. 右键【此电脑】→【属性】→【高级系统设置】 →【环境变量】。
  2. 在【系统变量】中找到【Path】→点击【编辑】→【新建】→ 输入 D:\Programs\ffmpeg\bin(替换为实际路径)。
  3. 连续点击【确定】保存设置。

1.3. 验证安装

打开命令行窗口(Win+R → 输入 cmd),执行:

ffmpeg -version

若显示版本信息(如 ffmpeg version 7.0.2),则安装成功
在这里插入图片描述

2. FFmpeg 基础使用教程

2.1. 常用命令格式

ffmpeg [全局参数] -i [输入文件] [输出参数] [输出文件]

2.2. 基础功能示例

2.2.1. 视频转码(MP4 → MKV)

ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mkv

-c:v:视频编码器(如 libx265 为 H.265)。
-c:a:音频编码器(如 mp3)。

2.2.2. 调整分辨率(1080p → 480p)

ffmpeg -i input.mp4 -vf scale=854:480 output.mp4

2.2.3. 提取音频

ffmpeg -i input.mp4 -vn -c:a copy output.aac

-vn:忽略视频流。

2.2.4. 剪切视频片段(截取 00:01:00 到 00:02:30)

ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c:v copy -c:a copy output.mp4

2.2.5. 去除水印

https://www.zhihu.com/people/lp-uber/posts

2.3. 视频转封装

2.3.1. HLS 转 MP4

  • 转换单个 TS 文件到 MP4
ffmpeg -i input.ts -c copy output.mp4

-c copy 选项告诉 FFmpeg 直接复制视频和音频流,不进行重新编码,这样可以保持原始质量并快速完成转换。
如果 TS 文件包含特定的编码或封装格式需要被转换(例如从 MPEG-TS 封装转换为 MP4 封装),可以省略 -c copy 选项,让 FFmpeg 自动选择合适的编解码器进行转换。

  • 转换 HLS 流中的 TS 片段到 MP4

处理 HLS 流中的多个 TS 片段(例如,一个 .m3u8 播放列表中的所有 TS 文件):
首先,下载所有 TS 文件(如果存在可跳过该步):

wget -i playlist.m3u8 -P videoss/

然后,合并这些 TS 文件到一个单一的 MP4 文件:

ffmpeg -f concat -safe 0 -i playlist.txt -c copy output.mp4

-f concat 是 FFmpeg 中用于拼接多个媒体文件的输入格式选项,将多个视频或音频文件无缝连接成一个文件。
-safe 参数是 FFmpeg 中用于控制文件路径安全检查的选项,主要在使用 -f concat 进行文件拼接时使用。
1 (默认值): 启用安全检查只允许相对路径且不包含特殊字符;禁用绝对路径、包含父目录的引用路径、某些特殊字符和符号链接;
0: 禁用安全检查允许使用绝对路径和特殊路径
-i playlist.txt 是一个文本文件,包含所有 TS 文件的路径,每一行一个文件路径。例如:

file 'videss/segment_0.ts'
file 'videss/segment_1.ts'
...

最后,文件结构:

├── videoss
	├── segment_0.ts
	├── segment_1.ts
	└── segment_10.ts
├── output.mp4      # 输出文件
└── playlist.txt  	# 输入文件列表