如何强制ffmpeg编码时输出一个关键帧

http://blog.csdn.net/ashlingr/article/details/7829429

如何强制ffmpeg编码时输出一个关键帧

AVCodecContext *c     //编码器环境句柄
AVFrame* f //需要编码的一帧视频
/*在avcodec.h文件中有这样的定义
#define FF_I_TYPE  1 ///< Intra
#define FF_P_TYPE  2 ///< Predicted
#define FF_B_TYPE  3 ///< Bi-dir predicted
#define FF_S_TYPE  4 ///< S(GMC)-VOP MPEG4
#define FF_SI_TYPE 5 ///< Switching Intra
#define FF_SP_TYPE 6 ///< Switching Predicted
#define FF_BI_TYPE 7
*/
在编码前设置
f->pict_type=FF_I_TYPE; 
f->key_frame=1; 
注:该帧为I帧时,f->pict_type==FF_I_TYPE  && f->key_frame==1
然后编码
*outsize = avcodec_encode_video(c, temp, outbuf_size, f);
则编码之后通过如下参数判断是否为关键帧:
key_frame=c->coded_frame->key_frame; 
pict_type=c->coded_frame->pict_type;
key_frame==FF_I_TYPE && pict_type==1
参考:http://www.ffmpeg.com.cn/index.php/

时间: 2024-08-09 20:32:29

如何强制ffmpeg编码时输出一个关键帧的相关文章

ffmpeg编码h264只包含I帧P帧的方法

ffmpeg使用avcodc_encode_video编码,默认产生的h264包含B帧,在安防行业很多地方是不需要用到B帧的. 1.基础知识充电 这就涉及到h264的各种profile格式了,参考 h264各种profile h264分4种等级(profile):Baseline.Main.Extended.High Baseline profile:支持I帧P帧 Main profile:支持I/P/B/SP/SI帧 Extended profile:支持I/P/B帧 High profile

当你编码时你在做什么:谈编程的本质(一)状态机

当你编码时你在做什么:谈编程的本质(一)状态机 这学期学习了两门有意思的课,Theory of Computation和Distributed System,一低一高完全两个层次上的分支,却意外地发现两者在理论方面的重叠--那就是状态机.在Theory of Computation中,DFA.NFA.Turing Machine都是非常经典的State Machine,而在Distributed System中,Global State的确定.一致性协议的Replicated State Mac

FFMPEG编码debug模式没问题,release模式报错

FFMPEG编码debug模式没问题,release模式报错 我在做"火灾监控预警软件"时编译工程,需要使用ffmpeg对H264码流解码.发现在用到ffmpeg debug版本运行正常,切换到release时,出现"无法定位程序输入点?...于动态链接库avcodec-56.dll". 我是直接从http://ffmpeg.zeranoe.com/builds/网站上下好的已经编译通过的dll.当时我就怀疑dll只是debug模式下编译的,而非release版本.

解决JavaScript的属性innerHTML不能在页面交互时输出的问题(转载)

注:问题:JavaScript的innerHTML不能在页面交互时输出(即人机实时交互数据不能通过javascript的innerHTML属性输出) 解决方案:自建一个函数:set_innerHTML(obj_id, html, time). 有了这个方法,原来这样写:     document.getElementById("sch_nameArea").innerHTML= text 的地方就可以写成这样: set_innerHTML('sch_nameArea',text); s

For循环输出一个表格

<!-- 作者:郑伟钊 时间:2017-01-16 描述:通过一个循环的嵌套输出一个表格 --> <?php header("Content-type:text/html;charset=utf-8"); //如果不加这一行,输出的中文会乱码 echo '<table border="1px" width="800" align="center">' ; //设置表格的边框为1px,宽度为800(

第二次实验判断成绩等级。 给定一百分制成绩,要求输出成绩的等级。90以上为A,80-89为B,70-79为C,60-69为D,60分以下为E,输入大于100或小于0时输出“输入数据错误”。 分别用if和用switch语句实现判断成绩等级。 给定一百分制成绩,要求输出成绩的等级。90以上为A,80-89为B,70-79为C,60-69为D,60分以下为E,输入大于100或小于0时输出“输入数据错误”

一:实验内容:1:判断成绩等级. 给定一百分制成绩,要求输出成绩的等级.90以上为A,80-89为B,70-79为C,60-69为D,60分以下为E,输入大于100或小于0时输出“输入数据错误”. 分别用if和用switch语句实现 #include <stdio.h> int main() { int grade; scanf("%d",&grade); if(grade>100||grade<0) { printf("数据错误")

缩放窗口时随一个div宽度设置另一个div的宽度

1.获取页面的宽度 window.onresize=findDimensions;    function findDimensions() //函数:获取尺寸    {    //结果输出至两个文本框        $("#heightscrollbardivtwo").width($("#heightscrollbardiv").width()+22);    } 缩放窗口时随一个div宽度设置另一个div的宽度,布布扣,bubuko.com

【转】重复输出一个给定的字符串的几种方法

方法1:通过 `while` 循环重复输出一个字符串 解题思路:while 语句只要指定的条件计算结果为true的时候,就执行其语句.while 语句的语法是这样的: 1 while (expression) 2 statement 在每次通过循环之前计算条件结果.如果条件为true,则执行语句.如果条件为false,则执行继续 while 循环之后的任何语句. 只要条件为true,语句就会执行. 这里是解决方案: function repeatString(str, times) { //空字

JavaScript面试题:重复输出一个给定的字符串

面试题 重复输出一个给定的字符串(str第一个参数)n 次 (num第二个参数),如果第二个参数num不是正数的时候,返回空字符串. function repeatStringNumTimes(str, num) { return str; } repeatStringNumTimes("abc", 3); 提供测试情况: repeatStringNumTimes("*", 3) //应该返回 "***". repeatStringNumTime