C/C++编程:ffmpeg简介

什么是ffmpeg

ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口

ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等; ffmpeg框架提供了多种丰富的插件模块,包含封装和解封装的插件、编码与解码的插件等

官网

ffmpeg的基本组成

ffmpge框架的基本组成包括:AVFormet、AVCodec、AVFilter、AVDevice、AVUtil等模块库:

  • 封装模块AVFormet

    • AVFormet中实现了目前多媒体领域中的绝大多数多媒体封装格式,包括封装和解封装,比如MP4、FLV、KV、TS等文件封装格式;RTMP、RTSP、MMS、HLS等网络协议封装格式。
    • FFmpge是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。
    • 根据实际需求,可以进行媒体封装格式的扩展,增加自己定制的封装格式、也就是说在AVFormet中增加自己的封装处理模块
  • 编解码模块AVCodec

    • AVCodec中实现了目前多媒体领域中绝大多数常用的编解码格式。
    • AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,比如x264编码器支持的H.264(AVC)编码;x265编码器支持的H.265(AVC)编码;libmp3lame编码器支持的MP3(mp3lame)编解码
    • 如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块
  • 滤镜模块AVFilter

    • AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。
  • 视频图像转换计算模块swscale

    • swscale模块提供了高级别的图像转换API
  • 音频转换计算模块swresample

    • swresample模块提供了高级别的音频重采样API

工具

测试用的小视频下载地址: https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_30mb.mp4

编解码工具ffmpeg

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

-i/-f选项

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

ffmpeg通过-i参数将input.mp4作为输入源输入、然后进行转码和封装操作,输出到output.avi中。这条命名主要之类如下工作

  • 获取输入源input.mp4
  • 转码
  • 输出文件output.avi

-f参数限制了输出文件的容器格式

ffmpeg的主要工作流程比较简单,具体如下:

  • 解封装
  • 解码
  • 编码
  • 封装

其中需要经过六个步骤

  • 读取输入源
  • 进行音视频的解封装
  • 解码每一帧音视频的数据
  • 编码每一帧音视频的数据
  • 进行音视频的重新封装
  • 输出到目标
    C/C++编程:ffmpeg简介_第1张图片
    ffmpet rtsp切图
ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1  -y -f mjpeg -t 0.001 -s 1280x720 test.jpg

多媒体分析器ffprobe

ffprobe也是ffmpeg源码编译后生成的一个可执行程序。ffprobe是一个非常强大的多媒体封装工具,可以从媒体文件或者媒体流中获取你想要了解的格式媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等

./ffprobe --show_streams output.mp4

http://bbs.apehorde.com/blog/articles/152

http://linux.51yip.com/search/ffmpeg

你可能感兴趣的:(C++,c++,java)