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 ...
随机推荐
- 强!推荐一款开源接口自动化测试平台:AutoMeter-API !
在当今软件开发的快速迭代中,接口自动化测试已成为确保代码质量和服务稳定性的关键步骤. 随着微服务架构和分布式系统的广泛应用,对接口自动化测试平台的需求也日益增长. 今天,我将为大家推荐一款强大的开源接 ...
- css做多列瀑布流
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- vue移动端 滚动
better-scroll: https://better-scroll.github.io/docs/zh-CN/guide/ 影院列表数据使用better-scroll来完成数据的展示,此插件对于 ...
- Ubuntu 上使能 SELinux
首发公号:Rand_cs 此文档说明如何在 ubuntu 上启用 SELinux,测试环境为虚拟机,开始前一定一定一定先来个快照,不要问我为什么有三个一定. 卸载 apparmor(可选) ubunt ...
- 鸿蒙HarmonyOS实战-窗口管理
前言 窗口管理是指计算机操作系统中管理和控制窗口的一种机制.窗口管理器负责处理窗口的创建.关闭.移动.调整大小等操作,并且决定窗口的位置.层级.是否可见.是否接收用户输入等属性.窗口管理器还负责绘制窗 ...
- echarts柱状图横(x)轴文字显示不全,一招解决
柱状图底部X轴文字过长时,将会出现文字显示不全的问题,这是echarts为了美观默认的设置 现在我们把文章倾斜旋转点角度即可全部显示 以下是代码 scale() { var chartDom = do ...
- perfers-color-scheme 使用简单介绍
perfers-color-scheme 简介 prefers-color-scheme 媒体查询属性用于检测用户操作系统是否使用深色模式. 属性值 dark 表示用户操作系统使用深色模式 light ...
- java中判断一个String字符串或字符数组中包含某个字段
/** * 判断String字符串中包含某个字段 * @param oriStr 原始字符串 * @return */ private static boolean findString(String ...
- redis zset 延迟合并任务处理
redis zset 延迟合并任务处理 @Autowired public RedisTemplate redisTemplate; ##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理. ...
- CountDownLatch demo演示数据分片多线程处理
# CountDownLatch demo演示数据分片多线程处理 package com.example.core.mydemo; import org.springframework.schedul ...