#yyds干货盘点#ffmpeg
Posted 窗边的小豆豆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#ffmpeg相关的知识,希望对你有一定的参考价值。
每个输出的转码过程可以通过下图来描述:ffmpeg
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|
ffmpeg
调用 libavformat 库(包含解复用器)来读取输入文件并从中获取包含编码数据的数据包。当存在多个输入文件时,尝试通过跟踪任何活动输入流上的最低时间戳来使它们保持同步。ffmpeg
然后,编码的数据包将传递到解码器(除非为流选择了流复制,否则有关说明,请参阅进一步)。解码器生成未压缩的帧(原始视频/PCM 音频/...),可以通过过滤进一步处理(请参阅下一节)。过滤后,帧被传递到编码器,编码器对帧进行编码并输出编码的数据包。最后,这些数据包被传递到多路复用器,后者将编码的数据包写入输出文件。
1. 过滤
在编码之前,可以使用 libavfilter 库中的筛选器处理原始音频和视频帧。几个链接的筛选器形成一个筛选器图。 区分两种类型的滤光片:简单和复杂。
1.1 简单滤镜
简单滤光片是那些只有一个输入和输出的滤镜,两者都是同一类型的滤镜。在上图中,只需在解码和编码之间插入一个附加步骤即可表示它们:
_________ ______________
| | | |
| decoded | | encoded data |
| frames |\\ _ | packets |
|_________| \\ /||______________|
\\ __________ /
simple _\\|| | / encoder
filtergraph | filtered |/
| frames |
|__________|
简单滤镜配置了每个流选项(分别带有视频和音频的别名)。例如,视频的简单滤镜可以如下所示:-filter-vf-af
_______ _____________ _______ ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|
请注意,某些滤镜会更改框架属性,但不会更改框架内容。例如,上面示例中的筛选器更改帧数,但不接触帧内容。另一个示例是筛选器,它仅设置时间戳,否则将帧原封不动地传递。
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|
1.2 复杂滤波片
复杂的滤波片是那些不能简单地描述为应用于一个流的线性处理链的滤波片。例如,当图形具有多个输入和/或输出时,或者当输出流类型与输入不同时,就是这种情况。可以用下图表示它们:
_________
| |
| input 0 |\\ __________
|_________| \\ | |
\\ _________ /| output 0 |
\\ | | / |__________|
_________ \\| complex | /
| | | |/
| input 1 |---->| filter |\\
|_________| | | \\ __________
/| graph | \\ | |
/ | | \\| output 1 |
_________ / |_________| |__________|
| | /
| input 2 |/
|_________|
复杂的滤光片配置了该选项。请注意,此选项是全局的,因为复杂的滤镜就其性质而言,不能与单个流或文件明确关联。-filter_complex
该选项等效于 。-lavfi-filter_complex
复杂滤光片的一个简单示例是滤波器,它具有两个视频输入和一个视频输出,其中包含一个叠加在另一个视频之上的视频。它的音频对应物是滤波器。
以上是关于#yyds干货盘点#ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# FFmpeg[5] - 将视频文件转码成MP4格式(FFmpeg转封装2)