Почему мой конвейер Gstreamer кодирует видео с неверными временными метками? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь использовать Gstreamer на Raspberry Pi модели B для кодирования замедленного видео из серии JPEG. Точный конвейер я опубликую в конце этого поста. Полученное видео можно воспроизвести с помощью VLC, но без другого проигрывателя, который я пробовал. Это не работает с Firefox, Safari и Chrome на Mac и с браузером Chromium на Pi. Вы можете посмотреть видео здесь:

Неудачный кодировщик Gstreamer mp4

Если вы попытаетесь воспроизвести видео, оно застревает в первом кадре, который на самом делекадр примерно с 2/3 пути через видео. Иногда переключение с помощью ползунка прогресса позволяет вам нормально воспроизводить часть видео.

Если я запускаю avprobe -show_packets для файла, я вижу, что первый кадр (ключевой кадр) имеетотрицательная отметка времени. Вот фрагмент вывода:

[packets.packet.0]
codec_type=video
stream_index=0
pts=-140462610
pts_time=-140462.610000
dts=-140468610
dts_time=-140468.610000
duration=0
duration_time=0.000000
size=135005.000000
pos=48
flags=K

Вот самый последний конвейер, который я пробовал. Я перепробовал многие, но ничего не вышло:

gst-launch-1.0 multifilesrc location="$mfslocation"\
 caps="image/jpeg,framerate=10/1" ! jpegdec ! omxh264enc !\
 video/x-h264,stream-format=byte-stream,profile=high !\
 h264parse  ! mp4mux  ! filesink location="$testlocation"

mfslocation: image_% 03d.jpg (первый JPEG - image_000.jpg)

testlocation: fileh264. mp4

Пока что мое решение проблемы - передать кодирование видео на Mac с помощью ffmepg. Работает нормально, как вы можете видеть здесь:

Фильм с замедленной съемкой веб-камеры Korat

...