1.AAC,MP3他的解码数据格式不支持,程序中给的是这个AV_SAMPLE_FMT_FLTP,  Screen-Cpature-Recoder的codec-id为AV_CODEC_RAW_VIDEO,virtual-audio-capturer的codec-id为AV_CODEC_FIRST_AUDIO,声音默认的数据格式不支持aac,mp3

2.mp4文件解码 25fps的视频,在写完write header之后,time_base是1/12800
也就是说他的dts/pts 间隔512,比如0,512,1024,1536
公式如下:
1.0 / (512* 1 / 12800) = 25 fps

3.我们在自己组织MP4的时候实际上可以用av_get_time()来定义dts,pts。

公式为   (av_get_time() / 1000 - enc_start_time) / time_base;     time_base分别对应相应stream的 video,audio的time_base

4.在编码的时候,有AVFrame这个变量,而这个根据提示需要把pix_fmt设置成YUV_420P

5. video时CodecContext的有效拷贝:

void CopyVideoCodecContext(AVCodecContext* decAvc, AVCodecContext* avc)
{
avc->pix_fmt = decAvc->pix_fmt;
avc->width = decAvc->width;
avc->height = decAvc->height;
avc->coded_width = decAvc->width;
avc->coded_height = decAvc->height;
avc->gop_size = 30;//decAvc->gop_size;
avc->max_b_frames = decAvc->max_b_frames;
avc->sample_aspect_ratio = avc->sample_aspect_ratio; avc->bit_rate = decAvc->bit_rate;
avc->time_base = decAvc->time_base;
avc->framerate = decAvc->framerate; }

audio时CodecContext的有效拷贝:

void CopyAudioCodecContext(AVCodecContext* decAvc, AVCodecContext* avc)
{
avc->sample_fmt = decAvc->sample_fmt;
avc->bit_rate = decAvc->bit_rate;
avc->sample_rate = decAvc->sample_rate;
avc->channel_layout = decAvc->channel_layout;
avc->time_base = decAvc->time_base;
avc->channels = av_get_channel_layout_nb_channels(decAvc->channel_layout);
}

6.关于导出MP4文件 dts和pts取值问题,2种方式:

1.使用(av_gettime() / 1000.0 - (double)audiostart_time) / 1000.f / av_q2d(ast->time_base);   这种方式视频报错,原因可能是编码时有高延迟导致的帧率不均匀。

2.给顶一个frameid,然后  dts =(frameid-2)*512,pts =   frameid* 512;  frameid++; 声音比较均匀,就用上面的方式就可以。

ffmpeg一些笔记: 代码调试数据的更多相关文章

  1. 初识 Javascript.02 -- Date日期、Math对象、数据类型转换、字符串、布尔Boolean、逻辑运算符、if else 、三元表达式、代码调试方法、

    Date()对象: Date对象用于处理日期和时间. 1.1 Math对象  ◆Math.ceil()   天花板函数    向上取整  只取整数,不足则进1 ◆Math.floor()  地板函数 ...

  2. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  4. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  5. ffmpeg从AVFrame取出yuv数据到保存到char*中

    ffmpeg从AVFrame取出yuv数据到保存到char*中   很多人一直不知道怎么利用ffmpeg从AVFrame取出yuv数据到保存到char*中,下面代码将yuv420p和yuv422p的数 ...

  6. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  7. OI中的代码调试

    作为一位OIer,代码调试的能力必不可少. 今天梳理一下自己进行代码调试的方法,下面只是一些个人的总结. 代码的评价有三部分: 正确性 强健性 高效性 检查也应该从这三部分出发. [正确性] 打完代码 ...

  8. 用VScode代码调试Python

    Python扩展支持许多类型的Python应用程序的调试,包括以下一般功能: 观看窗口 评估表达式 当地人 参数 扩大孩子 断点 条件断点 暂停(进入)正在运行的程序 自定义启动目录 要熟悉这些常规功 ...

  9. js脚本代码调试小技巧

    以前写js代码调试代码查看数据是否正确的时候不知道F12(开发者工具),都是alert(xxx)或者console.log(xxx), 现在知道还可以用document.write或者try...ca ...

  10. (转) 从ffmpeg中提取出YUV数据

    有时需要从ffmpeg中提取出YUV数据用作预览,另存什么的. ffmpeg是先解码成YUV, 再以这个YUV作为输入进行编码,所以YUV数据有两种:  解码后的YUV数据, 以及  编码重建的YUV ...

随机推荐

  1. HTML——input之复选框

    在 HTML 中,把 <input> 标签中的 type 属性设置为 checkbox 可以实现多选框的效果.具体语法格式如下: <input type="checkbox ...

  2. WPF开发快速入门【0】前言与目录

    前言 WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方: 1.由于操作系统没有自带Framework,需要另外安装,比较麻烦: 2.程序第一次启动时,由于要加载Fr ...

  3. 跨域问题服务端解决办法 Request header field Authorization is not allowed by Access-Control-Allow-Headers

    跨域问题服务端解决办法 一般在入口文件加 header('Access-Control-Allow-Origin:*');// 响应类型header('Access-Control-Allow-Met ...

  4. Centos7安装Nginx教程,一步安装http和https

    nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...

  5. C#异步编程是怎么回事(番外)

    在上一篇通信协议碰到了多线程,阻塞.非阻塞.锁.信号量...,会碰到很多问题.因此我感觉很有必要研究多线程与异步编程. 首先以一个例子开始 我说明一下这个例子. 这是一个演示异步编程的例子. 输入jo ...

  6. C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证

    C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证 参考了:https://www.cnblogs.com/-dawn/p/8598566.html GetLog4netI ...

  7. 鸿蒙HarmonyOS实战-窗口管理

    前言 窗口管理是指计算机操作系统中管理和控制窗口的一种机制.窗口管理器负责处理窗口的创建.关闭.移动.调整大小等操作,并且决定窗口的位置.层级.是否可见.是否接收用户输入等属性.窗口管理器还负责绘制窗 ...

  8. Idea克隆检出git项目

    1.我这里假设你已经安装好了Idea和Git环境 2. .

  9. 一个开源且全面的C#算法实战教程

    前言 算法在计算机科学和程序设计中扮演着至关重要的角色,如在解决问题.优化效率.决策优化.实现计算机程序.提高可靠性以及促进科学融合等方面具有广泛而深远的影响.今天大姚给大家分享一个开源.免费.全面的 ...

  10. C# .NET core Avalonia 11.0版本,发布linux和MAC的简单记录

    .net core 7.0+centos 7.0 cetnos目前运行在hyper V虚拟机里 虚拟机部署的注意事项 1 需要配置网络环境, 确保在同一局域网下 如果sftp无法连接 ctrl+shi ...