C/C++编程:ffmpeg简介

1059 篇文章 285 订阅

什么是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的主要工作流程比较简单,具体如下:

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

其中需要经过六个步骤

  • 读取输入源
  • 进行音视频的解封装
  • 解码每一帧音视频的数据
  • 编码每一帧音视频的数据
  • 进行音视频的重新封装
  • 输出到目标
    在这里插入图片描述
    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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++是一种通用的编程语言,广泛应用于软件开发领域。它是C语言的扩展,提供了更多的特性和功能。C++具有高效性、可移植性和灵活性等特点,被广泛用于开发各种类型的应用程序,包括桌面应用、嵌入式系统、游戏开发等。 FFmpeg是一个开源的跨平台音视频处理工具库,它提供了一组丰富的音视频处理功能和工具,包括音视频编解码、格式转换、流媒体处理等。通过使用FFmpeg,我们可以实现音视频的采集、处理和播放等功能。 如果你想使用FFmpeg来进行拉流并将其存储到本地,你可以按照以下步骤进行操作: 1. 安装FFmpeg:首先需要在你的系统上安装FFmpeg库。你可以从FFmpeg官方网站下载最新版本的源代码,并按照官方提供的编译指南进行编译和安装。 2. 编写C++代码:使用C++编写一个程序来实现拉流并存储到本地的功能。你可以使用FFmpeg提供的API来进行音视频的解码和存储操作。具体的代码实现会涉及到FFmpeg的相关函数调用和参数设置,需要参考FFmpeg的官方文档或者其他相关资源。 3. 配置输入和输出:在代码中配置输入流和输出文件的相关参数。你需要指定要拉取的流的URL或者文件路径,以及存储到本地的文件名和格式等信息。 4. 执行拉流存储:运行你编写的C++程序,它将会使用FFmpeg库来进行拉流并将其存储到本地。你可以根据需要设置一些额外的参数,如视频的分辨率、音频的采样率等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值