FFmpeg学习(1)开篇

本文是FFmpeg学习系列的开篇,介绍了FFmpeg的基本功能、历史背景和重要组件,如libavutil、libavdevice、ffplay等。文章探讨了音视频技术在直播、短视频等领域的应用,并提供了FFmpeg的学习资源,包括官方文档和书籍推荐。FFmpeg是一个开源的多媒体处理工具,用于视频采集、格式转换、视频截图等,并支持多种平台和编解码格式。
摘要由CSDN通过智能技术生成

FFmpeg学习(1)开篇

FFmpeg学习(2)源码编译,环境配置

为什么要学习FFmpeg

本人希望打算深入研究音视频领域,音视频领域的内容很多,我自己打算从几方面循序渐进:FFmpeg常用功能实践, FFmpeg源码研究, OpenGLOpenGLESMetalARWebRTC, 直播架构等方向去研究。

音视频目前主要有哪些应用场景呢?

  • 直播类:音视频会议,教育直播,娱乐/游戏直播等 (例如花椒,映客,腾讯课堂,腾讯会议, 斗鱼)
  • 短视频:抖音,快手,小咖秀等, 这类应用主要是对声音和视频做特殊处理,如声音变声,变调,男声变女声,女声变童声;如视频处理有:美颜,滤镜处理。
  • 网络视频: 优酷,腾讯视频,爱奇艺等。
  • 音视频通话:微信,QQ, Skype等。
  • 视频监控: 网络摄像机IPC等
  • 人工智能:人脸识别,智能音箱等,这类应用更关注于算法。

从上面这么多应用场景,我们可以看出音视频技术是多么重要,特别是5G时代,网络传输问题大大提升,更多的音视频需求会爆发出来。

我们可以看一下一个简单播放器的架构,如下图:

音频解码,视频解码一般都用FFmpeg解码,在IOS8 之后提供了VideoToolBox框架支持硬解码。

而视频渲染一般使用OpenGL直接用GPU渲染,视频渲染第三方框架有GPUImage, SDL, VLC

音频视频播放涉及到音视频同步是一个 复杂的技术。
学习一个技术,需要一个高效的方法,只有不断的实践才能理解深刻。学习FFmpeg我们也需要好的文档来学习,下面列举一些必备的学习文档地址:


上述都是英文的文档,如果英文学习困难,可以参考下面的中文资料:


此外推荐两本非常好的书籍:

  • FFmpeg从入门到精通
  • 音视频开发进阶指南:基于Android与iOS平台的实践

1. FFmpeg简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPLGPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpegLinux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括WindowsMac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"

一个伟大的软件产生必定有它的一段传奇历史,FFmpeg的创建者是法国天才程序员Fabrice Bellard (法布里斯*贝拉)在 2000年是开发出初版;

法布里斯*贝拉:

  1. 高中就读期间开发了著名的可执行压缩程序LZEXE
  2. 2000年创建了FFmpeg项目
  3. 2011年,他用JavaScript写了一个Linux虚拟机(JSLinux)
  4. 他还是QEMU,TinyCC 的作者

2004年,迈克尔(Michael Niedermayer)接管FFmpeg, 迈克尔将滤镜子系统libavfilter 加入FFmepg项目中,使得FFmpeg的多媒体处理更加多样,更加方便。在FFmpeg发布了0.5版本后,很长一段时间没有进行新版本的发布,直到后来FFmpeg采用Git作为版本控制服务器以后才开始继续更新发布版本。

2011年3月, 由于FFmpeg项目中有一些提交者对FFmpeg的项目管理方式和发展方向不一致,FFmpeg团队分成了两派,其中一派认为FFmpeg应该更加专注于音视频开发,研究更新先进的音视频技术,这些人重新创建了一个新的项目叫Libav。 另外一派认为他们要兼顾老的FFmpeg技术,然后逐步发展。

2015年8月迈克尔主动辞去FFmpeg项目负责人的职务。迈克尔从Libav中移植了大量的代码和功能到FFmpegZhong , 从此Libav又和FFmpeg合并一起发展。

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

2. FFmpeg能做什么

  • 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等
  • 视频采集功能: ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

    在Linux平台上,ffmpegV4L2的视频设备提供了很好的支持,如:./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp 以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为H263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。
    在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

    视频格式转换功能:
  1. ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。
  2. ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成视频网站所采用的flv格式。

    视频截图功能:
  3. 对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。
  4. 给视频加水印功能
  5. 使用ffmpeg 视频添加水印(logo)。

我们先看一下一张FFmpeg的架构图:

下载好的源码&#x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值