探索 FFmpeg Basics 音视频技术(19): 组件和项目

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 19 篇:FFmpeg  组件和项目。

—— 来自公众号“关键帧Keyframe”的分享

FFmpeg 项目由 4 个命令行工具和 9 个软件库组成,可供许多公司和软件项目使用。ffmpeg 工具的语法和用法在第 1 章中有相关介绍。

1、FFplay 介绍

FFplay 是一个简单的媒体播放器,能够播放 ffmpeg 工具可以解码的所有媒体格式,请参阅第 2 章显示可用的格式和其他列表。

FFmpeg 组件:ffplay

描述简单的媒体播放器,使用 FFmpeg 和 SDL 库,主要用于测试和开发。
语法ffplay [options] [input_file]
参数描述
options几乎所有可用于 ffmpeg 工具的选项都可以与 ffplay 一起使用。
input_file输入可以是常规文件、管道、网络流、抓取设备等。

在显示相同的输出之前,FFplay 在编码到文件之前非常有用。请参阅第 1 章的显示输出预览部分了解详细信息。例如,要使用 ffplay 在 lightorange 背景上显示各种 testsrc 视频源,可以使用以下命令:

ffplay -f lavfi -i testsrc -vf pad=400:300:(ow-iw)/2:(oh-ih)/2:orange
探索 FFmpeg Basics 音视频技术(19): 组件和项目

如果我们想从文件中观看视频并收听 mp3 格式的音频评论,可以使用以下命令:

ffplay -i lavfi "movie=document.avi[out0];amovie=comments.mp3[out1]"
  • 声明一下,书上写错了,至少在我电脑上这样执行是不行的。下面是我的测试命令:
ffplay -f lavfi "movie=/Users/test.mp4[out0];amovie=/Users/DYZDJ.mp3[out1]"
  • 执行结果就是播放视频文件的画面,但声音是我指定的 mp3 的声音。

如果 FFmpeg 被编译为 -enable-libiec61883选项,可以通过以下命令显示连接到计算机的 FireWire DV/HDV 设备的输入:

ffplay -f iec61883 -i auto

2、播放期间的键盘和鼠标控制

在播放过程中,ffplay 可以通过键盘和鼠标进行控制,具体如下表所示:

描述
q, ESC退出
f切换全屏
p, 空格键切换暂停
a音频通道
v视频通道
t可用的字幕
w在可用的显示模式选项中循环:视频、rdft、音频
向左箭头 / 向右箭头向后 / 向前拖动 10 秒
向下翻页 / 向上翻页向后 / 向前拖动 10 分钟
点击鼠标查找与宽度部分对应的文件中的百分比

与 MPlayer 一样,ffplay 也会通过 ESC 键退出,并通过空格键切换暂停。f 键用于切换全屏模式,但有时会在 Windows 计算机上中止,至少在旧版本中是这样。如果媒体文件包含多个视频流,可以使用 v 键循环播放视频流,音频流可以使用 t 键循环播放。按下右箭头键将视频快进 10 秒,PageUp 键将视频快进 10 分钟;箭头左键将视频快退 10 秒,PageDown 键将视频快退 10 分钟。鼠标点击事件提供了更灵活的时间搜索功能。我们可以通过点击播放器窗口的相应部分来移动到任何部分,例如点击中间将移动到媒体文件的中间。

3、FFplay 显示模式

当播放视频文件时,ffplay 默认显示视频,这是其 -showmode选项的默认值。其他值是 rdft(逆实数离散傅里叶变换)和 waves(来自滤波器显示波形的音频波)。在播放过程中,可以通过按 w 键在这些模式之间切换:

探索 FFmpeg Basics 音视频技术(19): 组件和项目

4、FFprobe 介绍

FFprobe 是一种从多媒体流中收集信息并以人机和机器可读的方式打印的实用程序。它可以用于检查多媒体流使用的容器格式以及其中每个媒体流的格式和类型。选项用于列出 FFprobe 支持的一些格式或设置显示哪些信息,并设置 FFprobe 如何显示它。FFprobe 的输出易于通过文本过滤器进行分析,并且由 -of(或 -print_format)选项指定的选定 writer 定义的表单的一个或多个部分组成。FFprobe 的使用示例在调试和测试章节中有介绍。

FFmpeg 组件:ffprobe

