前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg从入门到精通(一)

FFmpeg从入门到精通(一)

作者头像
全栈程序员站长
发布2022-09-13 10:53:10
1K0
发布2022-09-13 10:53:10
举报
文章被收录于专栏:全栈程序员必看

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

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命令简单应用:

代码语言:javascript
复制
./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是两种文件封装格式,并不是后缀名就可以决定的,例如上面的命令行同样可以写成:

代码语言:javascript
复制
./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有一个基本的概念,输入以下命令:

代码语言:javascript
复制
./ffprobe -show_streams input.mp4

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FFmpeg介绍
  • FFmpeg基本组成
  • FFmpeg 编解码工具 ffmpeg
  • FFmpeg的播放器 ffplay
  • FFmpeg的多媒体分析器 ffprobe
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档