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 最被人熟知的还有它创建的 “耻辱柱”(已于2014年下线,不过其 网页源码[1] 仍保留这些名单)。因为 FFmpeg 属于自由软件,采用了 LGPL 和 GPL 许可证(具体依据所选的组件),所以任何人都可以在遵守协议的情况下自由使用。不过很多播放软件使用了 FFmpeg 的代码后并没有遵守开源协议公开任何源代码。FFmpeg 社区便将违反开源协议的公司、组织和个人网站贴在 “耻辱柱”。韩国播放软件 KMPlayer 以及国产播放器暴风影音、QQ 影音都曾上过榜。
Windows 平台上 FFmpeg 安装比较简单,只需要下载 FFmpeg 的压缩包,解压后将 bin 目录添加到环境变量即可。
下载地址:Download FFmpeg[2]
Linux 平台上 FFmpeg 安装比较简单,只需要使用包管理器安装即可。
Ubuntu/Debian:
sudo apt install ffmpeg
CentOS/RHEL:
sudo yum install ffmpeg
Arch Linux:
sudo pacman -S ffmpeg
brew install ffmpeg
ffmpeg的主要工作流程相对比较简单,具体如下。
具体为6个步骤:
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 -h可以看到ffmpeg常见的命令大概分为6个部分,具体如下:
常用参数如下:
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 Commander[3]
FFmpeg Commander
FFmpeg Command Generator[4]
FFmpeg Command Generator
ffmpeg - CMD Generator[5]
ffmpeg string creator[6]
命令行写起来很麻烦,所以我们可以使用 GUI 工具来代替命令行。这里介绍几个非常好用的 GUI 工具。
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.
Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具,而不是像 Davinci Resolve、Adobe Premiere 那样专业的、复杂的庞然大物。Quick Cut 可以满足普通人一般的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕、自动剪辑……
Quick Cut 发行版 - http://Gitee.com[9]
Quick Cut
我个比较喜欢的一个 GUI 工具,批量转换很方便。
Shutter Encoder encoding|converting video FREE PC|Mac[10]
Shutter Encoder
ShanaEncoder Download - Shana[11]
Home | QWinFF[12]
robertsanseries/ciano: A multimedia file converter focused on simplicity.[13]
App Ciano - Robert San[14]
Release FFaudioConverter 0.31.0 · Bleuzen/FFaudioConverter[15]
哔哩哔哩搜索UP主:音视频开发进阶
文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
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
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
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