使用FFMPEG读取每帧时间码吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用FFMPEG读取每帧时间码吗?相关的知识,希望对你有一定的参考价值。

我想使用libav(FFMPEG)从视频文件中读取每帧时间码。我首先开始研究FFProbe。使用此代码作为我的代码的起点,我可以进入其中包含时间代码的AVStream。从那里,我可以使用字典查看流的元数据。

int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int in_program)

  AVStream *stream = ist->st;
...
  auto tcr = av_dict_get(stream->metadata, "timecode", NULL, 0);
  std::cerr << "Timecode: " << tcr->value << ", Total Frames: << stream->nb_frames << "\n";

时间码是嵌入到视频中的正确时间码。 nb_frames正确是我拥有的视频帧的总数。我无法获得的是每帧时间码。如果不需要,我不想计算它,我想确切地知道每个帧上标记的内容。这可能吗?

// Pseudocode for what I want
for(const auto& f : allOfMyFrames)

  std::cerr << "Frame number " << f.number << ", Timecode: " << f.timecode << "\n";

答案

时间码,例如MOV / MP4中的时间码,只是一个单个数据包,其起始时间码表示为速率调整后的帧数。没有每帧的时间码。

以上是关于使用FFMPEG读取每帧时间码吗?的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 每帧请求的位太多

2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。

使用 FFmpeg 编码 H.264 CBR 视频

Pxer使用FFmpeg合成动图

[音视频处理] FFmpeg使用指北1-视频解码

将 RGB 转换为 YUV,+ ffmpeg