FFmpeg从入门到精通(一)

FFmpeg从入门到精通(一)FFmpeg介绍FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。FFmpeg基本组成先看图,再看字。FFmpeg的封装模块AVFormatAVFormat中实现了目前多媒体领域中大多数媒体封装格式,包括封装和解封装,如:MP4,FLV等文件封装格式、HTTP,RTMP,HLS等网络协议封装格式。FFm…

大家好,又见面了,我是你们的朋友全栈君。

FFmpeg介绍

FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

FFmpeg基本组成

先看图,再看字。

FFmpeg基本组成

  1. FFmpeg的封装模块 AVFormat
    AVFormat中实现了目前多媒体领域中大多数媒体封装格式,包括封装和解封装,如:MP4,FLV等文件封装格式、HTTP,RTMP,HLS等网络协议封装格式。FFmpeg是否支持某种格式,取决于编译时是否包含该封装库。如果需要配置,可以在FFmpeg项目根目录下的config.h中查看宏定义。 0为关闭,1为打开。
  2. FFmpeg的编解码模块 AVCodec
    AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用X265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块。
  3. FFmpeg的滤镜模块 AVFilter
    AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入或多个输出。
  4. FFmpeg的多媒体设备交互 AVDevice
    使用这个库能够读取电脑(或者其它设备上)的多媒体设备的数据,或者输出数据到指定的多媒体设备上。
  5. FFmpeg的工具类 AVUtil
    AVUtil为FFmpeg的工具类,其重要组成部分有:AVLog日志输出、AVOption (AVClass)选项设置、AVDictionary键值对存储、ParseUtil字符串解析。
  6. FFmpeg的音频转换计算模块 swresample
    swresample模块提供了高级别的音频重采样API。例如它允许操作音频采样、音频通道布局转换与布局调整。
  7. FFmpeg的视频图像转换计算模块 swscale
    swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从YUV420P转换成YUYV,或者YUV转RGB等图像格式转换。

FFmpeg 编解码工具 ffmpeg

ffmpeg是FFmpeg源代码编译后生成一个可执行程序,其可以作为命令行工具使用。
ffmpeg命令简单应用:

./ffmpeg -i input.mp4 output.avi

这是一条简单的ffmpeg命令,ffmpeg通过-i参数将input.mp4作为输入源输入,然后进行转码与转封装操作,输出到output.avi中,这条命令主要做了如下工作:
1)获得输入源input.mp4
2)转码
3)输出文件output.avi
看似简单的两步主要的工作,其实远远不止是从后缀名为MP4的文件输出成后缀名为AVI的文件,因为在ffmpeg中,MP4与AVI是两种文件封装格式,并不是后缀名就可以决定的,例如上面的命令行同样可以写成:

./ffmpeg -i input.mp4 -f avi output.dat 

这条ffmpeg命令相当于前面的那条命令做了一些改变,加了一个“-f”进行约束,“-f”参数的工作非常重要,它制定了输出文件的容器格式,所以可以看到输出的文件为output.dat,文件后缀名为.dat,但是其主要工作依然与之前的指令相同。
ffmpeg的主要工作流程相对比较简单,具体如下:
1)解封装
2)解码
3)编码
4)封装
其中需要经过6个步骤,具体如下:
1)读取输入源
2)进行音视频的解封装
3)解码每一帧音视频数据
4)编码每一帧音视频数据
5)进行音视频的重新封装
6)输出到目标

FFmpeg的播放器 ffplay

FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformat与avcodec,可以播放各种媒体文件或者流。
ffplay是FFmpeg源代码编译后生成的另一个可执行程序,与ffmpeg在FFmpeg项目中充当的角色基本相同,可以作为测试工具进行使用,ffplay提供了音视频显示和播放相关的图像信息、音频的波形信息等。

FFmpeg的多媒体分析器 ffprobe

ffprode也是FFmpeg源码编译后生成的一个可执行程序。ffprode是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获得你想要了解的媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。
例如它可以帮助分析某个媒体容器中的音频是什么编码格式、视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长、复合码率等信息。使用ffprode可以分析媒体文件中每个包的长度、包的类型、帧的信息等。
下面举一个简单的例子,以对ffprobe有一个基本的概念,输入以下命令:

./ffprobe -show_streams input.mp4

根据输出内容,可以看到MP4文件内容中的流信息。流信息的相关内容是通过[STREAM][/STREAM]的方式展现出来的,在[STREAM][/STREAM]之间的信息即为该视频流信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153353.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstrom2021激活码(在线激活)

    phpstrom2021激活码(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    62
  • 自动编码器及其变种

    自动编码器及其变种自动编码器  三层网络结构:输入层,编码层(隐藏层),解码层。  训练结束后,网络可由两部分组成:1)输入层和中间层,用这个网络对信号进行压缩;2)中间层和输出层,用这个网络对压缩的信号进行还原。图像匹配就可以分别使用,首先将图片库使用第一部分网络得到降维后的向量,再讲自己的图片降维后与库向量进行匹配,找出向量距离最近的一张或几张图片,直接输出或还原为原图像再匹配。  该网络的目的是重…

    2022年5月20日
    40
  • 集合转成数组的方法_数组转化为集合

    集合转成数组的方法_数组转化为集合1.转换方法1.遍历的方式,依次添加到集合中。2.Arrays.asList()方法3.List.of()方法4.Collections.addAll(集合,数组)方法,将集合存储到数组中1.1遍历的方式这种方式转换成的集合,集合长度可变,可以后续向集合添加数据int[]i={1,5,8,7,11,52};//1.遍历的方式Listlist=newArrayList();for(intx:i){

    2022年9月19日
    1
  • MyBatis面试题总结「建议收藏」

    MyBatis面试题总结「建议收藏」啃下MyBatis源码-MyBatis面试题总结1.概念/使用方法向的问题1.1什么是Mybatis?1.2为什么说Mybatis是半ORM框架?/与Hibernate有哪些不同?1.3Mybaits的优点?1.4MyBatis框架的缺点?1.5#{}和${}的区别?1.6怎么解决实体类中的属性名和表中的字段名不一样的问题?1.7在mapper中如何传递多个参数?…

    2022年6月11日
    26
  • 计算机组成原理期末复习【超实用】「建议收藏」

    计算机组成原理期末复习【超实用】「建议收藏」计算机组成原理(第二版)唐朔飞编著(课本有些地方还不错,可以下载电子版看看)五道解答题30‘=9’(9个知识点)+6’+6’+4’+5’我依据老师的考题范围手动整理,有什么问题or想添加的知识点请在评论下方留言!实时更新,助诸位共进步!一、解答题1.影响流水线性能的因素主要有哪几种?请简要加以说明。P348结构相关:是当多条指令进入流水线后,硬件资源满足不了指令…

    2022年5月31日
    33
  • ajaxpro json 使用「建议收藏」

    ajaxpro json 使用「建议收藏」(一)AJAXPro之旅—神奇的小魔盒-站在巨人的肩膀上做自己的事情-博客园 -[Translatethispage]2007年9月10日…JSON.2.dll,AjaxPro.JSON.dll,web.config5个文件.其中.2结尾的是应用在.Net2.0框架下的类库.(个人使用的是2.0的,以下的教程也是应用在2.0下的)…www.cnblogs.c…

    2022年7月15日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号