FFmpeg 音视频处理工具三剑客(ffmpeg、ffprobe、ffplay)

【导读】FFmpeg 是一个完整的跨平台音视频解决方案,它可以用于音频和视频的转码、转封装、转推流、录制、流化处理等应用场景。FFmpeg 在音视频领域享有盛誉,号称音视频界的瑞士军刀。同时,FFmpeg 有三大利器是我们应该清楚的,它们分别是 ffmpeg、ffprobe 和 ffplay 三剑客。

正文

三剑客 ffmpeg、ffprobe、ffplay 都有自己的使用场景和特殊技能,在音视频开发过程中,如果能够合理利用这三个工具,将会有事半功倍的效果。接下来,我们就结合实际案例介绍一下它们三个的使用技巧。

ffmpeg

ffmpeg 应该是 FFmpeg 工具集中最核心的利器,支持多种多样的编码器、解码器、封装格式、滤镜功能。在实际开发过程,我们可以直接使用 ffmpeg 可执行程序,也可以通过动态库或者静态库的形式进行引用依赖。但在技术调研时,大多使用可执行程序,因为这样操作更加简单,成本更低。

其实,我们使用的 ffmpeg 版本是可以定制的,大多数公司都有自己的 ffmpeg 私有库版本,根据公司的业务对官方的 ffmpeg 版本进行了裁剪和定制化修改。因为很多公司的产品都是一个闭环,特别是播放器方案,不需要支持所有的编码格式、解码格式和封装格式。

比如我们公司的云点播服务,就是将所有上传的视频文件和音频文件都转码成了标准的视频 H264 和音频 AAC 编码格式,最终存储为 m3u8 格式。我们提供的播放器 SDK 只需要支持 H264 和 AAC 编码格式的解码就可以了,而不需要关心对于其他音视频编码格式的支持,这样的播放器方案就非常的轻量化。同时,也可以兼容市面上大多数的通用播放器。

接下来,我们介绍一下如何判断当前的 ffmpeg 版本支持哪些编码器、解码器、封装格式和滤镜功能。

编码器

如果想要查看当前 ffmpeg 版本支持哪些编码器,可以使用如下命令:

ffmpeg -encoders

运行结果示例:(部分内容)

Encoders:

V..... = Video

A..... = Audio

S..... = Subtitle

.F.... = Frame-level multithreading

..S... = Slice-level multithreading

...X.. = Codec is experimental

....B. = Supports draw_horiz_band

.....D = Supports direct rendering method 1

------

V..... flv FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)

V..... gif GIF (Graphics Interchange Format)

V..... h263 H.263 / H.263-1996

V.S... mpeg2video MPEG-2 video

V.S... mpeg4 MPEG-4 part 2

什么情况下,我们会使用这个命令呢?比如你正在使用 ffmpeg 编码时,结果报错了,你首先需要使用这个命令查看一下当前 ffmpeg 是否支持目标编码器。这里你可能会问,ffmpeg 没有统一的版本吗?为什么支持的编码器还不一样?官网正式的 ffmpeg 版本肯定是统一的,但是实际项目我们不可能使用所有的编码器、解码器、滤镜等组件,一般会进行裁剪。

对 ffmpeg 进行裁剪,可能还有另外一个原因,就是受限于客户端安装包的大小,全量的 ffmpeg 大小在大几十兆,可能会占到整个安装包的一半,所以很多时候需要对 ffmpeg 进行裁剪。

解码器

如果想要查看当前 ffmpeg 版本支持哪些解码器,可以使用如下命令:

ffmpeg -decoders

输出结果最开始会显示当前 ffmpeg 版本不同组件的版本号,其实,ffmpeg 本身就是一个工具集合,内部包含了不同的功能模块。其中,包括 libavutil,libavcodec,libavformat,libavdevice,libavfilter,libswscale,libswresample 七部分,共同构成了功能强大的 ffmpeg 工具。

运行结果示例:(部分内容)

Decoders:

V..... = Video

A..... = Audio

S..... = Subtitle

.F.... = Frame-level multithreading

..S... = Slice-level multithreading

...X.. = Codec is experimental

....B. = Supports draw_horiz_band

.....D = Supports direct rendering method 1

------

V...BD flv FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (codec flv1)

V....D gif GIF (Graphics Interchange Format)

V....D h261 H.261

V...BD h263 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2

VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10

V..... h264_vda H.264 (VDA acceleration) (codec h264)

VFS..D hevc HEVC (High Efficiency Video Coding)

