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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm好用的主题_pycharm关联python

    pycharm好用的主题_pycharm关联python所谓工欲善其事,必先利其器;在我们日常开发中,长时间编码从眼睛上心里承受压力上有个好的视觉感觉是很加分的以下是我个人十分喜欢的pycharm主题风格,包含整体风格/字体/背景颜色/背景图片;其设置如下:01主题:pycharm的File->Settings->Plugins,搜索MaterialThemeUI并安装,安装之后进行restart02字体:File…

    2022年8月26日
    8
  • mqttnet 详解_MQTT MQTTnet 实现

    mqttnet 详解_MQTT MQTTnet 实现【实例简介】MQTTnet.NET库实现的MQTT客户端和服务端代码,源程序。可以执行。【实例截图】【核心代码】MQTT└──MQTT├──MQTT│├──MQTTServer.csproj│├──Program.cs│├──bin││└──Debug││└──netcoreapp2.0││├──M…

    2022年6月25日
    34
  • VB 学习笔记

    VB 学习笔记这一个月由于工作的需要,学习了一点VB.net操作Excel,记录一下笔记vb里面的下标vb里面的下标有三种:从0开始:当我们在vb中定义一个数组时,下标只能从0开始Dimarr(2)asString中的arr数组长度为3注意不是2Dimarr(1to10)asString则会报错数组的下限只能是0从1开始:主要…

    2022年6月21日
    31
  • java字符串的拆分_Java中的字符串分割 .

    java字符串的拆分_Java中的字符串分割 .java中的split函数和js中的split函数不一样。Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项:java.lang.string.splitsplit方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]])免费资源收…

    2022年5月12日
    44
  • java键盘输入语句_java的输入语句小结

    java键盘输入语句_java的输入语句小结1.使用Scanner使用时需要引入包importjava.util.Scanner;首先定义Scanner对象Scannersc=newScanner(System.in);如果要输入整数,则intn=sc.nextInt();String类型的,则Stringtemp=sc.next();比如:importjava.util.Scanner;publicclass…

    2022年7月7日
    29
  • 体验国产Linux系统,开局就翻车了…

    体验国产Linux系统,开局就翻车了…本文转载自差评,作者差评君可能你们之前在网上看到过别人对Linux操作系统的分析,也在新闻里见过有关国产Linux操作系统的报道。那么你们肯定也见过这些帖子下面的评论区里,不断有人复述着“垃圾”、“难用”。被称作“最美操作系统”的深度OS▼我相信,很多小伙伴是想尝试一下国产Linux操作系统的,但碍于现实条件往往只能作罢。所以,Linux真的难用吗;假如说从明天开始,Windows和苹果MacOS突然不能用了,Linux…

    2022年5月17日
    60

发表回复

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

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