[Feelings & Sharing] 多媒体架构FFmpeg和GStreamer简介(和一些最基础的命令)
Tofloor
poster avatar
enforcee
deepin
2023-04-30 04:01
Author

FFmpeg是非常知名的程序员Fabrice Bellard在2000年发起的一个多媒体项目,他是一个视频、音频的编解码器等各种组件的结合,用于处理各种多媒体文件格式的播放、录制、转码。由于其对多种多媒体格式的支持能力,让开发者制作各种多媒体应用程序容易了很多。经过多年的发展,可以说几乎所有流行的网页浏览器、视频播放器、多媒体处理工具都不同程度上采用了FFmpeg。2011年FFmpeg的开发者出现内部矛盾和权利斗争,一些开发者分道扬镳,重新成立了libav项目并分别维护两套代码(libav本身是FFmpeg内部使用的一个名称,有点像firefox里面的chrome,抢注商标的感觉)。libav项目曾有一段时间比FFmpeg的进度更快,但是由于两者师出同门,FFmpeg只需要把libav的改进融合回FFmpeg就能追上进度。由于FFmpeg的维护质量更高,FFmpeg的发展最终是胜过了libav,而后者也已经在2018年黯然退场(甚至都找不到一篇新闻报道)。如果现在再谈起FFmpeg和libav都是指FFmpeg一个项目。

GStreamer的初版是2001年发布的(作者据说是Wim Taymans,他的另一个项目是pipewire),gstreamer的功能和ffmpeg类似,不过其api的设计和ffmpeg是不同的,GStreamer更偏向模块化,改装比较方便(FFmpeg可能要重新编译)。GStreamer的应用不如FFmpeg广泛,而且GStreamer本身也用FFmpeg作为插件(gst-libav)才能支持现代的众多编码。

FFmpeg和GStreamer不仅用于开发,也可以直接使用命令调用。

FFmpeg提供了三个命令:ffmpeg、ffplay、ffprobe,简单用法如下:

查看一个多媒体文件的信息:ffprobe 文件名

播放一个多媒体文件:ffplay 文件名

转换文件格式:ffmpeg -i 输入文件名 输出文件名(注明输出文件名的后缀,ffmpeg会自动识别格式)

GStreamer的命令都以gst开头:

查看一个多媒体文件的信息:gst-discoverer-1.0 文件名

播放一个多媒体文件:gst-play-1.0 文件名

转换文件格式:gst-transcoder-1.0 输入文件名 输出文件名(也会自动识别格式)

注:以上的命令中文件名也可以换成URI

如果想用命令实现一些比较复杂的操作,可以在ffmpeg命令中添加选项(常用命令的坛友应该都很熟悉了,可以用 ffmpeg --help查看用法和可用选项,有些选项的位置不是任意的)。而GStreamer不仅可以采用上述的各种简化命令,也可以使用采用管道式连接各种插件的gst-launch-1.0,可以将其看作是用文本写成的各个节点的连接图,感叹号!是连接两个插件,等号表达式可以进行赋值,起名后的节点可以用名称后面加点号.来再次使用。可以用gst-inspect-1.0查看插件的列表和每个插件的信息,用gst-discoverer-1.0查看文件的编码用来确定使用什么插件。比如播放一个视频大概是这样的结构:gst-launch-1.0 filesrc location=文件位置 ! 解复用器 name=名字 ! queue ! 视频解码器 ! videoconvert ! 视频信宿 名字. ! queue ! 音频解码器 ! audioconvert ! audioresample ! 音频信宿。对FFmpeg或者GStreamer感兴趣的可以参考各自的官方文档和网络资料。

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-04-30 04:16
#1

like

Reply View the author
ljq790615
deepin
2023-04-30 04:30
#2

技术贴

Reply View the author