描述用于检测多媒体流中的各种数据以进行分析的命令行工具。它可以单独使用或与文本过滤器一起使用,以实现复杂的处理。
语法ffprobe [options] [input_file]
参数描述
options几乎所有 ffmpeg 工具可用的选项都可以使用。
input_file输入可以是常规文件、管道、网络流、抓取设备等。
-bitexact强制生成位精确输出,用于生成不依赖于特定构建的输出。
-count_frames统计每个流的帧数,并在相应的流部分进行报告。
-count_packets统计每个流的数据包数,并在相应的流部分进行报告。
-of w_name[=w_options]设置打印格式,其中 w_name 是写入器名称,w_options 是写入器选项。
-select_streams str_spec仅选择 str_spec 指定的流,可以是:a=音频,d=数据,s=字幕,t=附件,v=视频。
-show_data显示有效载荷数据,例如十六进制和 ASCII 转储。加上 -show_data,它将转储数据包的数据,再加上 -show_streams,它将转储编解码器的额外数据。
-show_error显示在探测输入时发现的错误信息。
-show_format显示输入媒体流的容器格式的信息。
-show_format_entry name与 -show_format 类似,但仅打印由容器格式信息指定的条目,而不是全部。
-show_frames显示输入媒体流中每个帧的信息。
-show_library_version显示与库版本相关的信息。
-show_packets显示输入媒体流中每个数据包的信息。
-show_private_data
-private
显示依赖于特定显示元素格式的数据。该选项默认启用,但在创建符合 XSD 的 XML 输出时可以禁用。
-show_streams显示输入媒体流中每个媒体流的信息。
-show_versions显示与程序和库版本相关的信息。这等同于设置了 -show_program_version 和 -show_library_version 选项。

5、FFserver 介绍

FFserver 是一个在 Linux 上运行的多媒体流媒体服务器。官方的 Windows 二进制文件还不能使用。

FFmpeg 组件:ffserver

描述提供音频和视频流媒体服务器的实用程序。它支持多个实时供稿、从文件流式传输以及在实时供稿上进行时间转换。如果在 ffserver.conf 配置文件中指定了足够的存储源存储,则可以在每个实时供稿中寻找过去的位置。FFserver 默认在 Linux 上以守护进程模式运行,这意味着它会将自身置于后台并从其控制台分离,除非它以调试模式启动或在配置文件中指定了 NoDaemon 选项。
语法ffserver [options]
参数描述
options几乎所有 ffmpeg 工具可用的选项都可以与 ffserver 一起使用。
-d启用调试模式,这将增加日志的冗余性,将日志消息定向到 stdout,并导致 ffserver 在前台运行,而不是作为守护进程。
-f configfile使用 configfile 而不是 /etc/ffserver.conf。
-n启用无守护进程模式,这将禁用各种部分的所有启动指令,因为 ffserver 将不会启动任何 ffmpeg 实例,您将不得不手动启动它们。

6、FFmpeg 软件库

6.1、libavcodec

Libavcodec 是一个用于解码和编码多媒体的编解码器库。它非常受欢迎,MPlayer 和 VLC 等多平台媒体播放器使用它来播放许多音频和视频格式。它能够解码,并且在某些情况下还可以编码一些专有格式,包括没有官方规范的格式。标准 libavcodec 框架中的这些编解码器提供了优于使用原始编解码器的优势,主要是增加了可移植性,有时还具有更好的性能,因为 libavcodec 包含一个标准库,用于像 DCT 和色彩空间转换这样的常见构建块的精确优化实现。

libavcodec 中已实现的编解码器列表位于“显示帮助和功能”一章中。

6.2、libavdevice

Libavdevice 是一个特殊的设备复用 / 解复用库,是 libavformat 库的补充。它提供了各种平台特定的复用器和解复用器,例如用于抓取设备、音频采集和播放。因此,libavdevice 中的(解复用)复用是 AVFMT_NOFILE类型(它们使用自己的 I/O 函数)。传递给 avformat_open_input()的文件名通常不是指实际存在的文件,而是具有特殊的设备特定含义,例如对于 x11grab设备,它是显示名称。

可用设备列在第 2 章“可用媒体格式”部分。

6.3、libavfilter

Libavfilter 是一个过滤器库,为 FFmpeg 和客户端库或应用程序提供媒体过滤层。它简化了 FFmpeg 工具的设计并增强了它们的灵活性。

探索 FFmpeg Basics 音视频技术(19): 组件和项目

Libavfilter 包含格式协商的高级机制,并最小化像素 / 格式转换。过滤器处理缓冲区,其中缓冲区可以包含视频帧或音频源。每个缓冲区的属性 —— 帧类型、时间戳、文件位置等可以在处理过程中被访问和处理。可用过滤器的列表在第 2 章中。

6.4、libavformat

Libavformat 是一个包含音频 / 视频容器格式的解复用和复用的库。在实现的复用器中有 crc、framecrc、ico、md5、MOV/MP4/ISMV、mpegts、matroska 等。

在第 2 章中列出了可以使用的媒体格式。

6.5、libavutil

Libavutil 是一个包含用于 FFmpeg 不同部分的例行程序的辅助库,例如:

  • av_get_token函数在 libavutil/avstring.h文件中,可用于解析或转义。
  • libavutil/eval.h文件包含用于计算算术表达式的接口。
  • libavutil/samplefmt.h文件包含可用音频样本格式的定义。
  • libavutil/audioconvert.h文件包含音频通道布局的规范。

6.6、libpostproc

