转载:

作者: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相关推荐

  1. H264编码 封装成MP4格式 视频流 RTP封包

    From:http://www.cnblogs.com/ghw-NO1/archive/2012/08/28/2660848.html 一.概述 本文讲述的是对H264编码且封装成MP4格式的视频流进 ...

  2. ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC

    ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC https://blog.csdn.net/King1425/article/details/71180330 音 ...

  3. 视频编码 MPEG2 MPEG4 DIVX Xvid H264 VC1封装格式MKV AVI RMVB MPG TS解析

    mkv和avi的格式只是封装容器,里面封装的是视频流+音频流.容器不会影响画面质量,影响质量的是容器里面封装的什么东西.所以你换换容器,而里面的东西不换的话,对清晰度字幕音频等是没有影响的. 补充一下 ...

  4. yuv编码成h264格式写成文件

    yuv编码成h264格式写成文件 (使用ffmpeg 编码yuv420p编码成h264格式) #include <stdio.h> #include <stdlib.h> #i ...

  5. H264文件封装MP4文件

    推荐一篇优秀的博文.对于MP4的初学者很有用:MP4文件格式解析_chenchong_219的博客-CSDN博客_mp4格式 对于这篇博文最后 Sample Table Box部分我想做一些补充,如有 ...

  6. 用x264和ffmpeg将YUV编码为.h264(1)

    参考: 1.http://blog.csdn.net/leixiaohua1020/article/details/25430425 2.http://blog.csdn.net/leixiaohua ...

  7. 视频编码 MPEG2 MPEG4 DIVX Xvid H264 VC1封装格式MKV AVI RMVB MPG TS扫盲

    先简单说一下,mkv和avi的格式只是封装容器,里面封装的是视频流+音频流.容器不会影响画面质量,影响质量的是容器里面封装的什么东西.所以你换换容器,而里面的东西不换的话,对清晰度字幕音频等是没有影响 ...

  8. 使用ffmpeg开源库将h264封装为mp4格式

    最近一直在做使用ffmpeg关于读取标准h264格式内存如何封装为mp4格式文件,在经过一周的持续奋战之后在网上找了一些代码,特别的雷神的博客让我获益匪浅,开始不知道如何持续读取发送来的内存块,如何边 ...

  9. 使用mp4v2将aac音频h264视频数据封装成mp4开发心得

    这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块.开始使用avi作为容器,弄了半天无奈avi对aac的支持实在有限,在播放时音视频时无法完美同步. 关于这点avi文档中有提到: For AAC, ...

  10. 标准G726音频解码和与H264视频封装为avi

    avilib库并不能直接支持G726音频的封装,源码中只支持G711A.G711U和MULAW_PCM,但查看源码可发现,avilib其实也是将G711U等音频先解码为16位linear PCM,再将 ...

最新文章

  1. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
  2. 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...
  3. 开发日记-20190602 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  4. C语言经典算法 21-30
  5. 机器学习基石13-Hazard of Overfitting
  6. python画画用哪库好_小白开始学Python最著名的绘图库
  7. 认清一个人,看这四点就够了
  8. 苹果Mac所有端口说明,将配件连接到 Mac
  9. Linux设置免密登录
  10. 用单片机蜂鸣器播放音乐
  11. 一键获取阿里巴巴主图视频细节图评论图的步骤
  12. python pickle文件大小_无法在Python中加载以前转储的大尺寸pickle文件
  13. Android 传感器概述
  14. 付费版百度指数 就是这么坑爹
  15. MSTAR 数据转格式
  16. keras如何自定义损失函数(进阶版,not of the form of f(x_true, x_pred))
  17. c语言自定义标识符do,C语言基础知识习题
  18. java唱哪首歌好听_非常适合KTV演唱的100首新歌,Hold住全场,非常好听!
  19. Linux FrameBuffer(一) —— FrameBuffer是什么?怎么用?
  20. 优秀课件笔记之薪酬管理

热门文章

  1. java十进制_JAVA 十进制 转换成 三进制
  2. 用计算机打课程表,怎么用电脑做课程表
  3. 习题5.4 找出4*5矩阵中值最小和最大元素,并分别输出其值及所在的行号和列号。
  4. [分享]一次中移物联网校园招聘javaweb的笔试题
  5. 微信小问题2021-10-14
  6. H5点击触摸测试,点击延迟测试,点击触摸时长测试案例
  7. keil编译错误:Error:Flash DownLoad failed - “Cortex-M4“
  8. 实力认证!Coremail连续9次入围安全牛《中国网络安全行业全景图》
  9. 360测绘云Quake网络空间测绘系统双领域上榜“安全牛”
  10. 正北坐标系和车辆坐标系下的heading转换