FFmpeg中与MPEG-4编码相关的主要文件有mpegvideo.c,h263.c等。

在mpegvideo.c中,
AVCodec mpeg4_encoder = {
   "mpeg4",
   CODEC_TYPE_VIDEO,
   CODEC_ID_MPEG4,
   sizeof(MpegEncContext),
   MPV_encode_init,
   MPV_encode_picture,
   MPV_encode_end,
    .pix_fmts=(enum PixelFormat[]){PIX_FMT_YUV420P, -1},
   .capabilities= CODEC_CAP_DELAY,
};

MPV_encode_picture()
{
 encode_picture();
}

encode_picture()
{
 //对每个宏块MB进行运动估计
 estimate_motion_thread();

encode_thread();
}

encode_thread()
{
 encode_mb_hq();
}

encode_mb_hq()
{
 encode_mb();
}

encode_mb()
{
 encode_mb_internal();
}

encode_mb_internal()
{
 //对单一的宏块进行运动补偿
 MPV_motion();

//DCT & quantize
 dct_quantize_c();

//huffman encode
 mpeg4_encode_mb();
}

帧内和帧间的量化矩阵在mpeg4data.h中
const int16_t ff_mpeg4_default_intra_matrix[64] = {
  8, 17, 18, 19, 21, 23, 25, 27,
 17, 18, 19, 21, 23, 25, 27, 28,
 20, 21, 22, 23, 24, 26, 28, 30,
 21, 22, 23, 24, 26, 28, 30, 32,
 22, 23, 24, 26, 28, 30, 32, 35,
 23, 24, 26, 28, 30, 32, 35, 38,
 25, 26, 28, 30, 32, 35, 38, 41,
 27, 28, 30, 32, 35, 38, 41, 45,
};

const int16_t ff_mpeg4_default_non_intra_matrix[64] = {
 16, 17, 18, 19, 20, 21, 22, 23,
 17, 18, 19, 20, 21, 22, 23, 24,
 18, 19, 20, 21, 22, 23, 24, 25,
 19, 20, 21, 22, 23, 24, 26, 27,
 20, 21, 22, 23, 25, 26, 27, 28,
 21, 22, 23, 24, 26, 27, 28, 30,
 22, 23, 24, 26, 27, 28, 30, 31,
 23, 24, 25, 27, 28, 30, 31, 33,
};

D、量化矩阵

mpeg中的量化是对8x8 YUV 信号图块进行DCT变换之后的系数的量化。通过对高频分量使用比较大的量化阶从而达到减小高频分量的编码空间,达到压缩的目的。代价就是丧失图像细节,边缘模糊等。

1)帧内编码量化矩阵:这是指对I帧使用的帧内编码量化矩阵

2)帧间编码量化矩阵:是指对非I帧的帧间预测误差编码所用的量化矩阵。威龙汉化版中叫外部矩阵

FFmpeg中MPEG-4编码程序追踪,其他FFMPEG自带编码器同理相关推荐

  1. FFMpeg中apiexample.c例子分析——编码分析

    FFMpeg中apiexample.c例子分析--编码分析apiexample.c例子教我们如何去利用ffmpeg库中的api函数来自己编写编解码程序. (1)首先,main函数中一开始会去调用avc ...

  2. FFMpeg中apiexample.c例子分析——解码分析

    FFMpeg中apiexample.c例子分析--解码分析 收藏 我们直接从 video_decode_example() 函数开始讲,该函数实现了如何去解码一个视频文件,以 .mpeg 文 件为例. ...

  3. FFmpeg 中文文档

    ffmpeg的中文文档 Posted on 13 Feb 2015   ffmpegDocuments   添加评论 ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. 概要 ...

  4. ffmpeg中文文档

    原文链接:https://wanglongqi.github.io/tools/2015/02/13/ffmpegcn/ ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. ...

  5. ffmpeg中的时间 DTS、PTS、AV_TIME_BASE、AV_TIME_BASE_Q 介绍

    ffmpeg中的时间 DTS.PTS.AV_TIME_BASE.AV_TIME_BASE_Q等介绍  原文:http://www.cnblogs.com/yinxiangpei/articles/38 ...

  6. ffmpeg中av_log的实现分析

    [时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,av_log, 日志输出] 0 引言 FFmpeg的libavutil中的日志输出的接口整体比较少,但是功能还是不错 ...

  7. FFmpeg中可执行文件ffmpeg用法汇总

    从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFmpeg,FFmpeg是一个快速的音频/视频转换工具,FFmpeg可以作为一个命令行 ...

  8. FFmpeg中可执行文件ffplay用法汇总

    从https://ffbinaries.com/downloads 下载最新的4.1版本的windows 64位FFplay.目前linux下的只有3.2版本的.FFplay是一个由FFmpeg和SD ...

  9. FFmpeg中AVDictionary介绍

    FFmpeg中的AVDictionary是一个结构体,简单的key/value存储,经常使用AVDictionary设置或读取内部参数,声明如下,具体实现在libavutil模块中的dict.c/h, ...

最新文章

  1. 一劳永逸,iOS 自定义 ActionSheet 封装流程
  2. java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例
  3. BCH为什么要把自身打造成多元化平台
  4. vector的初始化和遍历
  5. The7主题-汉化绿色版/免key导入demo/安装插件[更至v9.10.1]
  6. ROC曲线与AUC区域的理解与实践
  7. [转] Python标准库的threading.Thread类
  8. 卡西欧函数计算机广告词,卡西欧函数计算器,终身学习如有神助!
  9. Young不等式的一个新证明
  10. 《拥抱机器人时代——Servo杂志中文精华合集》——4.3 理解智能设备
  11. 'grunt' 不是内部或外部命令,也不是可运行的程序 或批处理文件
  12. 【Nuxt】nuxtjs脚手架的安装及问题解决
  13. kaptcha生成自定义图片验证码
  14. Forbidden什么意思
  15. golang中的并发竞争态
  16. python 爬取糗百
  17. 聚焦科技创新产业升级 中国联通和腾讯签署新战略合作协议
  18. Java实现蓝桥杯调和级数
  19. ios开发-文字绘制
  20. windows主题方面

热门文章

  1. 多线程编程 (1) -NSThread
  2. viewDidLoad、viewWillAppear、viewWillDisappear
  3. android应用开发全程实录-实现甩动拨打和挂断电话
  4. 创建表头固定,表体可滚动的GridView(转)
  5. 关于数字证书理解的简单整理以及12306站点证书简单分析
  6. 关于群论证明费马小定理?
  7. 浅谈Floyd的三种用法 By cellur925
  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...
  9. Kibana源码分析--Hapijs路由设置理解笔记
  10. 环信快速集成,以及实际集成中遇到的坑