Получить кадры из видео в матрицу - PullRequest
1 голос
/ 19 июня 2019

В настоящее время я пытаюсь реализовать алгоритм сжатия (прогнозирование кадров) для назначения. Я не ищу файлы миниатюр или просто команду оболочки, чтобы сгенерировать что-то для меня. Моя проблема заключается именно в интеграции его с программой golang.

Я только начал, и я уже застрял. Я должен извлечь каждый кадр из видео, разделить его на кадры I P и B и выполнить взаимное кодирование (сжать сам кадр), а затем выполнить внутреннее кодирование (между кадрами).

Прямо сейчас я даже не могу начать работать над вышеуказанными проблемами, потому что я не знаю, как читать видео как то, что я мог бы использовать в коде. Очевидно, единственная библиотека, о которой я могу думать, это ffmpeg. FFMPEG может получать отдельные кадры, по-видимому, даже кадры p и b.

ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4

Но это просто еще один видеовыход, который я не знаю, как открыть. Я думал о том, чтобы вывести кадры в растровые изображения (?), А затем прочитать каждое растровое изображение отдельно, чтобы восстановить три 3D-матрицы, из i-кадров, p-кадров и b-кадров. Однако это выглядит как настоящий подвиг. Кто-то где-то определенно пытался разобрать видео в 3D-матрицу и нашел лучшее решение, чем я думаю.

Чтобы быть кратким, у меня есть видео, мне нужна 3D-матрица. 3D-матрица представляет собой матрицу 2D-матриц, которые представляют кадр в видео. Каждая точка в 3D-матрице представляет собой пиксель (или любой другой эквивалент в видео).

3D matrix

1 Ответ

1 голос
/ 19 июня 2019

I / P / B кадры существуют только в необработанном битовом потоке.Как только видео декодировано, все кадры являются I кадрами.Возможно, вы захотите использовать ffmprg для декодирования чего-то вроде yuv4mpegpipe, а затем проанализировать вывод в вашей программе golang.

...