2016-02-19 3 views
1

Я хочу получить пиксельный цвет для кадра из файла mp4.Как получить pixelcolor для заданного кадра из файлов mp4? - Без libs

Моя структура кода:

  1. загружаю файл в байтах
  2. Я прочитал заголовок файла, чтобы получить важную информацию
  3. Я делаю-структуру данных для MDAT контейнера

Теперь мой вопрос: как данные о отображаемом изображении хранятся в файле mp4? Я нашел это spec-information, но я не могу понять, как читать необходимые данные.

Я не хочу использовать какие-либо библиотеки или пакеты.

Надеюсь, вы можете мне помочь. (каждый подсказка может помочь)

+0

Это спецификация является довольно плотной, но это то, что вам нужно понять, чтобы * действительно * решить эту проблему эффективно - особенно, если вы не используете внешнюю библиотеку. Есть что-то смущение в спецификации, которую вам нужна помощь, разъясняющая? – Litty

+0

Ок, я думаю, я не собирался создавать контейнеры mdat в целом. Я анализировал один файл, чтобы понять его: был только один контейнер mdat. i ранее предполагал, что было несколько частей (для аудио, видео и т. Д.) Это не так. Но моя проблема заключается в следующем: как данные (видео-) записываются в файл? – 3DExtended

+0

Видеокадры (также называемые сэмплами) представлены в виде «кусков» в спецификации для образца для фрагмента, размера выборки и блоков смещения блоков. – szatmary

ответ

2

У вас нет. mp4 - это просто формат контейнера. Видео сжимается с помощью кодека. Спецификация, на которую вы указали, расскажет вам, как найти кодированный фрейм. После анализа файла mp4 вам нужно будет декодировать фрейм для чтения значений пикселей. Хотя, конечно, «возможно» написать все это самостоятельно, для этого потребуются десятки или сотни тысяч строк кода. И это после того, как вы изучили и поняли полную спецификацию. Если, например, видео h.264, спецификация составляет более 750 страниц. И предполагается, что вы уже понимаете понятия вокруг целочисленного обратного дискретного косинусного преобразования, оценки/вектора движения подпикселя, деблокирования, адаптивного бинарного арифметического кодирования контента, чтобы назвать несколько вещей.

TLDR использовать библиотеку

+0

ладно, я думаю, я должен использовать lib ... вы можете что-то передумать? – 3DExtended

+1

@ 3DExtended, почему вы не используете google H.264-декодер для вашего языка программирования? Как только вы играете в видео (декодирование кадров), вы можете «снимок» растрового изображения и извлекать пиксель, как из любого изображения. –

+0

благодарю вас за помощь! я сделаю это – 3DExtended