Декодировать видео h264 - PullRequest
       29

Декодировать видео h264

2 голосов
/ 28 августа 2011

Я ищу способ декодирования h264 (или любого другого формата видео) с использованием c #. Конечная цель заключается в том, чтобы иметь возможность декодировать изображения и очень строго контролировать воспроизведение в режиме реального времени. Проект, над которым я работаю, представляет собой нелинейное видеоискусство, в котором кадры в формате HD требуются для зацикливания и редактирования на лету, воспроизведения определенных диапазонов кадров и затем плавного перехода к следующему случайно выбранному диапазону кадров.

Я создал приложение, которое считывает файлы изображений (jpegs) с диска и воспроизводит их на экране по порядку. У меня есть полный контроль над тем, какой кадр загружен и когда он отображается, но при разрешении Full HD это занимает немного больше времени. чем я хочу загрузить изображения с жесткого диска (каждый из которых составляет около 500 Кб), я думаю, что использование сжатого видеоформата будет меньше и, следовательно, быстрее читать и декодировать в определенный кадр, однако я не могу найти какой-либо доступный способ сделай это.

Есть ли библиотеки, которые могут это сделать? т.е. извлекать произвольный кадр из видеофайла и подавать его в мое приложение за меньшее время, чем требуется, чтобы показать кадр (работает со скоростью 25 кадров в секунду), я изучил библиотеки vlc и оболочки для ffmpeg, но я не знаю, какой будет лучше, или если будет другой, еще лучший вариант. Также я не знаю, какой кодек будет лучшим выбором, так как некоторые основаны на ключевых кадрах, что делает извлечение произвольных кадров, вероятно, очень трудным.

Любой совет, спасибо

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Я бы сказал, что использование H.264 не очень хорошая идея.Причина этого заключается в различном виде кадров, составляющих поток

  • I-кадров или ключевых кадров: все, что необходимо для декодирования кадра, доступно напрямую, т.е. никаких зависимостей длядругие кадры.

  • P-кадры (прогнозируемые кадры): состоит из разностных данных в отношении ранее декодированных кадров.

  • B-кадры (двунаправленный): состоит из данных различий по отношению к ранее декодированным кадрам и к будущим кадрам.

Порядок кодирования кадров в бистриме не соответствует порядку, в котором должны отображаться кадры.

КакВ крайнем случае, контент H.264 может иметь только 1 I-кадр в начале клипа.Если вам нужно отобразить последний кадр, каждый промежуточный кадр должен быть декодирован вплоть до последнего кадра, включая его, чтобы его можно было отобразить.

Использование JPEG в том виде, в котором вы смотрели, не является плохой идеей.Вы можете поэкспериментировать с уровнем сжатия, чтобы найти максимальный размер файла с точки зрения качества и времени декодирования.

Выходной сигнал видеодекодера почти во всех случаях составляет 4: 2: 0 с дискретизацией YUV несжатые необработанные данные.Один кадр 1080p будет 1920*1080*1.5=3110400 bytes.Использование этого формата вместо JPEG (который также декодируется в YUV4: 2: 0) сократит время декодирования из вашего «приложения», оставляя всего время просмотра. Imagemagick и множество других инструментов могут конвертировать из JPEG в YUV4: 2: 0.Это нельзя сочетать с отображением памяти, описанным в комментариях.

Если вы чувствуете, что необработанный формат занимает много места на диске, взгляните на huffyuv , который является YUV-кодеком без потерь.

Для зрителя в прошлом я имел большой опыт использования SDL , который понимает формат YUV, что делает его очень простым для написания зрителя.К счастью, уже написано, что вы можете использовать в качестве шаблона для дальнейшей разработки.Посмотрите на yay

0 голосов
/ 30 августа 2011

Я просто хочу отметить, что размер файла не всегда равен скорости.Чем меньше размер файла, тем выше стоимость распаковки.Вы могли бы (и я подчеркиваю, , возможно ) на самом деле лучше работать, используя несжатый формат, такой как BMP или, возможно, WMF.

0 голосов
/ 28 августа 2011

http://sourceforge.net/projects/mfnet/

Возможно, Windows Media Foundation.

...