计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长,

再从stsz box中取得sample总数,即总帧数sample_count,用总帧数除以总时长即平均帧率,计算公式为

frame_rate = sample_count/(duration/timescale)

解决方法:通过查询mp4帧率计算得到答案:

AVDictionary* opt = NULL;

av_dict_set(&opt, "video_track_timescale", "90000", 0);

备注:

AVDictionary *opt=NULL;
av_dict_set_int(&opt,"video_track_timescale",25,0);
ret=avformat_write_header(ofmt_ctx,&opt);
而且pts只能+1递增。时间基没有设置也能十分正常播放。

timescale指一秒钟按时钟滴答数计算是多少,如果你设置1000,则一秒钟是以1000计算,你设置成25,那一秒钟就以25计算,所以你pts只能+1。 因为你设置了video_track_timescale所以不需要设置时间基

保存帧:

int mp4savePacket(int status,AVPacket *tmppacket){tmppacket->flags |= AV_PKT_FLAG_KEY;tmppacket->pts +=last_pts;// tmppacket->pts = av_rescale_q((frame_num)*30000, outfmt_ctx->streams[0]->codec->time_base,outfmt_ctx->streams[0]->time_base);//替换了frame_num++;tmppacket->dts += last_dts;tmppacket->stream_index = 0;tmppacket->duration=1;LOGE(3,"record_status ok,record_status = %d frame index %d %d %d\n",record_status,frame_num, tmppacket->duration,tmppacket->pts);//LOGE(3,"mpacket, 16Byte = %d,%d ",tmppacket.data[0],tmppacket.data[1]);av_interleaved_write_frame(outfmt_ctx, tmppacket);av_free_packet(tmppacket);

https://blog.csdn.net/jacke121/article/details/74011625

ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢相关推荐

  1. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决

    计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长, 再从stsz box中取得sample总数,即总帧数sample_co ...

  2. FFmpeg解码H264裸流并转换成opencv Mat

    感谢雷霄骅博士的在中文视频编解码的付出,http://blog.csdn.net/leixiaohua1020 最近要搞一些视频推流的事情,要解析H264裸流并且获取opencv格式的Mat数据给算法 ...

  3. 编码为H264裸流并写文件一

    为什么说是裸流呢,因为这篇只讲到把视频编码后写入文件,得到的是一个后缀应该为".h264"的文件,只能用PotPlayer等功能强大的播放器才能打开,因为它没有容器信息,需要装在M ...

  4. 基于FFmpeg H264 + G711A 音视频裸流合并 MP4文件 ( G711A 转 AAC)

    https://blog.csdn.net/haiyangyunbao813/article/details/101788264

  5. ffmpeg实现将H264裸流封装成.mp4或.avi文件

    ffmpeg学习历程 由于我是移植到arm-linux环境(海思HI3521A),H264裸流直接从海思的编码模块VENC获取. H264数据流序列:    SPS, PPS, SEI, I, P, ...

  6. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...

  7. 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...

  8. h264 裸流打包成mp4 注意事项

    需求: Android 端把网络摄像头的一段正在播放的视频流,截取保存成mp4(按录像按钮时开始录像). 实现: ffmpeg + x264 + sdl; h264 裸流 打包成MP4,在网上也有一大 ...

  9. H264视频编码成MP4文件

    http://blog.csdn.net/firehood_/article/details/8813587 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近需要将H264视频编码成MP4格 ...

最新文章

  1. Firefox 将导入 Windows 根证书,避免与杀毒软件的冲突
  2. docker 部署mysql服务之后,执行sql脚本
  3. java新建测试程序_java – 如何创建一个CloseableHttpResponse对象来帮助测试?
  4. HTML5开发手机应用--viewport的作用--20150216
  5. MemoryStream类
  6. Miniconda管理多版本python环境
  7. SAP Fiori Lead应用中Accept按钮显示隐藏的逻辑
  8. 让软件自己写软件,英特尔的机器编程会取代程序员吗?
  9. 2011 端午后,杭州支付宝
  10. mysql门派年龄最大的人_MySQL高级 第12章练习
  11. 子慕谈设计模式系列(一)
  12. jQuery学习笔记03
  13. 软硬件版本号命名规范及原则
  14. 浮层引导页Activity
  15. [走过的路]联想时光——人艰不拆(店员篇+推销员篇)
  16. OpenGL ES:相机预览添加滤镜效果
  17. [转载]《博客园精华集》WF筛选结果(共39篇)
  18. 关于gitlab启动后,浏览器git clone 还是localhost问题记录
  19. 业务范围(business area)
  20. SQLyog通过excel导入数据

热门文章

  1. MATLAB-向量相关计算
  2. 用C语言测试程序运行时间,c语言测试程序执行时间
  3. 2015 计算机考研大纲,2015年考研计算机大纲详解:操作系统
  4. 安卓后端mysql_后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
  5. Good Luck!_JAVA
  6. 小白视觉第一步保存图片
  7. Tomcat 部署项目的三种方法
  8. 关于Spring的构造函数,init-method,和依赖注入的先后顺序
  9. Java 泛型 super extends 边界
  10. Git远程库版本回滚