音频编码

  • 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
  • 基于 FFMPEG 的音频编解码(二):音频解码
  • 基于 FFMPEG 的音频编解码(三):音频编码

在前面文章中,我们了解如何用 FFMPEG 进行音频解码,今天我们来讨论音频编码

一个很重要的概念是,编码与解码是一对逆过程。 回想一下,解码的时候我们是如何做的?下面代码是解码的关键部分:

av_read_frame(ctx, packet);
avcodec_send_packet(ctx, packet);
avcodec_receive_frame(ctx, frame);
  1. av_read_frame 从文件中读取一个 packet
  2. avcodec_send_packetpacket 送去解码
  3. avcodec_receive_frame 取回解码好的数据

编码的过程刚好是解码的逆过程,下面代码是编码的关键部分:

fill_data_to_frame(frame);
avcodec_send_frame(ctx, frame);
avcodec_receive_packet(ctx, packet);
  1. fill_data_to_frame 将数据填充至 frame
  2. avcodec_send_frameframe 送去编码
  3. avcodec_receive_packet 取回编码好的数据

Show me the code

FFMPEG 官方 examples 中有一份关于编码的示例 encode_audio.c,这份代码中,向我们展示了如何编码音频数据为 MP2 格式。

在我折腾这份代码时,发现它并不能编码例如 aac、flac、wav 等格式,输出的文件播放器不认识,而 mp1/mp2/mp3 却是能够打开并正常播放的。搜索一番后才找到原因,aac 等格式缺少音频文件头,这些必要信息的缺失导致无法正常播放,而 mp3 等格式有一种叫 frame header 来记录每一帧数据的信息,因此 encode_audio.c 编码后的文件,只有 mp3 等格式才能正常播放。

非常遗憾 encode_audio.c 并不是我们想要的,但这份代码中,有很多细节值得我们学习,例如判断是否支持当前采样率、判断是否支持当前采样格式、如何编码一个 frame 等。

事情变得稍微复杂了一些,我们不仅要知道如何编码数据,还需要知道如何写文件头。又是一番苦苦搜索,最终锁定了一份雷霄骅大神的代码(愿天堂没有代码

基于 FFMPEG 的音频编解码(三):音频编码相关推荐

  1. 音频编解码(软/硬编码),音频转码

    > 音频编解码(软编码) FFMpeg视频软件编解码的.B站的ijkplayer等. 音频数据的编解码- http://blog.51cto.com/ticktick/1760191 1.And ...

  2. Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、音频音量调节等

    前言 这篇博客,主要讲解的是android端的音频处理,在开发Android视频编辑器的时候,有一个非常重要的点就是音频的相关处理.比如如何从视频中分离音频(保存为mp3文件),然后分离出来的音频如何 ...

  3. 基于 FFMPEG 的音频编解码(二):音频解码

    音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...

  4. 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译

    Hello FFMPEG 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编 ...

  5. QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  6. [总结]FFMPEG视音频编解码零基础学习方法--转

    ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ff ...

  7. FFMPEG视音频编解码零基础学习方法

    总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...

  8. 音视频开发(5)---FFMPEG视音频编解码零基础学习方法

    FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...

  9. [总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然 ...

最新文章

  1. php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
  2. [全文索引]非索引字表
  3. html中 一条样式规则,css规则的基本格式是什么?
  4. java 验证码_如何使用Java生成随机验证码
  5. 大前端算法入门之二分查找
  6. Thinkphp3.2邮件发送
  7. C/C++中深浅拷贝(map、vector)与内存释放
  8. Unity WebGL自带VideoPlayer播放视频
  9. 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的
  10. 基于Pytorch版yolov5的滑块验证码破解思路
  11. 石头剪刀布程序流程图_民间传统体育游戏 | 石头剪刀布
  12. 开放微博社区使用OAUTH协议简介
  13. 无法直接安装Ubuntu16.04的Win10系统安装教程
  14. java写netcdf_[转]netcdf入门
  15. Android之模仿微信登陆界面(一)
  16. 计算图像每行占用的字节数
  17. 系统架构师论文-论软件架构的选择与应用
  18. java jtextarea边框_JTextArea在java swing中的边框
  19. 腾讯高级工程师保姆级“Java成长手册”,层层递进,全是精华
  20. 从0开始带你成为jvm实战高手(狸猫技术窝)

热门文章

  1. centos7全盘备份到本地_CentOS7 系统盘迁移案例【大硬盘迁移到小硬盘,新思路】...
  2. postgresql 创建用户_PostgreSQL创建用户和修改用户密码
  3. Linux(四):虚拟机Ubuntu 卸载
  4. linux变量存储命令,如何将命令存储在shell脚本中的变量中?
  5. 蒸汽管道图纸符号_库尔勒蒸汽连续动疏水装置(架空)(长输低能耗)
  6. MYSQL导出数据报错ERROR 1290 (HY000) 和 ERROR 1 (HY000)
  7. html制作搜狗主页,自学htmlcss之仿搜狗主页(示例代码)
  8. 重新启动计算机的方法有,电脑重新启动怎么办 重新启动解决方法介绍【详解】...
  9. 南京信息工程大学百科园c语言答案,南京信息工程大学822C/C++程序设计考研真题及笔记...
  10. 【BZOJ2120】数颜色,带修莫队