ffmpeg转码时对变帧率和固定帧率的处理
ffmpeg转码时对编码率和固定码率的处理
一般fps在代码里这样表示 Fps = den/num 如果den = 15,num=1,则fps = 15。 如果帧率固定,pts*fps 就表示当前是第几帧。 当输入视频流的帧率不固定,如rmvb ,而输出视频流的帧率固定,ffmpeg作如下处理(参考ffmpeg代码版本0.6.1): 1、 记录和输出视频流ost相对应的输入视频流ist,变量为ost->sync_ist。这是在av_transcode函数进行输出流初始化时进行的。代码分别为:
2、 记录输出视频流ost的时间戳。输出为固定帧率,故可以简化为记录帧数,变量为ost->sync_opts。 3、 将ost对应的ist的pts转换成固定帧率的帧数形式。代码为
get_sync_ipts计算ost对应的ist的pts, av_q2d返回enc->time_base.num/ enc->time_base.den,即1/fps. 4、 将sync_ipts和ost->sync_opts进行求差。
5、 根据vdelta来判断不同的情况。 l 情况一:Vdelta<-1.1,表示当前输入帧的播放时间在当前输出帧的前一帧之前,故舍弃该帧,nb_frames = 0。 l 情况二: (video_sync_method == 2 || (video_sync_method<0 && (s->oformat->flags & AVFMT_VARIABLE_FPS))){ if(vdelta<=-0.6){ nb_frames=0; }else if(vdelta>0.6) ost->sync_opts= lrintf(sync_ipts);} 这里video_sync_method==2 和video_sync_method < 0 表示什么意义,不是很清楚。貌似ffmpeg里video_sync_method一直设为-1。AVFMT_VARIABLE_FPS应该是变帧率的意思。这种情况下,vdelta<=0.6,表示位于当前帧之前,也舍弃该帧,nb_frames = 0;vdelta>0.6表示位于当前帧之后,直接把该帧的时间戳作为输出的时间出来输出该帧;0.6<vdelta<=0.6时,不做任何处理,nb_frames 根据默认值为1。 l 情况三:vdelta > 1.1 此时nb_frames = lrintf(vdelta),需要做插帧操作。 Ffmpeg的插帧操作,貌似是把当前输出帧重复输出nb_frames次。
输出的数据在pkt.data里,final_picture即为经过处理的输入Pic。 6、输出视频流的帧率,是从输入视频流的包头数据中获得的。Rmvb的vedio MDPR块里,保存有fps和fps2信息。Ffmpeg取fps作为帧率,fps2丢弃了。Fps2有什么用,还不清楚。介绍rmvb格式的文章里也没有看到过关于fps的任何介绍。 |
ffmpeg转码时对变帧率和固定帧率的处理相关推荐
- 关于FFmpeg对手机里拍摄的视频进行转码时角度问题的处理
手机在拍摄视频时,会记录下手机拍摄时的角度,这个角度会保存到视频文件里,使用ffprobe查看时,会看到rotate值,这值代表将手机顺时针旋转了rotate度进行拍摄的,下面是手机角度示意图(拍摄时 ...
- php音视频同步,FFMPEG转码音视频不同步情况总结
[导读]使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同步,下面我们就来根据问题出现的原因,对所遇到的音视频不同步做一个分类. 使用FFMPEG转码一年半的时间,遇到了各种情况的音视频不同 ...
- ffmpeg转码速度控制方法
FROM:http://blog.chinaunix.net/uid-11344913-id-4082625.html FFMPEG 像读取直播流一样读取文件 HLS当前吵得这么熙熙攘攘的,不知道大伙 ...
- ffmpeg转码器移植VC的工程:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...
- FFmpeg学习之八(FFmpeg源码编译)
FFmpeg学习之八(FFmpeg源码编译) Mac下 FFmpeg源码编译 安装 1. 使用终端安装FFmpeg 2. 手动编译 2.1 编译环境 - Xcode 2.2 安装依赖库 2.3 安装F ...
- ffmpeg源码简析(十二)FFMPEG中的主要结构体总结
FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a) 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要存储视音频使用 ...
- 利用FFmpeg转码生成MP4文件
利用FFmpeg转码生成MP4文件 2017年06月24日 14:42:53 阅读数:2401 项目中,需要把一路音频流及一路视频流分别转码,生成指定格式(MP4)文件.在使用ffmpeg转码生成mp ...
- FFmpeg源码分析:avformat_find_stream_info分析码流信息
FFmpeg在调用avformat_open_input()之后,可能码流信息不够完整,可以使用avformat_find_stream_info()获取更多的码流信息.比如获取视频帧率.视频宽高,重 ...
- 音频参数与FFMpeg转码音频
一.音频的本质 音频就是一段连续的波. 在AU里查看一首音乐,就是这样的界面. 主界面上分成了两个部分,分别是左右声道: 绿色条的高度就是声音的强度,可以理解为音量大小,最大为0dB. 把波形放大查看 ...
最新文章
- pythonsys模块介绍_sys 模块介绍 - Clarkhedi的个人空间 - OSCHINA - 中文开源技术交流社区...
- el-image中src加载assets路径下图片使用require避免加载不到
- apache pdfbox_Apache PDFBox 2
- opencv连续读图
- Java-顺序表和链表
- 垂直梯形校正画质损失多少_全面了解投影梯形校正,切不可滥用!
- AFNetWork 学习资源....
- VC中使用GetModuleFileName获取应用程序路径
- AJAX通过HTML请求C#一般处理程序
- 2022年整理LeetCode最新刷题攻略分享(附中文详细题解)
- 【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字
- HBase Coprocessor实现HBase二级索引
- java得到日期相减的天数_java得到日期相减的天数
- RSSHub 的衍生项目 RSSHub Rader 安装构建 问题 Error: Cannot find module 'node-sass'
- SLAM领域的优秀作者与实验室汇总
- aws beanstalk mysql_AWS CloudFormation与BeanStalk的联系与区别
- (转)ENVI端元提取(MNF→PPI→n-D Visualizer)
- 国外计算机科学英语演讲,华工学子英语演讲共庆祖国华诞
- 未对文件 C:\Users\Administrator\Documents\WindowsPowerShell\profile.ps1 进行数字签名。无法在当前系统上运行该脚本。
- 两车相撞的力怎么计算_两车正面碰撞事故车辆行驶速度计算方法
热门文章
- 阿里云备案审核一般多久能过?域名备案需要几天?
- 数字电路设计之Leon系列处理器结构
- Latex中输入大小写罗马数字
- 鸿蒙系统学习 框架概述(一)
- 常见的网络接口解释(E1、FE、GE、10GE、POTS)
- POE电源模块详解及设计参考-MQ7801/MQ7802
- ZLib 解压缩工具
- 基于微信小程序+SSM学生社团管理系统设计
- AWS 容器三大新品:K8s 发行版,免费镜像库和 “Game Changer”AWS Proton
- android 查询快捷方式,Android编程添加快捷方式(Short)到手机桌面的方法(含添加,删除及查询)...