《ffmpeg basics》中文版 -- 19.FFmpeg 的组件和工程

19.FFmpeg 的组件和工程

​ FFmpeg 工程由 4 个命令行工具和 9 个软件库组成,现在被广泛使用于多种软件及公司。我们在第一章描述了 ffmpeg 工具的语法和用例。

FFplay 介绍

​ FFplay 是一个简单的媒体播放器,它可以播放 ffmpeg 工具可解码的所有格式,如果想查看可用的所有文件格式或者其他信息,请查阅第二章节。

在这里插入图片描述

​ FFplay 可用于输出预览,这样就可以避免将输出保存成文件然后再查看的中间步骤,简洁了不少,详情请查看第一章节的《输出预览(Displaying output preview)》小节。例如,想要再一个淡橘色背景上显示 testsrc 视频源,命令如下:

ffmpeg -f lavfi -i testsrc -vf pad=400:300:(ow-iw)/2:(oh-ih)/2:orange

在这里插入图片描述

​ 如果我们观看 document.avi 视频的画面,但想要收听 comments.mp3 中的音频,可以使用命令:

ffplay -i lavfi "movie=document.avi[out0];amovie=comments.mp3[out1]"

​ 如果 FFmpeg 在编译时使用了 --enable-libiec61883 选项,那么电脑中来自火线 DV/HDV 设备的输入,可以用以下命令查看:

ffplay -f iec61883 -i auto
播放期间按键和鼠标控制

​ 当 ffplay 播放媒体时,它可以被特定的按键和鼠标操作控制,细节如下:

在这里插入图片描述

​ 和 MPlayer 类似,ffplay 使用 ESC 按键推出程序,使用空格键暂停和恢复播放。f 键用于全屏播放,但在一些旧版本的 ffplay 中,可能会导致 Windows 电脑整个卡死。如果媒体文件包含多种视频流,那么可以使用 v 键来循环切换视频,使用 a 键来循环切换音频,使用 t 键来循环切换字幕。按下向右的箭头可快进视频,每次 10 秒,按下 PageUp 按键则以 10 分钟来快进;向左箭头 和 pageDown 则用于快退。而鼠标点击播放进度条则可以跳转视频到所点击的时间点,这种方式更加自由和便捷。

FFplay 显示模式

​ FFplay 播放视频文件时,可以选择其播放模式,它由 -showmode 选项指定,默认情况下,它取值为 video,但还可以取其他两个值:rdft(反实离散傅里叶变换:inverse Real Discrete Fourier Transform)和 waves(类似来自 showwaves filter的音频波浪)。我们可以通过 w 键来循环切换 ffplay 的显示模式。

在这里插入图片描述

FFprobe 介绍

​ ffprobe是一个非常实用的工具,它可以从多媒体流中收集信息,然后将它们以人类可读以及机器可读的形式打印出来。它可用于检查多媒体流使用的容器格式,以及多媒体中的每个流的格式和类型。ffprobe 中的选项可用于列出ffprobe 所支持的格式,或者设置要显示那些信息,以及 ffprobe 如何显示这些信息。ffprobe 的输出可以很容易被一个文本过滤器解析,它的格式由被 -of(或者 -print_format)选项指定的一个或多个形式组成。ffprobe 在 《调试和测试(Debugging and Tests)》一章中有相关用例。

在这里插入图片描述

FFserver 介绍

​ ffserver 是一个可运行于 Linux 的多媒体流服务器,现阶段尚不支持 Windows。

在这里插入图片描述

FFmpeg 软件库

libavcodec

​ libavcodec 是一个用于多媒体解码和编码的编解码器库。它非常受欢迎,使用广泛,很多支持多平台的媒体播放器,如 MPlayer 和 VLC ,就是使用 libavcodec 来播放大部分音频和视频的。它可以用于格式解码,在某些情况下也可以编码一些专有格式,包括一些未经官方规范的格式。在标准 libavcodec 框架中提供的编解码器要比使用原生编解码器更有优势,主要在于其增加了可移植性,有时其性能也更好,这是因为 libavcodec 包含了一个常见构建块的标准库,包含了如 DCT 和 颜色空间转换 等特性,它是经过精确优化实现的。
​ 如何显示 libavcodec 中实现的编解码器列表,详情在《显示帮助和特性》这一章中。

