ffmpeg一些笔记: 代码调试数据
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一些笔记: 代码调试数据的更多相关文章
- 初识 Javascript.02 -- Date日期、Math对象、数据类型转换、字符串、布尔Boolean、逻辑运算符、if else 、三元表达式、代码调试方法、
Date()对象: Date对象用于处理日期和时间. 1.1 Math对象 ◆Math.ceil() 天花板函数 向上取整 只取整数,不足则进1 ◆Math.floor() 地板函数 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- ffmpeg从AVFrame取出yuv数据到保存到char*中
ffmpeg从AVFrame取出yuv数据到保存到char*中 很多人一直不知道怎么利用ffmpeg从AVFrame取出yuv数据到保存到char*中,下面代码将yuv420p和yuv422p的数 ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- OI中的代码调试
作为一位OIer,代码调试的能力必不可少. 今天梳理一下自己进行代码调试的方法,下面只是一些个人的总结. 代码的评价有三部分: 正确性 强健性 高效性 检查也应该从这三部分出发. [正确性] 打完代码 ...
- 用VScode代码调试Python
Python扩展支持许多类型的Python应用程序的调试,包括以下一般功能: 观看窗口 评估表达式 当地人 参数 扩大孩子 断点 条件断点 暂停(进入)正在运行的程序 自定义启动目录 要熟悉这些常规功 ...
- js脚本代码调试小技巧
以前写js代码调试代码查看数据是否正确的时候不知道F12(开发者工具),都是alert(xxx)或者console.log(xxx), 现在知道还可以用document.write或者try...ca ...
- (转) 从ffmpeg中提取出YUV数据
有时需要从ffmpeg中提取出YUV数据用作预览,另存什么的. ffmpeg是先解码成YUV, 再以这个YUV作为输入进行编码,所以YUV数据有两种: 解码后的YUV数据, 以及 编码重建的YUV ...
随机推荐
- Android 13 - Media框架(3)- MediaPlayer生命周期
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节. 1.MediaPlayer ...
- 基于docker一键化部署LNMP环境
cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...
- NOIP模拟49
虚伪的眼泪,会伤害别人,虚伪的笑容,会伤害自己. 前言 暑假集训过后的第一次考试,成绩一般,没啥好说的 T1 Reverse 解题思路 看到这个题的第一眼就感觉是最短路,毕竟题目的样子就好像之前做过的 ...
- c# .net mvc 使用百度Ueditor富文本框上传文件(图片,视频等)
使用背景: 项目中需要用的富文本框去上传视频,图片的话大部分都是可以的.相对来说,国外的富文本框很成熟.但鉴于文档是英语,这里使用了百度的富文本框. 采用的api的方式,调用接口进行上传文件.话不多说 ...
- 01-布局扩展-用calc来计算实现双飞翼布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 在js、vue中使用方法调用a标签
<el-button type="primary" style="width:130px" @click="shout"> &l ...
- 一款.NET开源、功能强大、跨平台的绘图库 - OxyPlot
前言 今天大姚给大家分享一款.NET开源(MIT License).免费.跨平台.功能强大的绘图库,支持多平台使用(包括:WPF.UWP.WinForm.Silverlight.Xamarin.iOS ...
- JS 过滤掉两个数组中对象id值相等的项
const arr1 = [{ id: 1, name: '老二' }]; const arr2 = [{ id: 1, name: '网' }, { id: 2, name: '二位' },{ id ...
- MySQL GROUP BY 用法介绍
MySQL 中 GROUP BY 用法 简介 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 可以把 分组理解成 Excel 中的分组. 把 合计函数理解成 Excel 中 ...
- ISO pod 使用
pod 安装 相关依赖包 新建podfile 文件 pod init 编辑podfile文件添加第三方库 // pod '第三方依赖库名', '版本号' pod 'SDWebImageSwiftUI' ...