2017-01-12 4 views
0

Je suis en train d'enregistrer un flux MJPEG d'une webcam logitech C920 à plusieurs fichiers vidéo (Matroska).flux webcam Enregistrement jpeg à plusieurs fichiers avec GStreamer

J'ai ce pipeline: (1 fichier mkv chaque 60s)

gst-launch-1.0 -ev v4l2src device=/dev/video0 \ 
! image/jpeg,width=1280,height=720,framerate=24/1 \ 
! matroskamux ! multifilesink next-file=max-duration max-file-duration=60000000000 location='test1-%02d.mkv' 

Il génère plusieurs fichiers, comme prévu, mais les fichiers contiennent des erreurs, donc des outils tels que Avidemux ne peuvent pas les lire. mkvalidator rapporte ces:

WRN080: Unknown element [FF] at 293 size 88 
WRN080: Unknown element [FF] at 494 size 64 
WRN080: Unknown element [7D][01] at 566 size w98603107602 
WRN801: The segment has no SeekHead section 
WRN0B8: Track #1 is defined but has no frame 

BTW, l'enregistrement dans un fichier unique à l'aide filesink produit un fichier mkv sans erreurs.

Est-il possible d'enregistrer plusieurs fichiers mkv correctement? Tout autre conteneur est également OK, mais je ne peux pas transcoder (besoin d'une charge CPU faible) et je ne peux pas utiliser raw (besoin de HD avec des fps élevés).

J'utilise GStreamer 1.8.2 sur Ubuntu 16.04.1.

Merci.

Mise à jour: En suivant les conseils ci-dessous, j'ai essayé avec splitmuxsink:

gst-launch-1.0 -e v4l2src device=/dev/video1 \ 
! image/jpeg,width=1280,height=720,framerate=24/1 \ 
! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' \ 
max-size-time=10000000000 

Mais il ne fonctionne pas: Le fichier est divisé et ne cesse de croître en taille.

Répondre

0

Le pipeline suivant semble fonctionner:

gst-launch-1.0 -e v4l2src ! x264enc key-int-max=10 ! h264parse ! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' max-size-time=60000000000 

multifilesink ne sait rien sur le format de conteneur, vous devez donc utiliser splitmuxsink pour faire le spliting.

Voici la citation de multifilesink doc:

Il est impossible d'utiliser cet élément pour créer indépendamment fichiers mp4 jouables, utilisez l'élément splitmuxsink pour cette place.

+0

est-ce pas 'x264enc key-int-max = 10' réencodage? Je ne peux pas faire ça. En outre, je veux enregistrer la vidéo originale MJPEG en utilisant un conteneur Matroska/MP4, pas h.264. –

+0

Ah, vous pouvez supprimer x264enc si vous voulez juste mettre votre flux mjpeg dans le conteneur Matroska. Je viens de mettre ça pour ma webcam, qui n'ont pas de capacité mjpeg. –

+0

Désolé pour la réponse tardive. J'ai essayé sans l'élément 'x264enc', mais ça ne marche pas. Je vais mettre à jour la question avec le problème. –