写在前面
如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。
正文
FFmpeg项目由4个命令行工具和9个软件库组成,可供许多公司和软件项目使用。 ffmpeg工具的语法和用法在第一章有相关介绍。
FFplay介绍
FFplay是一个简单的媒体播放器,能够播放ffmpeg工具可以解码的所有媒体格式,请参阅第二章显示可用的格式和其他列表。
FFmpeg组件:ffplay
描述 | 简单的媒体播放器,使用FFmpeg和SDL库,它主要用于测试和开发 |
---|---|
语法 | ffplay [options] [input_file] |
参数描述 | |
options | 几乎所有可用于ffmpeg工具的选项都可以与ffplay一起使用 |
input_file | 输入可以是常规文件,管道,网络流,抓取设备等 |
在显示相同的输出之前,FFplay在编码到文件之前非常有用,请参阅第一章的显示输出预览部分了解详细信息。 例如,要使用ffplay在lightorange背景上显示各种testsrc视频源,我们可以使用以下命令:
ffplay -f lavfi -i testsrc -vf pad=400:300:(ow-iw)/2:(oh-ih)/2:orange
我的测试命令:
ffplay -f lavfi -i testsrc -vf pad=400:300:\(ow-iw\)/2:\(oh-ih\)/2:orange
- 显示的效果:
如果我们想从文件文档中观看视频。从文件评论中收听mp3格式的音频,我们可以使用以下命令:
ffplay -i lavfi "movie=document.avi[out0];amovie=comments.mp3[out1]
-
声明一下,书上写错了,至少在我电脑上这样执行是不行的,下面是我的测试命令:
ffplay -f lavfi "movie=/Users/zhangfangtao/Desktop/test.mp4[out0];amovie=/Users/zhangfangtao/Desktop/DYZDJ.mp3[out1]"
执行结果就是播放视频里面的画面,然而声音是我指定的mp3的声音。
如果FFmpeg被编译为-enable-libiec61883
选项,连接到计算机的FireWire DV/HDV设备的输入可以通过命令显示:
ffplay -f iec61883 -i auto
- 我电脑上测试报错。也不知道哪儿可以用得着。。。
重放期间的键和鼠标控制
在播放过程中,ffplay可以用键和鼠标控制,细节在下面这个表格里面:
key | 描述 |
---|---|
q, ESC | 退出 |
f | 切换全屏 |
p, Spacebar | 切换暂停 |
a | 音频通道 |
v | 视频通道 |
t | 可用的字幕 |
w | 在可用的显示模式选项中循环:视频,rdft,音频 |
向左的箭头 /向右的箭头 | 向后/向前拖动10秒钟 |
向下翻页/ 向上翻页 | 向后/向前拖动10分钟 |
点击鼠标 | 查找与宽度部分对应的文件中的百分比 |
就像MPlayer一样,ffplay也会退出ESC键,并用空格键切换暂停。 f键切换全屏模式,但有时它会中止Windows计算机,至少是在旧版本会这样。 如果媒体文件包含多个视频流,则可以使用v键循环播放,音频流可以使用t键循环播放一个键和字幕流。 按下右箭头键将视频快进10秒,PageUp键视频快进10分钟; 箭头左键视频快退10秒,pageDown键退10分钟。 鼠标点击事件提供了功能更灵活的时间搜索,我们可以通过点击相应的播放器窗口部分移动到任何部分,例如点击中心将移动到媒体文件的中间。
FFplay显示模式
当播放视频文件时,ffplay显示视频,它是其-showmode
选项的默认值,其他值是rdft
(逆实数离散傅立叶变换)和waves
(来自滤波器显示波的音频波)。 按w键可在播放过程中切换这些模式:
我的测试结果:
FFprobe介绍
ffprobe是一种从多媒体流中收集信息并以人机和机器可读方式打印的实用程序。 它可用于检查多媒体流使用的容器的格式以及其中每个媒体流的格式和类型。 选项用于列出ffprobe支持的一些格式或设置显示哪些信息,并设置ffprobe如何显示它。 其输出易于通过文本过滤器进行分析,并且由-of
(或-print_format
)选项指定的选定writer定义的表单的一个或多个部分组成。 ffprobe使用的例子在调试和测试章节中。
FFmpeg组件:ffprobe
描述 | 命令行工具,用于检测多媒体流中的各种数据以进行分析。 它可以单独使用或与文本过滤器一起使用,以获得复杂的处理 |
---|---|
语法 | ffprobe [options] [input_file] |
参数描述 | |
options | 几乎所有的ffmpeg工具可用的选项都可以使用ffprobe |
input_file | 输入可以是常规文件、管道、网络流、抓取设备等 |
附加的ffprobe选项 | |
-bitexact | force bit精确输出,用于产生不依赖于特定构建的输出 |
-count_frames | 每个流的帧数,并在相应的流部分报告 |
-count_packets | 每个流的数据包数,并以相应的流部分方式报告设置打印格式,w_name是写入器名称,w_options是写入器选项 |
-of w_name[=w_options] | 设置打印格式,w_name是写入器名称,w_options是写入器选项 |
-select_streams str_spec | 只选择str_spec指定的流,可以是下一个字母:a=audio, d=data, s=subtitle, t=attachment, v=video |
-show_data | 显示有效负载数据,如hex和ASCII转储,加上- show_数据包,它转储数据包的数据,再加上-show_streams,它转储codec extradata |
-show_error | 在探测输入时显示有关发现错误的信息 |
-show_format | 显示有关输入媒体流的容器格式的信息 |
-show_format_entry name | 像-show_format,但只打印由容器格式信息指定的条目,而不是全部 |
-show_frames | 显示输入媒体流中包含的每个框架的信息 |
-show_library_version | 显示与库版本相关的信息 |
-show_packets | 输入媒体流中包含的每个数据包的信息如何 |
-show_private_data -private |
显示数据依赖于特定显示元素的格式,选项是默认启用的,但是可以设置为0,例如在创建符合xsd的XML输出时 |
-show_streams | 显示输入媒体流中包含的每个媒体流的信息 |
-show_versions | 显示与程序和库版本相关的信息,这相当于设置了-show_program_version和-show_library_version选项 |
FFserver介绍
ffserver是一个在Linux上运行的多媒体流媒体服务器,官方的Windows二进制文件还不能使用
FFmpeg组件:ffserver
描述 | 为音频和视频提供流媒体服务器的实用程序。 它支持多个实时供稿,从文件流式传输并在实时供稿上进行时间转换。 如果在ffserver.conf配置文件中指定了足够的存储源存储,则可以在每个实时供稿中寻找过去的位置。 ffserver默认在守护进程模式下在Linux上运行,这意味着它将自身置于后台并从其控制台分离,除非它以调试模式启动或在配置文件中指定了NoDaemon选项。 |
---|---|
语法 | ffserver [options] |
参数的描述 | |
options | 几乎所有的ffmpeg工具可用的选项都可以与ffserver一起使用 |
额外的ffserver选项 | |
-d | 启用调试模式,这会增加日志的冗余性,将日志消息定向到stdout,并导致ffserver在前台运行,而不是作为一个守护进程 |
-f configfile | 使用configfile而不是/etc/ffserver.conf |
-n | 启用无启动模式,这将禁用各种部分的所有启动指令,因为ffserver将不会启动任何ffmpeg实例,您将不得不手动启动它们 |
FFmpeg软件库
libavcodec
libavcodec是一个用于解码和编码多媒体的编解码器库,它非常受欢迎,而MPlayer和VLC等多平台媒体播放器则用它来播放许多音频和视频格式。 它能够解码,并且在某些情况下还可以编码一些专有格式,包括没有官方规范的格式。 标准libavcodec框架中的这些编解码器提供了优于使用原始编解码器的优势,主要是增加了可移植性,有时还具有更好的性能,因为libavcodec包含一个标准库,用于像DCT和色彩空间转换这样的常见构建块的精确优化实现。
libavcodec中已实现的编解码器列表位于“显示帮助和功能”一章中。
libavdevice
libavdevice是一个特殊的设备复用/解复用库,是libavformat库的补充。 它提供了各种平台特定的复用器和解复用器,例如用于抓取设备,音频采集和播放。 因此libavdevice中的(解复用)复用是AVFMT_NOFILE
类型(它们使用自己的I / O函数)。 传递给avformat_open_input()
的文件名通常不是指实际存在的文件,而是具有特殊的设备特定含义,例如对于x11grab
设备而言,它是显示名称。
可用设备列在第二章“可用媒体格式”部分。
libavfilter
libavfilter是一个过滤器库,它为FFmpeg和客户端库或应用程序提供媒体过滤层。 它简化了FFmpeg工具的设计并增强了它们的灵活性。
libavfilter包含格式协商的高级机制,并最小化像素/格式转换。 过滤器处理缓冲区,其中缓冲区可以包含视频帧或音频源。 每个缓冲区的属性 - 帧类型,时间戳,文件位置等可以在处理过程中访问和处理。 可用过滤器的列表在第二章中。
libavformat
libavformat是一个包含音频/视频容器格式的解复用和复用的库。 在实现的复用器中有crc,framecrc,ico,md5,MOV / MP4 / ISMV,mpegts,matroska
等。
在第二章中列出可以使用的媒体格式。
libavutil
libavutil是包含用于FFmpeg的不同部分的例程的辅助库,例如:
-
av_get_token
函数在libavutil/avstring.h
文件里面,可以用来解析或者转义 -
libavutil/eval.h
文件包含用于计算算术表达式的接口 -
libavutil/samplefmt.h
文件包含可用音频样本格式的定义 -
libavutil/audioconvert.h
文件包含音频通道布局的规范
libpostproc
libpostproc是一个包含视频后处理例程的库。
libswresample
libswresample库能够处理不同的采样格式,采样率和不同数量的通道以及不同的通道布局。 它支持直接转换样品格式和一次打包/平面。
libswscale
libswscale是一个包含视频图像缩放例程的库,并提供快速模块化缩放界面。
项目使用FFmpeg组件
使用各种FFmpeg工具和库的项目数量很大,其中许多项目列在http://ffmpeg.org/projects.html上
谷歌Chrome浏览器中支持HTML5
可能是使用FFmpeg库最常用的应用程序是Google Chrome网络浏览器,它是最流行的网络浏览器之一。 2009年,FFmpeg库被纳入Chrome,以支持HTML5音频和视频元素。 其他使用FFmpeg的浏览器还包括Chromium和Orygin网络浏览器。
在YouTube和Facebook上播放视频
最大的视频分享网站YouTube和最大的社交网络Facebook是全球最大的使用ffmpeg的项目,在处理视频方面,每周有几百万个视频。
多媒体框架利用FFmpeg
在表中描述了使用FFmpeg库的多媒体框架:
名称 | 网站 | 描述 |
---|---|---|
ffdshow | ffdshow-tryout.sourceforge.net | 媒体编码器和解码器,实现为DirectShow和VFW过滤器,仅Windows |
GStreamer | gstreamer.freedesktop.org | 用于构建媒体处理组件图的库。它支持的应用范围从简单的Ogg/Vorbis回放、音频/视频流到复杂的音频(混合)和视频(非线性编辑)处理 |
MLT | www.mltframework.org | MLT是一个开源的多媒体框架,为电视广播设计和开发。它为广播公司、视频编辑、媒体播放器、转编码器、网络流媒体和其他类型的应用提供了一个工具箱 |
OpenMAX | www.khronos.org/openmax | OpenMAX是一个免版权的、跨平台的API,它提供了全面的流媒体编码和应用程序的可移植性,它可以使加速的多媒体组件在多个操作系统和硅平台上被开发、集成和编程 |
视频编辑器
- Avidemux
- Blender (3D)
- Cinelerra
- Kdenlive
- Kino
音频编辑器
- Audacity
- Sox
媒体播放器使用FFmpeg
使用FFmpeg库的媒体框架在表中描述:
名称 | 网站 | 描述 |
---|---|---|
Audacious | audacious-media-player.org | Audacious是一个开源的音频播放器。拖放文件夹和个人歌曲文件,在您的整个音乐库中搜索艺术家和专辑,或者创建和编辑您自己的自定义播放列表。从网上听CD或流音乐。用图形化的均衡器或实验来调整声音。享受现代的GTK主题的界面,或者用Winamp经典皮肤改变一些东西。使用包含大胆的插件来为你的音乐取歌词,在早上设置一个闹钟,等等 |
Gnash | www.gnashdev.org | Gnash是GNU SWF电影播放器,它可以在桌面或嵌入式设备上独立运行,也可以作为多个浏览器的插件 |
KMPlayer | http://kmplayer.kde.org | KDE的视频播放器插件和基本的MPlayer / Xine / ffmpeg / ffserver / VDR前端。KMPlayer KPart插件用于Konqueror mimics QuickTime, MS Media Player和RealPlayer插件浏览器插件 |
MPlayer | www.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电影 |
Rockbox | www.rockbox.org | Rockbox是为数字音乐播放器提供的免费更换固件。它在很多player身上运行 |
VLC | www.videolan.org/vlc | VLC是一个免费的开源跨平台多媒体播放器和框架,它播放大多数多媒体文件以及DVD、音频CD、VCD和各种流媒体协议 |
V-Player | vchannel.sourceforge.net/ player.html | 基于ffmpeg库的跨平台媒体播放器。现在V播放器支持Windows, Linux和OS X平台。用户界面是用c++编写的,所有平台上都有Qt 4 |
Xine | www.xine-project.org | 免费的多媒体播放器。它播放cd、dvd和vcd。它还可以解码本地磁盘驱动器上的AVI、MOV、WMV和MP3等多媒体文件,并在Internet上显示多媒体流 |