Libpostproc 是一个包含视频后处理例行程序的库。

6.7、libswresample

Libswresample 库能够处理不同的采样格式、采样率以及不同数量的通道和不同的通道布局。它支持直接转换样品格式和一次打包 / 平面。

6.8、libswscale

Libswscale 是一个包含视频图像缩放例行程序的库,并提供快速模块化缩放界面。

7、项目使用 FFmpeg 组件

使用各种 FFmpeg 工具和库的项目数量很大,其中许多项目列在 http://ffmpeg.org/projects.html 上。

8、谷歌 Chrome 浏览器中的 HTML5 支持

可能是使用 FFmpeg 库最常用的应用程序是 Google Chrome 网络浏览器,它是最流行的网络浏览器之一。2009 年,FFmpeg 库被纳入 Chrome,以支持 HTML5 音频和视频元素。其他使用 FFmpeg 的浏览器还包括 Chromium 和 Orygin 网络浏览器。

9、在 YouTube 和 Facebook 上播放视频

最大的视频分享网站 YouTube 和最大的社交网络 Facebook 是全球最大的使用 ffmpeg 的项目,在视频处理方面,每周有几百万个视频。

10、多媒体框架利用 FFmpeg

下表描述了使用 FFmpeg 库的多媒体框架:

名称网站描述
ffdshowffdshow-tryout.sourceforge.net媒体编码器和解码器,实现为 DirectShow 和 VFW 过滤器,仅限 Windows。
GStreamergstreamer.freedesktop.org用于构建媒体处理组件图的库。它支持的应用范围从简单的 Ogg/Vorbis 回放、音频 / 视频流到复杂的音频(混合)和视频(非线性编辑)处理。
MLTwww.mltframework.orgMLT 是一个开源的多媒体框架,为电视广播设计和开发。它为广播公司、视频编辑、媒体播放器、转码器、网络流媒体和其他类型的应用提供了一个工具箱。
OpenMAXwww.khronos.org/openmaxOpenMAX 是一个免版税的、跨平台的 API,提供了全面的流媒体编码和应用程序的可移植性。它允许在多个操作系统和硅平台上开发、集成和编程加速的多媒体组件。

11、视频编辑器

  • Avidemux
  • Blender (3D)
  • Cinelerra
  • Kdenlive
  • Kino

12、音频编辑器

  • Audacity
  • Sox

13、使用 FFmpeg 的媒体播放器

下表描述了使用 FFmpeg 库的媒体播放器:

名称网站描述
Audaciousaudacious-media-player.orgAudacious 是一个开源的音频播放器。拖放文件夹和个人歌曲文件,在您的整个音乐库中搜索艺术家和专辑,或者创建和编辑您自己的自定义播放列表。从网上听 CD 或流媒体音乐。用图形化的均衡器或实验来调整声音。享受现代的 GTK 主题界面,或者用 Winamp 经典皮肤改变一些东西。使用大胆的插件来为您的音乐获取歌词,在早上设置一个闹钟等。
Gnashwww.gnashdev.orgGnash 是 GNU SWF 电影播放器,可以在桌面或嵌入式设备上独立运行,也可以作为多个浏览器的插件。
KMPlayerhttp://kmplayer.kde.orgKDE 的视频播放器插件和基本的 MPlayer/Xine/ffmpeg/ffserver/VDR 前端。KMPlayer KPart 插件用于 Konqueror,模仿 QuickTime、MS Media Player 和 RealPlayer 浏览器插件。
MPlayerwww.mplayerhq.hu在许多系统上运行的电影播放器。它播放 MPEG/VOB、AVI、Ogg/OGM、VIVO、ASF/WMA/WMV、QT/MOV/MP4、RealMedia、Matroska、NUT、NuppelVideo、FLI、YUV4MPEG、FILM、RoQ、PVA 文件,由许多本机、XAnim 和 Win32 DLL 编解码器支持。您可以观看 VideoCD、SVCD、DVD、3ivx、DivX 3/4/5、WMV,甚至 H.264 电影。
Rockboxwww.rockbox.orgRockbox 是为数字音乐播放器提供的免费更换固件。它在许多播放器上运行。
VLCwww.videolan.org/vlcVLC 是一个免费开源的跨平台多媒体播放器和框架,它播放大多数多媒体文件以及 DVD、音频 CD、VCD 和各种流媒体协议。
V-Playervchannel.sourceforge.net/player.html基于 ffmpeg 库的跨平台媒体播放器。目前,V 播放器支持 Windows、Linux 和 OS X 平台。用户界面是用 C++ 编写的,所有平台上都有 Qt 4。
Xinewww.xine-project.org免费的多媒体播放器。它播放 CD、DVD 和 VCD。它还可以解码本地磁盘驱动器上的 AVI、MOV、WMV 和 MP3 等多媒体文件,并在 Internet 上显示多媒体流。

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(19): 组件和项目

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论