YUV编码为H264 H264封装为MP4
转载:
作者:DaveBobo
来源:CSDN
原文:https://blog.csdn.net/DaveBobo/article/details/79648900
1 、YUV编码为H264
YUV编码为H264有两种方式:
(1)基于FFMPEG调用libx264实现YUV420P的像素数据编码为H.264的压缩编码数据;
(2)直接调用libx264将输入的YUV数据编码为H.264码流文件;
1.1 基于FFmpeg YUV编码为H264
使用FFmpeg编码视频涉及的主要函数:
av_register_all():注册FFmpeg所有编解码器。
avformat_alloc_output_context2():初始化输出码流的AVFormatContext。
avio_open():打开输出文件。
av_new_stream():创建输出码流的AVStream。
avcodec_find_encoder():查找编码器。
avcodec_open2():打开编码器。
avformat_write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
avcodec_encode_video2():编码一帧视频。即将AVFrame(存储YUV像素数据)编码为AVPacket(存储H.264等格式的码流数据)。
av_write_frame():将编码后的视频码流写入文件。
flush_encoder():输入的像素数据读取完成后调用此函数。用于输出编码器中剩余的AVPacket。
av_write_trailer():写文件尾(对于某些没有文件头的封装格式,不需要此函数。比如说MPEG2TS)。
1.2 直接调用libx264 YUV编码为H264
调用libx264进行视频编码涉及的主要函数:
x264_param_default():设置参数集结构体x264_param_t的缺省值。
x264_picture_alloc():为图像结构体x264_picture_t分配内存。
x264_encoder_open():打开编码器。
x264_encoder_encode():编码一帧图像。
x264_encoder_close():关闭编码器。
x264_picture_clean():释放x264_picture_alloc()申请的资源。
存储数据的结构体如下所示。
x264_picture_t:存储压缩编码前的像素数据。
x264_nal_t:存储压缩编码后的码流数据。
2 、H264封装为MP4
H264封装为MP4有两种方式:
(1)基于FFmpeg使用mp4封装格式封装视频数据;(这种方式效率较低)
(2)根据MP4文件协议直接将H264包封装成MP4格式,通过Mp4v2可以很方便的将H264编码成MP4格式文件
2.1 基于FFmpeg使用mp4封装格式封装视频数据、
使用FFmpeg编码视频涉及的主要函数:
avcodec_register_all(); av_register_all(); 注册
avformat_alloc_output_context2(); 初始化
avio_open(); 打开文件
avformat_new_stream(); 初始化视频码流
为CodecContext 设置参数
avcodec_find_encoder(); 寻找编码器并打开编码器
avcode_open2();
av_frame_alloc(); 初始化帧
avformat_write_header(); 写文件头
avcodec_encode_video2(); 循环编码
flush_encoder(); flush encoder
av_write_traler(); 写文件尾
avcodec_close(); av_free() avio_close() avformat_free_context() fclose(); 各种释放内存,关闭文件
简单记录一下,主要是方便自己随时查看。查看源码,还需访问原博文。
YUV编码为H264 H264封装为MP4相关推荐
- H264编码 封装成MP4格式 视频流 RTP封包
From:http://www.cnblogs.com/ghw-NO1/archive/2012/08/28/2660848.html 一.概述 本文讲述的是对H264编码且封装成MP4格式的视频流进 ...
- ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC
ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC https://blog.csdn.net/King1425/article/details/71180330 音 ...
- 视频编码 MPEG2 MPEG4 DIVX Xvid H264 VC1封装格式MKV AVI RMVB MPG TS解析
mkv和avi的格式只是封装容器,里面封装的是视频流+音频流.容器不会影响画面质量,影响质量的是容器里面封装的什么东西.所以你换换容器,而里面的东西不换的话,对清晰度字幕音频等是没有影响的. 补充一下 ...
- yuv编码成h264格式写成文件
yuv编码成h264格式写成文件 (使用ffmpeg 编码yuv420p编码成h264格式) #include <stdio.h> #include <stdlib.h> #i ...
- H264文件封装MP4文件
推荐一篇优秀的博文.对于MP4的初学者很有用:MP4文件格式解析_chenchong_219的博客-CSDN博客_mp4格式 对于这篇博文最后 Sample Table Box部分我想做一些补充,如有 ...
- 用x264和ffmpeg将YUV编码为.h264(1)
参考: 1.http://blog.csdn.net/leixiaohua1020/article/details/25430425 2.http://blog.csdn.net/leixiaohua ...
- 视频编码 MPEG2 MPEG4 DIVX Xvid H264 VC1封装格式MKV AVI RMVB MPG TS扫盲
先简单说一下,mkv和avi的格式只是封装容器,里面封装的是视频流+音频流.容器不会影响画面质量,影响质量的是容器里面封装的什么东西.所以你换换容器,而里面的东西不换的话,对清晰度字幕音频等是没有影响 ...
- 使用ffmpeg开源库将h264封装为mp4格式
最近一直在做使用ffmpeg关于读取标准h264格式内存如何封装为mp4格式文件,在经过一周的持续奋战之后在网上找了一些代码,特别的雷神的博客让我获益匪浅,开始不知道如何持续读取发送来的内存块,如何边 ...
- 使用mp4v2将aac音频h264视频数据封装成mp4开发心得
这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块.开始使用avi作为容器,弄了半天无奈avi对aac的支持实在有限,在播放时音视频时无法完美同步. 关于这点avi文档中有提到: For AAC, ...
- 标准G726音频解码和与H264视频封装为avi
avilib库并不能直接支持G726音频的封装,源码中只支持G711A.G711U和MULAW_PCM,但查看源码可发现,avilib其实也是将G711U等音频先解码为16位linear PCM,再将 ...
最新文章
- python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
- 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...
- 开发日记-20190602 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- C语言经典算法 21-30
- 机器学习基石13-Hazard of Overfitting
- python画画用哪库好_小白开始学Python最著名的绘图库
- 认清一个人,看这四点就够了
- 苹果Mac所有端口说明,将配件连接到 Mac
- Linux设置免密登录
- 用单片机蜂鸣器播放音乐
- 一键获取阿里巴巴主图视频细节图评论图的步骤
- python pickle文件大小_无法在Python中加载以前转储的大尺寸pickle文件
- Android 传感器概述
- 付费版百度指数 就是这么坑爹
- MSTAR 数据转格式
- keras如何自定义损失函数(进阶版,not of the form of f(x_true, x_pred))
- c语言自定义标识符do,C语言基础知识习题
- java唱哪首歌好听_非常适合KTV演唱的100首新歌,Hold住全场,非常好听!
- Linux FrameBuffer(一) —— FrameBuffer是什么?怎么用?
- 优秀课件笔记之薪酬管理
热门文章
- java十进制_JAVA 十进制 转换成 三进制
- 用计算机打课程表,怎么用电脑做课程表
- 习题5.4 找出4*5矩阵中值最小和最大元素,并分别输出其值及所在的行号和列号。
- [分享]一次中移物联网校园招聘javaweb的笔试题
- 微信小问题2021-10-14
- H5点击触摸测试,点击延迟测试,点击触摸时长测试案例
- keil编译错误:Error:Flash DownLoad failed - “Cortex-M4“
- 实力认证!Coremail连续9次入围安全牛《中国网络安全行业全景图》
- 360测绘云Quake网络空间测绘系统双领域上榜“安全牛”
- 正北坐标系和车辆坐标系下的heading转换