FFmpeg 结构与框架的理解

FFmpeg 结构与框架的理解,第1张

FFmpeg的主体框架

编译会生成4个可执行文件,和8个静态库。

一、可执行文件

ffmpeg : 转码、推流、Dump媒体文件

ffplay : 播放媒体文件,拉流

ffprobe :获取媒体文件信息

ffserver :简单流媒体服务器(一般用的比较少)

二、静态库

8个静态库实际是FFmpeg的8模块,包括如下:

libavutil :核心工具库,该模块是最基本的模块之一,其它这么多模块会依赖此模块做一些音视频处理操作。

libavformat : 文件格式和协议库,该模块是最重要的模块之一,封装了Protocol层、Demuxer层、muxer层,使用协议和格式对于开发者是透明的。

libavcodec: 编解码库,该模块也是最重要模块之一,封装了Codec层,但是有一些Codec是具备自己的License的,FFmpeg是不会默认添加,例如libx264,FDK-AAC, lame等库,但FFmpeg就像一个平台一样,可以将其它的第三方的Codec以插件的方式添加进来,然后为开发者提供统一的接口。

libswrsample: 音频重采样库,可以对数字音频进行声道数、数据格式、采样率等多种基本信息的转换。

libswscale: 视频压缩和格式转换库,可以进行视频分辨率修改、YUV格式数据与RGB格式数据互换。

libavdevice: 输入输出设备库,编译ffplay就需要确保该模块是打开的,时时也需要libSDL预先编译,因为该设备播放声音和播放视频使用的都是libSDL库。

libavfilter :音视频滤镜库,该模块包含了音频特效和视频特效的处理,在使用FFmpeg的API进行编解码的过程中,直接使用该模块为音视频数据做特效物理非常方便同时也非常高效的一种方式。

libpostproc: 音视频后期处理库,当使用libavfilter的时候需要打开该模块开关,因为Filter中会使用该库中的一些基础函数。

写了一大堆,最后用一张思维导图来总结体现吧,简单明了,方便大脑记忆存储:

如果你想推流一个文件夹里的所有视频,你可以使用通配符(wildcard)来匹配文件夹中的所有视频。例如,你可以使用 -i /path/to/folder/*.mp4 来匹配文件夹中所有的 MP4 视频文件。

如果你想推流多个视频,你可以使用 -i 参数多次指定视频文件的路径。例如,你可以使用 ffmpeg -re -i video1.mp4 -i video2.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home 来推流 video1.mp4 和 video2.mp4 这两个视频。

你也可以使用 -f concat 参数来将多个视频文件合并成一个输入源,然后使用 -i 参数指定合并后的视频文件。这样,你就可以使用单个命令推流多个视频。例如:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

ffmpeg -re -i output.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home

其中,list.txt 是一个文本文件,其中包含了要合并的视频文件的列表。每一行的格式为 file '/path/to/video.mp4'。例如:

file '/path/to/video1.mp4'

file '/path/to/video2.mp4'

file '/path/to/video3.mp4'

这样,你就可以使用两条命令推流多个视频了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/282132.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存