V.S.BD mpeg1video MPEG-1 video

V.S.BD mpeg2video MPEG-2 video

V.S.BD mpegvideo MPEG-1 video (codec mpeg2video)

VF..BD mpeg4 MPEG-4 part 2

如果你大致浏览器一下编码器和解码器的列表,就会感觉 ffmpeg 支持的解码器要比编码器多?是的,你的感觉没有错。ffmpeg 本身更多的时候是用于解码,编码器是先由一些视频厂家或者第三方机构定义出来的视频编码标准,然后 ffmpeg 团队根据需要再决定是否支持对应的解码功能,比如编码 H264 视频时,更多使用的是 openH264 或者是 x264 编码库。

另外需要说明的是,有一个类似等式:

ffmpeg -codecs = (ffmpeg -encoders)+(ffmpeg -decoders)。

意思就是说也可以使用 ffmpeg -codecs 命令查看总的编码器和解码器的情况。

封装格式

说到封装格式,大家就比较容易理解了,其实就是我们平时看到的视频文件的后缀,比如 mp4,flv,mkv,webm,ts,3gp 等。ffmpeg 在编码的时候需要用到封装格式,比如把 AAC 的音频和 H264 的视频封装成 mp4 文件;解码的时候也需要用到解封装格式,比如把 mp4 文件解封装成 AAC 的音频和 H264 的视频。我们可以使用如下命令查看 ffmpeg 支持的封装格式和解封装格式:

ffmpeg -formats

运行结果示例:(部分内容)

File formats:

D. = Demuxing supported

.E = Muxing supported

--

E 3gp 3GP (3GPP file format)

D aac raw ADTS AAC (Advanced Audio Coding)

DE ac3 raw AC-3

D ape Monkey's Audio

DE avi AVI (Audio Video Interleaved)

DE flv FLV (Flash Video)

DE g722 raw G.722

DE gif GIF Animation

DE h263 raw H.263

DE h264 raw H.264 video

滤镜器

滤镜功能一般是进行一些比较复杂的操作时才会用到的功能,比如给视频增加贴图、混流合并时。

可以使用如下命令查看当前 ffmpeg 版本都支持哪些滤镜:

ffmpeg -filters

运行结果示例:(部分内容)

Filters:

T.. = Timeline support

.S. = Slice threading

..C = Command support

A = Audio input/output

V = Video input/output

N = Dynamic number and/or type of input/output

| = Source or sink filter

... acompressor A->A Audio compressor.

... acrossfade AA->A Cross fade two input audio streams.

滤镜支持多种类型,有时间线、线程切片、命令行、控制音频输入输出、控制视频输入输出、动态控制输入输出的数量和类型、源滤波器,不同的功能可以选择对应类型的过滤器。

ffprobe

ffprobe 在 FFmpeg 三剑客中是一个查看文件多媒体信息的利器,使用方式超级简单,输出信息非常详细。音视频开发过程中,当需要处理某个多媒体文件时,我们首先需要知道它的基本信息,比如它是音频文件,还是视频文件?视频文件的话,是否包含音频流?以及相应的音频和视频参数信息,码率、分辨率、采样率、声道数、采样位、帧率、颜色空间等。

查看音频信息

利用 ffprobe 查看音频信息的方式也非常简单,可以指定很多参数,最简单的使用方式可以参考如下命令:

ffprobe demo.ape

运行结果示例:

Input #0, ape, from 'demo.ape':

Metadata:

TITLE : 煎熬

Copyright : QQ 音乐

ALBUM : 感谢爱人

ARTIST : [www.51ape.com]李佳薇

Duration: 00:04:22.03, start: 0.000000, bitrate: 793 kb/s

Stream #0:0: Audio: ape (APE / 0x20455041), 44100 Hz, stereo, s16p

是不是非常简单?我们简单分析一下上面的输出信息,这是一段音乐文件,标题是“煎熬”,音乐时长是 4 分 22 秒,码率是 793kb/s,音频格式是 ape,采样率是 44100 赫兹,立体声,采样格式是 s16p。

查看视频信息

利用 ffprobe 查看视频信息的方式也非常简单,可以参考如下命令:

ffprobe yingzi.mp4

运行结果示例:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'yingzi.mp4':

Metadata:

major_brand : mp42

minor_version : 1

compatible_brands: mp41mp42isom

creation_time : 2021-02-07 12:48:08

Duration: 00:00:15.05, start: 0.000000, bitrate: 825 kb/s

Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 105 kb/s (default)

Metadata:

creation_time : 2021-02-07 12:48:08

