2012-03-25 4 views
1

Ich arbeite mit IP-Kamera, und ich habe Jpeg Frames und Audiodaten (PCM) von der Kamera.Wie erstellt man .avi, .mp4 Datei mit JPEG Frames?

Jetzt möchte ich Videodatei (Audio und Video) unter .avi oder .mp4 Format von oben genannten Daten erstellen.

Ich suchte und wusste, dass ffmpeg Bibliothek kann es tun. Aber ich weiß nicht, wie ich ffmpeg dafür benutze.

Können Sie mir einen Beispielcode oder die Funktion von ffmpeg vorschlagen, um es zu tun?

+0

verwenden 'mencoder' mit dem' mf: // 'Quelle. –

Antwort

1

Wenn Ihr Ziel ist, eine C++ App zu schreiben, um dies für Sie zu tun, ignorieren Sie bitte diese Antwort, ich werde es hier für zukünftige Referenz lassen. Wenn nicht, hier ist, wie Sie es in bash tun können:

Zuerst, stellen Sie sicher, dass Ihre Bilder in einem schönen Format sind, einfach von ffmpeg zu handhaben. Sie können die Bilder in ein anderes Verzeichnis kopieren:

mkdir tmp 
x=1; for i in *jpg; do counter=$(printf %03d $x); cp "$i" tmp/img"$counter".jpg; x=$(($x+1)); done 

Kopieren Sie Ihre Audiodaten in das tmp-Verzeichnis und kodieren Sie das Video. Lassen Sie uns sagen, dass Ihre Kamera ein Bild alle zehn Sekunden gedauert:

cd tmp 
ffmpeg -i audio.wav -f image2 -i img%03d.jpg -vcodec msmpeg4v2 -r 0.1 -intra out.avi 

Wo -r 0.1 eine Framerate von 0,1 zeigt an, welche alle 10 Sekunden ein Rahmen ist.

Die möglichen Probleme sind hier:

  • Ihr Audio/Video gehen könnte leicht out of sync, wenn Sie Ihre gewünschte Framerate sorgfältig im Voraus berechnen. Sie sollten in der Lage sein, die Länge des Audio (oder Video) mit ffmpeg und einigen grep Magie zu bekommen. Dennoch könnte die Synchronisierung bei längeren Clips ein Problem darstellen.
  • , wenn Sie mehr als 999 Bilder haben die %03d Format wird nicht genug sein, stellen Sie sicher, dass die 3 auf die gewünschte Länge des Index
  • Das Video ändern wird seine Länge von der längeren der Ströme erben, können Sie beschränken sie den -t Schalter:

    -t duration - Restrict the transcoded/captured video sequence to the duration specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.