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