handler_name : Core Media Audio

Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 320x568, 713 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 1200 tbc (default)

Metadata:

creation_time : 2021-02-07 12:48:08

handler_name : Core Media Video

通过上述输出信息,我们可以知道这段视频,既包含音频流,又包含视频流,视频时长 15 秒,音频编码 AAC,视频编码 H264(Main),颜色空间是 yuv420p,分辨率是 320x568,帧率是 29.97。

ffplay

ffplay 在 FFmpeg 三剑客中是一个多功能播放器,ffplay 既可以播放音频,又可以播放视频,是从事音视频相关开发的工作人员常用的基础工具之一。掌握 ffpaly 的使用是非常有必要的。接下来,我们就一起看一下具体怎么使用 ffplay。

播放音频文件

使用 ffplay 播放一首音乐非常简单,具体参考如下命令:

ffplay demo.ape

播放的同时会默认出现一个音频频谱图,如下图所示:

播放图形的显示模式有两种,一种是波形图,showmode=1,一种是频谱图,showmode=2,音乐默认播放的是频谱图。如果想显示波形图,可以使用如下命令:

ffplay -showmode 1 demo.ape

图形显示如下:

如果你不想显示任何播放图形,也是可以的,设置 showmode=0,运行如下命令:

ffplay -showmode 0 demo.ape

这样只会有如下图所示的信息输出。

播放视频文件

使用 ffplay 播放一段视频也非常简单,具体参考如下命令:

ffplay bunny.mp4

播放效果图如下:

不仅如此,当视频文件存在多路音频或者多路视频时,ffplay 还可以指定播放哪路音频或者视频,默认播放 index=0 的音频和视频,比如指定播放第二路音频:

ffplay test.mp4 -ast 1

比如指定播放第二路视频:

ffplay test.mp4 -vst 1

另外,大家都知道音频和视频同时存在时,播放的时候就面临音画同步的问题,那么 ffplay 是怎么处理的呢?其实 ffplay 默认是以音频时间戳为基准的,当然我们也可以指定以视频或者系统时间戳为基准。以视频时间戳为播放基准的命令:

ffplay test.mp4 -sync video

以系统时间戳为播放基准的命令:

ffplay test.mp4 -sync ext

刚才,我们已经知道 ffplay 可以播放音频原始数据 PCM 格式文件,那么 ffplay 可以播放视频原始数据 YUV 格式的视频文件吗?答案也是可以的,命令如下:

ffplay test.yuv -f rawvideo -pixel_format yuv420p -s 544*960

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3019146.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Llama 3 超级课堂

https://github.com/SmartFlowAI/Llama3-Tutorial/tree/main 第一节作业 streamlit run web_demo.py /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct

2024年最佳音频处理软件盘点!助你事半功倍

在数字媒体时代,音频处理软件已经成为音乐制作、音频编辑和后期处理不可或缺的工具。这些软件具备强大的功能,能帮助用户轻松实现声音的剪辑、混音、特效处理以及音频格式转换等操作。本文将为你介绍音频处理软件的基本概念、功能特点以及常用软件&#…

2024年营销技术远景图发布:14,106种营销技术产品(同比增长27.8%)

每年五月的第一个星期二(美国东部时间),Scott Brinker设定为Martech Day,以此来庆祝营销技术行业和所有有才华的营销技术专家和营销运营专业人士的工作,「为你们在开拓这片荒野所做的一切而欢呼!」 同时&a…

特斯拉CEO马斯克访华,或加速FSD技术在中国的落地

特斯拉首席执行官埃隆马斯克于4月底进行了中国之旅,这一访问被业内人士认为可能加速特斯拉FSD(Full Self-Drive,完全自动驾驶)技术在中国的应用。业内专家指出,马斯克的此番到访可能会对中国自动驾驶市场产生深远影响&…

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器,Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中,我总结出了三条使用心得,同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧! 使用心得: 界…

【Qt】Qt开发中常用命名规范、快捷键和窗口坐标体系详解

Qt是一款强大的跨平台C应用程序开发框架,为了提高代码的可读性和可维护性,遵循一定的命名规范是非常重要的。此外,Qt Creator提供了许多快捷键和便捷功能,能够提高开发效率。本文将介绍Qt开发中常用的命名规范、快捷键以及窗口坐标…

Gen-2颠覆AI生成视频!一句话秒出4K高清大片,网友:彻底改变游戏规则

