Speichern Sie Audio und Video in einer Datei mit GStreamer von Kamera und Mikrofon

417
Hanlon

Ich brauche eine Möglichkeit, Video von meiner Kamera und Audio gleichzeitig von meinem Mikrofon aufzunehmen, sodass sie in einer Datei gespeichert werden.

Momentan habe ich jetzt wie man Video aufnimmt ...

gst-launch-1.0 -e autovideosrc ! videoconvert ! matroskamux ! filesink location=recording.mkv 

und Audio ...

gst-launch-1.0 -e autoaudiosrc ! audioconvert ! wavenc ! filesink location=recording.wav 

...separat.

Was ich brauche, ist eine Datei, die Video von recording.mkvund Audio von enthält recording.wav.


Ich habe etwas gefunden, das funktionieren könnte, wenn es ein bisschen angepasst wurde.

gst-launch-1.0 -e autovideosrc ! queue ! videoconvert ! mkv. autoaudiosrc ! queue ! audioconvert ! mkv. matroskamux name=mkv ! filesink location=test.mkv sync=false 

Dies nimmt zwar Video auf, nicht aber Audio, aber ich denke, es muss nur ein wenig angepasst werden, um auch Audio aufzunehmen.

0
https://stackoverflow.com/questions/37416015/gstreamer-write-both-video-and-audo-streams-into-a-single-mp4-container-nach-c music2myear vor 5 Jahren 0
@ music2myer Also muss ich Video und Audio separat aufnehmen und dann verketten? Kann ich sie nicht gleichzeitig in einer Datei speichern (während der Aufnahme)? Hanlon vor 5 Jahren 0
Ich kenne die Funktionen von gstreamer nicht, aber die Antwort auf die Frage, die ich verlinkt habe, schlug vor, die Dokumentation zu gst-launch zu lesen, die zwar Concat-Funktionen bietet, aber möglicherweise auch Echtzeit-Audio- und -Videoaufzeichnung anbietet, wie von der Antwort Sie unten herausgefunden. Ich bin froh, dass Sie alles zum Laufen bringen konnten. music2myear vor 5 Jahren 0

1 Antwort auf die Frage

1
Hanlon

Hier ist es:

gst-launch-1.0 -e autovideosrc ! queue ! videoconvert ! mkv. autoaudiosrc ! queue ! audioconvert ! mkv. matroskamux name=mkv ! filesink location=test.mkv sync=false 

So funktioniert es:

  1. Wir erhalten Video-Feed von der Webcam mit autovideosrc.
  2. Als Nächstes platzieren wir den Feed in seinem eigenen Thread, indem er ihn ausgeben soll queue.
  3. Der Video-Feed von queuegeht zu videoconvertdem Ort, an dem er konvertiert wird (Ich bin nicht sicher, ob dieser Schritt erforderlich ist).
  4. Schließlich wird der Video-Feed in das benannte Element aufgenommen mkv, das vom Typ ist matroskamux. Dieses Element konvertiert den Video-Feed in Matroska.
  5. Danach erhalten wir Audio-Feed mit autoaudiosrc.
  6. Wir platzieren den Feed von autoaudiosrcin einem anderen Thread mit queue.
  7. Von queueAudio geht zu, audioconvertwo es konvertiert wird (auch nicht sicher, wenn nötig).
  8. Konvertiertes Audio wird an dasselbe matroskamuxElement gesendet mkv. Hier wird der Audio-Feed in Matroska konvertiert.
  9. Da sowohl Audio- als auch Video-Feed zu demselben Element gehören, werden sie zu einem Matroska-Feed zusammengeführt.
  10. Schließlich wird dieser Matroska-Feed mithilfe von in einer Datei gespeichert filesink. Sie müssen wahrscheinlich einstellen, sync=falseob Ihr Computer keine Bestie ist.

Das ist es. Wenn sich jemand fragt, warum ich in der Frage geschrieben habe, dass dieser Befehl kein Audio aufnimmt, liegt dies daran, dass ich vergessen habe, das Mikrofon einzuschalten.

Hallo. Ich benutze Ihren Befehl in Python gstreammer, aber es funktioniert nicht, wenn ich Audio- / Video-SRC an die Pipeline insteqad autovideosrc anschließe. Haben Sie jemals Python dafür benutzt? DGoiko vor 5 Jahren 0
@DGoiko Hallo! Ich habe es nicht mit Python probiert, aber ich habe es in C probiert und es hat funktioniert. Hanlon vor 5 Jahren 0
Ich habe es mit einem appsrc verbunden (ähnlich wie dieses: https://github.com/streamlink/streamlink/blob/master/examples/gst-player.py, aber mit uridecodebin anstelle von playbin und einigen benutzerdefinierten Ablagen. enthalten, die in Ihrer Pipeline zum Aufzeichnen enthalten ist) und stoppt am Anfang. Der Player selbst ist in Ordnung: Wenn ich Audio- und Video-Tees mit Warteschlangen an autoaudiosrc + autovideosrc + flac-Audioaufnahme anschließe, funktioniert alles einwandfrei, aber wenn ich die Video-Warteschlange stelle, friert sie am Anfang ein. Debug 3 zeigt nichts ... Es ist seltsam. DGoiko vor 5 Jahren 0
Könnten Sie etwas Code posten? Vorzugsweise können Sie eine neue Frage öffnen, aber das Kopieren von Code nach Pastebin ist auch in Ordnung. Geben Sie mir einfach einen Link. Hanlon vor 5 Jahren 0