libavdevice

​ libavdevice 是一个用于特殊设备的封装和解封装(muxing/demuxing)库,是对 libavformat 库的一个补充。它提供各种用于特定平台的 muxer 和 demuxer ,例如可用于用于抓取设备、音频捕获和回放的 muxer 和 demuxer 。因此,libavdevice 中的 (de)muxer 属于 AVFMT_NOFILE 类型(它们使用自己的I/O函数)。传递给avformat_open_input() 的文件名通常并不指向一个实际存在的文件,但有一些特定设备的特殊含义,例如对于x11grab设备,它是显示名称。
​ 如何显示所有的可用设备,详情在《显示帮助和特性》这一章中。

libavfilter

​ libavfilter 库是一个过滤器相关的库,它为 FFmpeg,第三方库或者应用提供了媒体过滤层。它简化了 FFmpeg 的设计,使得其更加自由。

在这里插入图片描述

​ libavfilter 包含格式协商,最小像素/格式转化的高级机制。filter 用于处理缓冲区,其中缓冲区可以包含视频帧或者音频源。每个缓冲区的属性,如帧类型,时间戳,文件位置等,在 filter 处理过程中都可以获取和处理。

​ 在第二章中列出了可用的 filter。

libavformat

​ libavformat是一个包含了相关音频视频容器格式的 muxer 和 demuxer 的库。已实现的 muxer 有 crc,framecrc,ico,md5,MOV/MP4/ISMV,mpegts,matroska等等。

​ 在第二章中列出了可用的 format 。

libavutil

​ libavutil 是一个辅助库,包含了 FFmpeg 不同部分需要的常规功能,例如:

  • libavutil/avstring.h 中的 av_get_token 函数可用于解析引用字符和转移字符
  • libavutil/eval.h 文件中包含了计算数学表达式的接口
  • libavutil/samplefmt.h 文件包含了可用音频采用格式的定义
  • libavtuil/audioconvert.h 文件包含了音频通道布局的规范说明
libpostproc

​ libpostproc 是包含了视频后加工任务的库。

libswresample

​ libswresample 是一个可以处理不同采样格式,采样率,不同通道数量以及布局的库。它直接支持转化采样格式,and packed/planar in a single pass.

libswscale

​ libswscale 是一个包含视频图片缩放功能的库,提供了一个快速且模块化的缩放接口。

使用了 FFmpeg 组件的工程

​ 使用了 FFmpeg 工具和库的工程非常多,它们大多数都被列在以下网页:http://ffmpge.org/projects.html

Google 浏览器中的 HTML5 支持

​ 或许使用 FFmpeg 库的工程中最有名的就是 Google 浏览器了,它是世界上最受欢迎的浏览器之一。在 2009 年,Google 浏览器引入了 FFmpeg 库以便于对 HTML5 中的音频和视频做支持。其他使用了 FFmpeg 库的浏览器有 Chromiunm 和 Orygin 浏览器。

YouTube 和 Facebook 中的视频处理

​ 世界上最大的视频交流网站 YouTube 和最大的网络交流平台 Facebook 都使用了 FFmpeg 来处理视频,它们每周需要处理数百万的视频量。

使用了 FFmpeg 的多媒体框架

​ 使用了 FFmpeg 的多媒体框架如下:

在这里插入图片描述

视频编辑器
  • Avidemux
  • Blender(3D)
  • Cinelerra
  • Kdenlive
  • Kino
音频编辑器
  • Audacity
  • Sox
使用了 FFmpeg 的媒体播放器

​ 使用了 FFmpeg 的媒体播放器如下:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值