Исправление несмешанного изображения / потока JPEG с веб-камеры с помощью gstreamer

4159
nponeccop

Я сделал разбитые кадры, используя следующий конвейер:

gst-launch-1.0 v4l2src ! filesink location=encode.mjpeg 

Каким-то образом gstreamer может воспроизвести его:

gst-launch-1.0 filesrc location=encode.mjpeg ! jpegdec ! videoconvert ! xvimagesink 

Однако, поскольку я по ошибке не использовал какой-либо контейнер, поток воспроизводится в очень быстром темпе framerate=(fraction)0/1. Есть ли способ конвертировать мой битый файл в .aviили в любой другой контейнер без повторного сжатия?

Следующее тривиальное мультиплексирование не сработало, как ожидалось:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! avimux \ ! filesink location=encode.avi . -v 

Каким-то образом gstreamer воспроизводит encode.aviочень медленно со скоростью ~ 1 FPS, не потребляя значительных ресурсов процессора. И ни Vlc`, ни Adobe Aftereffects не могут импортировать его - они отображают только правильно декодированный стип первого кадра вверху.

0

1 ответ на вопрос

0
thiagoss

Проблема с мультиплексированием в avi связана с тем, что filesrc предоставляет буферам для avimux, которые неправильно выровнены по фреймам mjpeg, поэтому avimux создает сэмплы с неправильным выравниванием внутри, что усложняет их использование игроками. позже во время воспроизведения.

Это можно исправить с помощью парсера mjpeg после capsfilter (jpegparse?). Другой вариант - декодировать и перекодировать сэмплы, чтобы выровнять их правильно и мультиплексировать. Следующий конвейер должен работать:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! decodebin ! videoconvert ! \ <some encoder> ! <some muxer> ! filesink location=outputfile 

Вы можете выбрать кодировщик и мультиплексор, который вам нравится, вы даже можете закодировать их обратно в jpeg и mux в avi, как вы изначально хотели.

Изменить : Чтобы попытаться преобразовать содержимое в AVI без декодирования, попробуйте что-то вроде:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! jpegparse ! avimux \ ! filesink location=encode.avi . -v 

Если jpegparse работает очень хорошо, '' image / jpeg, частота кадров = 30/1, ширина = 1280, высота = 720 '' не требуется.

* без повторного сжатия * - повторное сжатие с помощью mjpeg, очевидно, снижает качество, так как настройки квантования различаются в камере и в `jpegenc`. nponeccop 11 лет назад 0
Если повторное смешивание без распаковки все еще не работает, вы можете попробовать посмотреть на свойство качества jpegenc, выполнив: gst-inspect-1.0 jpegenc и установив его на более высокий уровень, чтобы посмотреть, улучшит ли это вашу ситуацию. В gst-launch вы устанавливаете свойства после элемента с помощью: jpegenc quality = thiagoss 11 лет назад 0

Похожие вопросы