FFmpeg 快速上手:命令行详解、工具、教程、电子书
FFmpeg 简介
FFmpeg 是一个开源的音视频处理工具,诞生已22年。它可以用来处理音视频的编解码、格式转换、剪辑、合并、抽取、压缩、解压缩、滤镜、字幕等等。它可以在 Windows、Linux、Mac 等多种平台上使用。
FFmpeg由法国天才程序员Fabrice Bellard在2000年时开发出初版。不过后来 FFmpeg 社区出现分裂,包括 Fabrice Bellard 在内的部分 FFmpeg 开发者决定脱离原组织重新创建新项目,称作 libav。后来 FFmpeg 项目负责人 Michael Niedermayer 将 libav 的代码合并到了 FFmpeg。
除了 FFmpeg,其他许多知名开源项目,诸如 TinyCC、QEMU、JSLinux 以及比较新的 QuickJS 均出自 Fabrice Bellard 之手,详情查看 https://bellard.org/。
FFmpeg 单词中的 “FF” 指的是 “Fast Forward(快速前进)”,MPEG 是制定国际标准的组织,负责制定影音压缩及传输的规格标准。
FFmpeg 耻辱柱
FFmpeg 最被人熟知的还有它创建的 “耻辱柱”(已于2014年下线,不过其 网页源码[1] 仍保留这些名单)。因为 FFmpeg 属于自由软件,采用了 LGPL 和 GPL 许可证(具体依据所选的组件),所以任何人都可以在遵守协议的情况下自由使用。不过很多播放软件使用了 FFmpeg 的代码后并没有遵守开源协议公开任何源代码。FFmpeg 社区便将违反开源协议的公司、组织和个人网站贴在 “耻辱柱”。韩国播放软件 KMPlayer 以及国产播放器暴风影音、QQ 影音都曾上过榜。
FFmpeg 安装
Windows
Windows 平台上 FFmpeg 安装比较简单,只需要下载 FFmpeg 的压缩包,解压后将 bin 目录添加到环境变量即可。
下载地址:Download FFmpeg[2]
Linux
Linux 平台上 FFmpeg 安装比较简单,只需要使用包管理器安装即可。
Ubuntu/Debian:
sudo apt install ffmpeg
CentOS/RHEL:
sudo yum install ffmpeg
Arch Linux:
sudo pacman -S ffmpeg
MacOS
brew install ffmpeg
FFmpeg 工作流程
ffmpeg的主要工作流程相对比较简单,具体如下。
- \1. 解封装(Demuxing)
- \2. 解码(Decoding)
- \3. 编码(Encoding)
- \4. 封装(Muxing)
具体为6个步骤:
- \1. 读取输入源
- \2. 进行音视频的解封装
- \3. 解码每一帧音视频数据
- \4. 编码每一帧音视频数据
- \5. 进行音视频的重新封装
- \6. 输出到目标
FFmpeg工作流程
FFmpeg 命令
FFmpeg 命令格式
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
举个例子,以下命令将 input.mp4 通过H.264编码器转码为 output.mp4:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast output.mp4
其中 -i 表示输入文件,-c:v 用于指定视频编码器, libx264 是 H.264 编码的一个实现,-crf 表示视频质量,-preset veryfast 表示预设的编码速度,output.mp4 表示输出文件。
FFmpeg 命令参数
通过ffmpeg -h可以看到ffmpeg常见的命令大概分为6个部分,具体如下:
- • ffmpeg信息查询部分
- • 公共操作参数部分
- • 文件主要操作参数部分
- • 视频操作参数部分
- • 音频操作参数部分
- • 字幕操作参数部分
常用参数如下:
- • -i:输入文件
- • -y:覆盖输出文件
- • -f:指定输出文件格式
- • -c:指定编解码器
- • -c copy 表示音视频保持原有编码
- • -b:指定比特率
- • -s:指定分辨率
- • -r:指定帧率
- • -t:指定转码时长
- • -ss:指定转码开始时间
- • -acodec:指定音频编码器
- • -vcodec:指定视频编码器
- • -ac:指定音频通道数
- • -ar:指定音频采样率
- • -ab:指定音频比特率
- • -vn 禁用视频
- • -an 禁用音频
- • -map:指定转码流
- • -metadata:指定输出文件元数据
- • -threads:指定线程数
- • -preset:指定编码速度
- • -crf:指定视频质量
- • -pix_fmt:指定像素格式
- • -filter_complex:指定复杂滤镜
- • -vf:指定简单滤镜
- • -hide_banner 所有FFmpeg的工具通常会显示版权声明,建置(build)选项和程式库(library)版本。这个选项可以用来隐藏这些讯息。
FFmpeg 常用命令
视频转码(指定分辨率)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast -s 1280x720 output.mp4
提取音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac
截取视频
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:10 -c copy output.mp4
裁剪画面
ffmpeg -i input.mp4 -filter:v "crop=1280:720:0:0" output.mp4
旋转画面
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
添加字幕
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output.mp4
合并多个视频到一个视频
list.txt 即为视频列表,每行一个视频文件名
ffmpeg -f concat -i list.txt -c copy output.mp4
合并视频音频
ffmpeg -i input.mp4 -i input.aac -c copy output.mp4
FFmpeg 命令行生成器
FFmpeg 涉及到很多参数,如果每次都要记住这些参数,那就太麻烦了,所以我们可以使用在线的命令行生成器,这样就可以很方便的生成命令行了。
FFmpeg Commander[3]
FFmpeg Commander
FFmpeg Command Generator[4]
FFmpeg Command Generator
ffmpeg - CMD Generator[5]
ffmpeg string creator[6]
FFmpeg GUI
命令行写起来很麻烦,所以我们可以使用 GUI 工具来代替命令行。这里介绍几个非常好用的 GUI 工具。
handbrake
HandBrake 是一个由志愿者构建的开源工具,用于将视频从几乎任何格式转换为精选的现代、广泛支持的编解码器。
HandBrake: Open Source Video Transcoder[7]
HandBrake
HandBrake Documentation — Supported source formats[8]
One of HandBrake’s strengths is its ability to open a wide variety of video formats. HandBrake uses FFmpeg under the hood and generally can open whatever FFmpeg will, in addition to disc-based formats like DVD and Blu-ray.
QuickCut
Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具,而不是像 Davinci Resolve、Adobe Premiere 那样专业的、复杂的庞然大物。Quick Cut 可以满足普通人一般的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕、自动剪辑……
Quick Cut 发行版 - http://Gitee.com[9]
Quick Cut
Shutter Encoder
我个比较喜欢的一个 GUI 工具,批量转换很方便。
Shutter Encoder encoding|converting video FREE PC|Mac[10]
Shutter Encoder
ShanaEncoder
ShanaEncoder Download - Shana[11]
QWinFF
Home | QWinFF[12]
ciano
robertsanseries/ciano: A multimedia file converter focused on simplicity.[13]
App Ciano - Robert San[14]
FFaudioConverter
Release FFaudioConverter 0.31.0 · Bleuzen/FFaudioConverter[15]
FFmpeg 教程
FFmpeg 教程
哔哩哔哩搜索UP主:音视频开发进阶
FFmpeg 电子书
文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
FFmpeg从入门到精通
FFmpeg从入门到精通
本书是一本介绍FFmpeg的实战技术指南,全书共10章,分为两个部分。部分(第1~7章)为FFmpeg的命令行使用篇,介绍了FFmpeg的基础组成部分、FFmpeg工具使用、FFmpeg的封装操作、FFmpeg的转码操作、FFmpeg的流媒体操作、FFmpeg的滤镜操作、FFmpeg的设备操作。第二部分(第8~10章)为FFmpeg的API使用篇,介绍了FFmpeg封装部分的API使用操作、FFmpeg编解码部分的API使用操作,FFmpeg滤镜部分的API使用操作,相关操作均以实例方式进行说明,包括新API及旧API的操作。
Understanding FFmpeg with source code FFMPEG Fundementals
Understanding FFmpeg with source code FFMPEG Fundementals
In this book, we will review the ffmpeg source code and learn about ffmpeg's capabilities. In the first part, we will consider ffmpeg in general terms. In the second part, we will discuss the ffmpeg methods related to video. In this section, we will also examine the ffmpeg filters closely.
In the third part, we will learn the details and methods of audio. In the fourth and fifth part, we will learn about Interlaced video and I-B-P frames. In the sixth part, we will learn what is codec and how does ffmpeg handle it. In the seventh part, we will try to explain how video encoding and audio encoding take place in ffmpeg, with sample codes. In the eighth part, we will try to explain how decoding works in fmmpeg and how to make a sample player with the help of SDL. In parts 9, 10 and 11, we will show the video and audio multiplexing methods. In the twelfth part, how to convert a video file into another format. We will learn all the transcoding steps. In the thirteenth part, we will learn all streaming protocols. In the last part, we will learn how to manage video and audio devices with ffmpeg.
FFMPEG - From Zero to Hero
FFMPEG - From Zero to Hero
If you ever wondered how the developers of YouTube or Vimeo cope with billions of video uploads or how Netflix processes its catalogue at scale or, again, if you want to discover how to create and develop your own video platform, you may want to know more about FFMPEG.
FFMPEG Quick Hacks
FFMPEG Quick Hacks