FFmpeg基本概念和用法

0. 前言

FFmpeg号称是音视频应用程序的瑞士军刀,广泛应用于视频网站和大型软件如Youtube和Chrome。它诞生于2004年,在LGPL、GPL协议下发布,任何人都可以在遵守协议的情况下自由使用。
FFmpeg基本概念和用法_第1张图片

FFmpeg主要由两大部分组成:
第一部分:
3个独立的可执行应用程序,实现不同功能,分别是:

  1. ffmpeg.exe:音视频转码器;
  2. ffplay.exe:音视频播放器;
  3. ffprobe.exe:多媒体码流分析器。

第二部分:
7个应用开发库,可以根据各自不同需求灵活使用这些库,开发自己的应用。

  1. libavcodec:音视频编码器和解码器;
  2. libavformat:各种多媒体容器格式的封装、解封工具;
  3. libavutil:多媒体应用常用的工具集,主要是为了简化开发。包含诸如字符串处理函数、随机数生成器、常用数据结构、数学函数、加密和多媒体相关函数等;
  4. libavdevice:通用的音视频采集和渲染框架,支持多种输入输出设备;
  5. libavfilter:通用的音视频过滤框架,包含多种过滤器;
  6. libswscale:高性能图像伸缩、色彩空间、像素格式转换;
  7. libswresample:高性能音频重采样,采样格式转换。

FFmpeg的下载和安装,可以查看官网文档

1. 基本概念

要把FFmpeg用好,需要对视音频处理有全局视野和核心知识储备,不至于走太多弯路。有必要先熟悉一些基本概念。

1.1 原始数字视频和音频

与模拟信号区分开,即用数字信号来表示视频和音频。
视频本质上是一帧帧的图像在连续播放,由于帧率(即一秒钟匀速呈现图像的张数,如25帧/秒)超过了人眼识别的速度,给人一种连续的感觉。音频也是同样道理,音频由一个个采样点组成(PCM),通常采样率(8000KHz)超过人耳能辨别的速度。

1.2 编码格式

原始音视频数据量巨大,在存储和传输中都成很大问题,于是人们发明了各种压缩算法来降低数据量,这些算法就是编码器和解码器。
常见的视频编码格式有:

H.264
H.265
VP8
VP9

常见的音频编码格式有:

AAC
MP3

以上这些编码格式都是有损的,意思是经过压缩后,原始信息的一部分丢失并无法复原了,但是好处是体积极大的降低了。
用FFmpeg查询所有支持的编码格式

ffmpeg -codecs

1.3 编码器/解码器

编码器、解码器分别是用于针对一种编码格式进行编码(压缩)和解码(解压缩)的,需要注意的是对同一种编码格式如H.264,可能存在多种编码器和解码器,如libx264包含了H.264编码器和解码器,而nvenc_h264只包含H.264编码器。

FFmpeg查询所有支持的编码器

ffmpeg -encoders

FFmpeg查询所有支持的解码器

ffmpeg -decoders

2. FFmpeg的使用

FFmpeg命令行很强大但也复杂,但最常用的并不复杂。

2.1 简单版FFmpeg使用

ffmpeg [全局参数] [输入文件参数] -i 输入文件 [输出文件参数] 输出文件
注:命令中用[ ]括起来的是可选项

例1:flv转mp4

ffmpeg -i demo.flv out.mp4

例2:将pcm转为mp3

ffmpeg -y -f s16le -ac 1 -ar 8000 -acodec pcm_s16le -i out.mp3
注:由于pcm文件不包含参数信息,需要通过[输入文件参数]来指定

例3: 查看文件信息

ffmpeg -i demo.flv

例4:转编码格式

ffmpeg -i demo.flv -c:v h264 -c:a aac out.mp4

例5:转文件容器格式

ffmpeg -i demo.flv -c copy out.avi

2.2 参数说明

参数 参数说明
-y 允许覆盖(全局参数)
-f s16le 指定容器格式为s16le
-ac 1 指定音频通道数为1
-ar 8000 指定音频采样率为8k
-acodec pcm_s16le 指定音频编码格式为pcm_s16le
-acodec pcm_s16le 指定音频编码格式为pcm_s16le
-c:v h264 指定视频编码格式为h264
-c:a aac 指定音频编码格式为aac
-c copy 编码格式保持不变

你可能感兴趣的:(ffmpeg)