m_fmt->video_codec = CODEC_ID_H264;

/* 添加视频流 */
m_video_st = av_new_stream(m_oc, 0);
if (!m_video_st) {
return 0;
}
m_videoc=avcodec_alloc_context();
m_videoc = m_video_st->codec;

/* 视频相关参数 */
m_videoc->codec_id = m_fmt->video_codec;
m_videoc->codec_type = CODEC_TYPE_VIDEO;
m_videoc->bit_rate = video_bitrate*1000;
m_videoc->width = video_width;
m_videoc->height = video_height;
m_videoc->time_base.den = 25;
m_videoc->time_base.num = 1;
m_videoc->dct_algo = 0;
m_videoc->gop_size = 12;
m_videoc->me_pre_cmp=2;
m_videoc->cqp = 26;
m_videoc->me_method =7;
m_videoc->qmin = 3;
m_videoc->qmax = 31;
m_videoc->max_qdiff = 3;
m_videoc->qcompress = 0.5;
m_videoc->qblur = 0.5;
m_videoc->nsse_weight = 8;
m_videoc->i_quant_factor = (float)0.8;
m_videoc->b_quant_factor = 1.25;
m_videoc->b_quant_offset = 1.25;

m_videoc->pix_fmt = PIX_FMT_YUV420P;//当前YUV420

if (m_videoc->codec_id == CODEC_ID_MPEG2VIDEO) {
m_videoc->max_b_frames = 2;
}
if (m_videoc->codec_id == CODEC_ID_MPEG1VIDEO){
m_videoc->mb_decision=2;
}

if(!strcmp(m_oc->oformat->name, "mp4")
|| !strcmp(m_oc->oformat->name, "mov")
|| !strcmp(m_oc->oformat->name, "3gp"))
//m_videoc->flags |= CODEC_FLAG_GLOBAL_HEADER;
m_videoc->flags |=CODEC_FLAG_QSCALE;

/* 检查参数是否设置完毕*/
    if (av_set_parameters(m_oc, NULL) < 0) {
return 0;
    }
    dump_format(m_oc, 0, filename, 1);

/* 所有视频设置完毕,打开视频解码器,并打开必要的编码缓冲器            */
    if (m_video_st){

AVCodec *video_codec;

/* 查找视频解码器 */
video_codec = avcodec_find_encoder(m_videoc->codec_id);
if (!video_codec) {
return 0;
}

/* 打开视频解码器 */
if (avcodec_open(m_videoc, video_codec) < 0) {
return 0;
}

video_outbuf = NULL;
if (!(m_oc->oformat->flags & AVFMT_RAWPICTURE)) {
/* allocate output buffer */
/* XXX: API change will be done */
/* buffers passed into lav* can be allocated any way you prefer,
as long as they're aligned enough for the architecture, and
they're freed appropriately (such as using av_free for buffers
allocated with av_malloc) */
video_outbuf_size = 200000;
video_outbuf = (uint8_t *)av_malloc(video_outbuf_size);

}

/* allocate the encoded raw picture */
picture = alloc_picture(m_videoc->pix_fmt, m_videoc->width, m_videoc->height);
if (!picture) {
return 0;
}

/* if the output format is not YUV420P, then a temporary YUV420P
picture is needed too. It is then converted to the required
output format */
tmp_picture = NULL;
if (m_videoc->pix_fmt != PIX_FMT_YUV420P) {
tmp_picture = alloc_picture(PIX_FMT_YUV420P, m_videoc->width, m_videoc->height);
if (!tmp_picture) {
return 0;
}
}

使用ffmpeg进行h.264编码相关推荐

  1. ffmpeg 向H.264编码的视频中添加 SEI

    SEI NALU数据格式 NALU 类型 1 字节 0x06 SEI 负载类型 1 字节 0x05 (用户自定义数据) 负载大小(uuid+自定义数据),如果大小 size 大于 255,前 int( ...

  2. 流媒体解码及H.264编码推流

    简介 相关理论 程序流程 Opencv解析视频流 像素格式转换 FFmpeg进行H.264编码 FFmpeg进行格式封装和推流 这里我们使用了FFmpge的sdk和Opencv的sdk.为了方便测试, ...

  3. 利用FFmpeg编码器将JPG图片进行H.264编码原理

    利用FFmpeg编码器将JPG图片进行H.264编码原理 文章目录 利用FFmpeg编码器将JPG图片进行H.264编码原理 整体的编码流程 将JPG或BMP编码为YUV 利用FFmpeg将YUV格式 ...

  4. ffmpeg解码H.264视频数据,MFC播放视频

    ffmpeg 是一个完整的视频流解决方案,开源且有良好的跨平台性,ffmpeg具有强大的多媒体数据处理能力,能够实现视频的采集,多种视频格式间转换,给视频添加水印等多种功能,已被 VLC.Mplaye ...

  5. FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  8. FFmpeg的H.264解码器源代码简单分析:解码器主干部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  9. FFmpeg的H.264解码器源代码简单分析:概述

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

最新文章

  1. mysql数据放在什么位置,mysql数据存放的位置在哪
  2. mysql连接编程环境_C++连接MySQL(一):环境配置和实例
  3. ABAP--关于重复行的处理
  4. CG CTF CRYPTO Keyboard
  5. 7-6 jmu-Java-02基本语法-06-枚举 (3 分)
  6. iOS界面设计之基础控件的学习 --- UITextField
  7. 真正的创业者和伪创业者的区别在哪里?
  8. 14个HTML5实现的效果合集
  9. windows 远程桌面mstsc的问题
  10. linux使用清华镜像安装numpy,NumPy 安装
  11. 判断拐点的条件_拐点的定义
  12. 强化学习笔记:马尔科夫链介绍及基于Python的蒙特卡洛仿真
  13. EasyCamera--更简单更灵活的相机应用编写
  14. iOS安装ipa文件
  15. Android刷机简明教程
  16. 基于C++和opengl实现太阳系动画演示系统 课程论文+项目源码
  17. java判断是否英文_java如何判断字符串是否是英文
  18. aardio - MsSql数据库+虚表示例
  19. 使用java,计算一段文本中出现英语单词次数最多的单词
  20. 2020年李永乐线性代数强化笔记-线性方程组

热门文章

  1. 【经验】Qt项目开发必备工具
  2. c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...
  3. 【EOJ Monthly 2019.02 - F】方差(数学,前缀和,积的前缀和)
  4. *【牛客 - 326B】背单词(线性dp)
  5. 【HDU - 2200】Eddy's AC难题(简单组合数学)
  6. 【CF#931.B】World Cup (思维,模拟)
  7. java date 相差_java 比较时间相差多少分钟
  8. 龙果学院mysql分布式集群代码_龙果学院-MySQL大型分布式集群解决方案
  9. ae toolbarcontrol运行时没有_想办法让AE跑起来
  10. layui 数据表格 日期格式化