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. \1. 解封装(Demuxing)
  2. \2. 解码(Decoding)
  3. \3. 编码(Encoding)
  4. \4. 封装(Muxing)

具体为6个步骤:

  1. \1. 读取输入源
  2. \2. 进行音视频的解封装
  3. \3. 解码每一帧音视频数据
  4. \4. 编码每一帧音视频数据
  5. \5. 进行音视频的重新封装
  6. \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

FFmpeg 快速上手:命令行详解、工具、教程、电子书相关推荐

  1. python的pytest模块:pytest命令行详解

    一.官方文档 How to invoke pytest - pytest documentationhttps://docs.pytest.org/en/latest/how-to/usage.htm ...

  2. GCC 命令行详解 -L -l

    我们用gcc编译程序时,常常会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数,下面做个记录: GCC 命令行详解 -L ...

  3. 7Z解压缩包软件命令行详解

    7Z命令行 7z.exe在CMD窗口的使用说明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za ...

  4. windows winrar 指令_【转】winrar命令行详解

    从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR  - - 命令:WinRAR 运行的字符组合代表功能 开关:切换操作指定类型,压缩强度,压缩文件类型,等等的定义. 压 ...

  5. WinZip命令行详解

    在WinZip安装包中没有包含命令行工具,但在其官方站点上有单独提供下载,所以如需要WinZip命令行工具就得去官方站点下载并单独安装,需要注意的是安装WinZip命令行工具前确保机子上已经安装有适当 ...

  6. FFmpeg最常用命令参数详解及应用实例

    FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式.多媒体传输协议以及音视频编解码器,提供了录制.转换以及流化音视频的完整解决方案. ffmpeg命令行参数解释 ...

  7. php cli 判断,php cli 命令行详解【转】

    CLI PHP 的优点 多年以来,我一直都在应用不确定的工程师职责定义.我个人认为,工程师就是使用工具来实现与该工具最初开发目的无关的功能.虽然这种想法并不总是正确,但当您认真考虑它时,将发现大多数创 ...

  8. 命令行详解下载高清视频

    使用youtubedr直接给出命令行 1.youtubedr info "视频地址" 2.youtubedr download -q 视频tag "视频地址" ...

  9. [转]GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名

    1.gcc包含的c/c++编译器 gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什 么意思:))一般c程序就用gcc编译,c++程序就用g++编 ...

最新文章

  1. python3.6.5安装教程-Centos7 安装Python3.6.5
  2. 归档程序错误。在释放之前仅限于内部连接
  3. Java_StringBuffer类
  4. 计算机无法安装手机数据线,连接电脑,详细教您手机数据线连接电脑没反应该怎么解决...
  5. istio-0.8 服务超时配置
  6. Redis 实用技术——消息发布和订阅
  7. Kubernetes三周年,这仅仅是伟大征途的开始
  8. oracle odbc配置
  9. mysql创建用并 grant_Mysql创建用户并授权
  10. 接口耗时优化与cpu飙高解决
  11. python span函数_如何使用python selenium单击span元素
  12. es 同步期间数据更新_在大流行期间成为数据科学家的感觉如何
  13. 微信小程序图片根据屏幕比例缩放
  14. 如何整店导出天猫店铺商品主图及详情图
  15. outlook2010 html签名,Outlook2010如何设置签名
  16. 谷歌硬件工程师年薪165万,苹果外籍员工222万,在大厂打工“香”吗?
  17. ZStack Cube:超融合3.0,场景化的一体机
  18. 回收站内被删除的照片如何快速恢复?
  19. linux系统下,Failing to install python-igraph
  20. 关于计算机的英语作文120词,以朋友为话题的英语作文120词

热门文章

  1. Android四大组件Service之AIDL详解
  2. 网易2018校招数据分析师笔试答案作答
  3. 数据分析真题日刷 | 网易2018校招数据分析师笔试卷
  4. 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1514378309187...
  5. 解密微信开放高级接口 企业如何应对
  6. bootstrap4和bootstrap3的区别
  7. 十大经典排序算法动图图解
  8. 10.24程序员节疑问:沈从文的编程功底应该很厉害吧?
  9. postman批量运行和参数化
  10. 《愤怒的小鸟》——大一下C语言程序课设