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. Android 13 - Media框架(3)- MediaPlayer生命周期

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节. 1.MediaPlayer ...

  2. 基于docker一键化部署LNMP环境

    cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...

  3. NOIP模拟49

    虚伪的眼泪,会伤害别人,虚伪的笑容,会伤害自己. 前言 暑假集训过后的第一次考试,成绩一般,没啥好说的 T1 Reverse 解题思路 看到这个题的第一眼就感觉是最短路,毕竟题目的样子就好像之前做过的 ...

  4. c# .net mvc 使用百度Ueditor富文本框上传文件(图片,视频等)

    使用背景: 项目中需要用的富文本框去上传视频,图片的话大部分都是可以的.相对来说,国外的富文本框很成熟.但鉴于文档是英语,这里使用了百度的富文本框. 采用的api的方式,调用接口进行上传文件.话不多说 ...

  5. 01-布局扩展-用calc来计算实现双飞翼布局

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  6. 在js、vue中使用方法调用a标签

    <el-button type="primary" style="width:130px" @click="shout"> &l ...

  7. 一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot

    前言 今天大姚给大家分享一款.NET开源(MIT License).免费.跨平台.功能强大的绘图库,支持多平台使用(包括:WPF.UWP.WinForm.Silverlight.Xamarin.iOS ...

  8. JS 过滤掉两个数组中对象id值相等的项

    const arr1 = [{ id: 1, name: '老二' }]; const arr2 = [{ id: 1, name: '网' }, { id: 2, name: '二位' },{ id ...

  9. MySQL GROUP BY 用法介绍

    MySQL 中 GROUP BY 用法 简介 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 可以把 分组理解成 Excel 中的分组. 把 合计函数理解成 Excel 中 ...

  10. ISO pod 使用

    pod 安装 相关依赖包 新建podfile 文件 pod init 编辑podfile文件添加第三方库 // pod '第三方依赖库名', '版本号' pod 'SDWebImageSwiftUI' ...