这,绝对称得上是生成式AI进程中的里程碑。 就在深夜,Runway家标志性的AI视频生成工具Gen-2,迎来了“iPhone时刻”般的史诗级更新—— 依旧是简单一句话输入,不过这一次,视频效果一口气拉到了4K超逼真的高度&#xff…

# 从浅入深 学习 SpringCloud 微服务架构(十一)--SpringCloudGateWay(1)

从浅入深 学习 SpringCloud 微服务架构(十一)–SpringCloudGateWay(1) 一、SpringCloudGateway:概述 1、Zuul 网关存在的问题 1.1 Zuul 中,整个请求的过程 首先将请求给 zuulservlet 处理,z…

邮件群发系统的效率怎么样?如何评估性能?

邮件群发系统的使用方法?邮件群发工具的关键功能? 邮件群发系统已成为企业、组织及个人进行信息沟通的重要工具。然而,当我们谈论邮件群发系统的效率时,我们需要从多个维度来全面分析和评估。AokSend就来介绍一下。 邮件群发系统…

机器学习——4.案例: 简单线性回归求解

案例目的 寻找一个良好的函数表达式,该函数表达式能够很好的描述上面数据点的分布,即对上面数据点进行拟合。 求解逻辑步骤 使用Sklearn生成数据集定义线性模型定义损失函数定义优化器定义模型训练方法(正向传播、计算损失、反向传播、梯度清空&#…

小项目“谈笑风生”测试报告

文章目录 一、项目介绍1.1项目背景1.2功能介绍 二、测试环境三、测试执行过程3.1功能测试3.1.1登录页面测试3.1.2注册页面测试3.1.3主页面测试 3.2界面自动化测试3.2.1登录模块测试3.2.2注册模块测试3.2.3展示各种信息模块测试3.2.34聊天消息传送模块测试 四、测试结论与建议 一…

vmware虚拟机内删除文件后宿主机空间不释放

问题描述 linux下,vmware内虚拟机删除文件,宿主机空间不释放,D盘快满了 解决方法 通过vmware-toolbox进行空间回收 安装 在虚拟机内操作 yum install -y open-vm-tools 清理 在虚拟机内操作 #查看磁盘的挂载点 sudo /usr/bin/vmware…

探索宇宙奥秘:太阳系运转的三维可视化之旅

在宇宙探索的伟大征途中,太阳系运转三维可视化技术为我们揭开了星辰大海的一角。通过图扑可视化技术,我们能够以前所未有的方式直观地体验和理解太阳及其周围行星的运动规律。这不仅是对于天文学家的一大帮助,也为广大天文爱好者和教育者提供…

如何理解GTX发送通道的用户接口?(高速收发器二)

前文讲解了高速收发器的QPLL及CPLL和差分时钟相关内容,如下图所示。本文就打开高速收发器通道的内部结构,进行简要讲解。 图21GTXE2_CHANNEL原始拓扑 收发器的内部框图如下所示,上半部分是发送通道,下半部分是接收通道&#xff0c…

ubuntu下pyinstaller打包多个.py文件

参考链接: https://blog.csdn.net/CholenMine/article/details/80964272 https://blog.csdn.net/BXD1314/article/details/125226289 前言 要把python项目打包成可执行程序运行,看了很多帖子,大多数博主都采用pyinstall 打包,但…

车间为什么选择蒸发式冷风机?

蒸发式冷风机具有以下特点: 节能环保:蒸发式冷风机不使用压缩机和化学制冷剂,而是通过水的蒸发来降低温度,因此它是无压缩机、无冷媒、无污染的环保型产品。降温效果显著:在较潮湿地区,它一般能达到5-9℃的…

苹果iPad M4:Console级别图形和AI强大功能

苹果iPad M4:Console级别图形和AI强大功能 Apple近日发布了最新的M4芯片,旨在为iPad Pro系列带来明显的性能提升和电池续航时间延长。在本篇报道中,我们将详细介绍M4芯片的特点、性能改进和为创意专业人士带来的影响。 M4芯片的强大功能 …

第二证券|1.73万亿“聪明钱”A股扫货买了什么?

跟着A股上市公司一季报披露收官,备受商场重视的险资、社保基金和QFII等各大组织持仓数据浮出水面。 Wind计算数据显现,719家A股上市公司的十大流通股股东有QFII身影,险资和社保基金分别现身754只和659只个股的前十大流通股股东,Q…

用户体验至上的Spring Boot博客系统

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Linux/C++——线程池

什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。 为什么要引入线程池 在单线程的场景中,如在服务端的服务中,要对多个客户端进行服务,单个线…