FFmpeg 是一款开源的软件,可以进行多种格式的视频、音频编码转换、片段剪辑。它包含了 libavcodec – 这是一个用于多个项目中音频和视频的解码器库,以及 libavformat – 一个音频与视频格式转换库。FFmpeg 这个单词中的 FF 指的是 Fast Forward。FFmpeg 官网:https://ffmpeg.org ,下载时会跳转到这里:https://ffmpeg.zeranoe.com/builds ,请选择合适的版本下载使用。本文记录 FFmpeg 的使用方法,基于 Windows X64 平台。
下载安装
下载
在 https://ffmpeg.zeranoe.com/builds 下载页面,选择适合自己操作系统的版本,我这里选择 Windows X64 的 static zip 包,解压后直接使用,无需安装。
解压配置环境变量
下载到指定的目录【最好放在方便管理的目录,不显得混乱】,直接解压,得到一个文件夹,里面有 bin、doc、presets 这 3 个子文件夹,其中 bin 里面就包含了主程序:ffmpeg、ffplay、ffprobe,这里不涉及安装的概念,程序可以直接使用。
解压主目录
子文件夹 bin
为了方便使用这 3 个主程序,需要把 bin 所在目录配置到环境变量 PATH 中【我这里是 D:\Program Files\ffmpeg\bin】,这里就不再赘述,如果不配置,每次使用命令时都要给出完整的目录,我觉得很麻烦。
使用示例
ffmpeg 的命令行参数的位置会影响执行的结果,例如时间参数,这与我所知道的其它工具不一样,所以参数位置不能乱放。此外,还需要注意涉及到转码的操作会比较耗时,几十分钟的视频不是几分钟能处理完的,和视频的清晰度也有关系,这个要有一定的心理准备。
1、把 mkv 格式的视频文件转为 mp4 格式的文件,视频使用 libx264 编码。
1 | -- 如果没有配置环境变量 PATH, 命令需要指定 D:\Program Files\ffmpeg\bin\ffmpeg |
里面的字幕信息如果是和视频一起的,会自动携带输出。
2、查看视频文件的流信息,包括视频、音频、字幕。
1 | -- 其中类似 Stream #0:0 格式的内容就是流信息,指定参数时可以直接使用数字编号表示流 |

3、mkv 文件剪辑,截取片段,指定音轨。
1 | -- -ss 表示开始时间,-to 表示结束时间, |
其中,-accurate_seek 表示画面帧数校准,-avoid_negative_ts 1 表示修复结尾可能的空白帧,-map 0:v 表示截取所有视频,-map 0:a:1 表示截取第 2 道音轨。
此外,如果把时间参数放在 -i 前面,结果总会多截取 1-2 秒【如上面示例】。但是如果放在后面,截取的视频片段时间准确了,然而开头的音频正常,视频有 20-30 秒的漆黑一片,不知道为啥。
注意,如果视频带有内嵌字幕【mkv 携带的一般是 ASS 字幕】,也需要一起剪辑的话,需要指定参数:-map 0:s,格式和指定视频、音频的格式一致。如果是其它格式的字幕,只要确保 ffmpeg 支持即可使用字幕相关的参数,那么怎么查看呢,很简单,使用 ffmpeg -codecs |grep title 命令即可搜索。
4、rmvb 文件转为 mp4 文件,涉及到编码转换。
1 | -- 视频使用 h264 编码,音频使用 aac 编码 |
这里需要注意,涉及到编码转换的比较消耗 CPU,上面这个命令把我的 CPU 消耗到 100%,动态视频详见微博:FFmpeg 视频转码 CPU 飙升到 100% 。其中,留意流输出信息:
1 | Stream mapping: |
此外,FFmpeg 不支持 rmvb 格式的文件,只能转码为 mp4 的格式再使用,这里的不支持不是指不能处理,而是不能直接输出 rmvb 格式的文件,处理输入是可以的。
5、多个 mp4 文件拼接,先转为同样的编码格式的 ts 流,再拼接 ts 流接着转换为 mp4 格式的输出。
1 | ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts |
简单高效,而且视频质量没有损失。
其它
1、如果只是为了转换 mkv 文件的格式为 mp4,也可以使用一款软件:MkvToMp4 。

