【发布时间】:2021-11-19 04:06:32
【问题描述】:
对于给定的 AV 文件,我需要能够查找文件中的特定视频帧号。由于解码的工作原理,我正在寻找最近的 I 帧 before 所需的帧(可能是也可能不是请求的帧),然后解码 GOP 中的帧,直到我到达我需要成为。因此,我需要在求职后知道我目前的职位。
在 SO 上发现了一些类似性质的帖子后,我离开并收集了一些有趣的示例,看看是否可以得到一个适用于许多不同文件的公式,但我'我很难过。什么有效或 1 个文件可能不适用于另一个:
文件 #1(Podbox)
请求成名#1500。第一个视频帧报告:
AVFrame::pts = 760320
AVFrame::pkt_duration = 512
AVStream::time_base = {1,12800}
AVStream::start_time = 0
AVStream::avg_frame_rate = {25,1}
文件 #2 (HTE54959)
请求成名#1500。第一个视频帧报告:
AVFrame::pts = 1500
AVFrame::pkt_duration = 1
AVStream::time_base = {1,25}
AVStream::start_time = 0
AVStream::avg_frame_rate = {25,1}
文件 #3 (BuckBunny)
请求成名#1800。第一个视频帧报告:
AVFrame::pts = 1563562
AVFrame::pkt_duration = 1001
AVStream::time_base = {1,30000}
AVStream::start_time = 0
AVStream::avg_frame_rate = {30000,1001}
文件 #4(HouseDance)
请求成名#1800。第一个视频帧报告:
AVFrame::pts = 1800
AVFrame::pkt_duration = 1
AVStream::time_base = {1001,30000}
AVStream::start_time = 0
AVStream::avg_frame_rate = {30000,1001}
对于上述文件,以下成员始终为零:
AVFrame::coded_picture_number
AVFrame::display_picture_number
我曾考虑过仅使用 AVFrame::pts / AVFrame::pkt_duration,但我不确定这是正确的做事方式。我知道对于某些编解码器,可能存在可变帧速率 (VFR),这意味着我的方法是错误的?我假设 AVFrame::pkt_duration 可以改变每个 AVFrame?
我想强调我的问题是无法寻求。我正在寻找正确的位置 - 我已经使用时间码直观地验证了这一点。我的问题是以编程方式识别搜索位置的帧号
使用 FFmpeg v4.2.4
【问题讨论】:
标签: ffmpeg