基于 FFMPEG 的音频编解码(三):音频编码
音频编码
- 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
- 基于 FFMPEG 的音频编解码(二):音频解码
- 基于 FFMPEG 的音频编解码(三):音频编码
在前面文章中,我们了解如何用 FFMPEG 进行音频解码,今天我们来讨论音频编码
一个很重要的概念是,编码与解码是一对逆过程。 回想一下,解码的时候我们是如何做的?下面代码是解码的关键部分:
av_read_frame(ctx, packet);
avcodec_send_packet(ctx, packet);
avcodec_receive_frame(ctx, frame);
av_read_frame
从文件中读取一个packet
avcodec_send_packet
将packet
送去解码avcodec_receive_frame
取回解码好的数据
编码的过程刚好是解码的逆过程,下面代码是编码的关键部分:
fill_data_to_frame(frame);
avcodec_send_frame(ctx, frame);
avcodec_receive_packet(ctx, packet);
fill_data_to_frame
将数据填充至frame
中avcodec_send_frame
将frame
送去编码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 的音频编解码(三):音频编码相关推荐
- 音频编解码(软/硬编码),音频转码
> 音频编解码(软编码) FFMpeg视频软件编解码的.B站的ijkplayer等. 音频数据的编解码- http://blog.51cto.com/ticktick/1760191 1.And ...
- Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、音频音量调节等
前言 这篇博客,主要讲解的是android端的音频处理,在开发Android视频编辑器的时候,有一个非常重要的点就是音频的相关处理.比如如何从视频中分离音频(保存为mp3文件),然后分离出来的音频如何 ...
- 基于 FFMPEG 的音频编解码(二):音频解码
音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...
- 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译
Hello FFMPEG 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编 ...
- QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)
QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ff ...
- FFMPEG视音频编解码零基础学习方法
总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...
- 音视频开发(5)---FFMPEG视音频编解码零基础学习方法
FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...
- [总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然 ...
最新文章
- php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
- [全文索引]非索引字表
- html中 一条样式规则,css规则的基本格式是什么?
- java 验证码_如何使用Java生成随机验证码
- 大前端算法入门之二分查找
- Thinkphp3.2邮件发送
- C/C++中深浅拷贝(map、vector)与内存释放
- Unity WebGL自带VideoPlayer播放视频
- 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的
- 基于Pytorch版yolov5的滑块验证码破解思路
- 石头剪刀布程序流程图_民间传统体育游戏 | 石头剪刀布
- 开放微博社区使用OAUTH协议简介
- 无法直接安装Ubuntu16.04的Win10系统安装教程
- java写netcdf_[转]netcdf入门
- Android之模仿微信登陆界面(一)
- 计算图像每行占用的字节数
- 系统架构师论文-论软件架构的选择与应用
- java jtextarea边框_JTextArea在java swing中的边框
- 腾讯高级工程师保姆级“Java成长手册”,层层递进,全是精华
- 从0开始带你成为jvm实战高手(狸猫技术窝)
热门文章
- centos7全盘备份到本地_CentOS7 系统盘迁移案例【大硬盘迁移到小硬盘,新思路】...
- postgresql 创建用户_PostgreSQL创建用户和修改用户密码
- Linux(四):虚拟机Ubuntu 卸载
- linux变量存储命令,如何将命令存储在shell脚本中的变量中?
- 蒸汽管道图纸符号_库尔勒蒸汽连续动疏水装置(架空)(长输低能耗)
- MYSQL导出数据报错ERROR 1290 (HY000) 和 ERROR 1 (HY000)
- html制作搜狗主页,自学htmlcss之仿搜狗主页(示例代码)
- 重新启动计算机的方法有,电脑重新启动怎么办 重新启动解决方法介绍【详解】...
- 南京信息工程大学百科园c语言答案,南京信息工程大学822C/C++程序设计考研真题及笔记...
- 【BZOJ2120】数颜色,带修莫队