Я хочу прочитать временный код за кадр из видеофайла, используя 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";
}