Ich versuche, Informationen darüber zu finden, wie eine Datei auf einmal in mehrere Ausgaben konvertiert werden kann , aber ich bin anscheinend nicht in der Lage, dies zu tun. Die meisten der gefundenen Ergebnisse beschreiben das Gegenteil: das Zusammenführen mehrerer Dateien zu einer.
Hier ist die Situation:
Ich habe eine IP-Webcam, die ein "Dump" oder Raw-Capture (obwohl ich nicht gerne "Raw" sage, weil es mit dem .raw-Format verwechselt werden kann), das aus zwei Streams besteht: einem H264-Video und einem PCM-Audio .
Ich muss diese "Raw / Dump" -Aufnahme in drei MP4-Dateien umcodieren, von denen zwei Audio- und Videodateien (H264 + AAC) und die dritte nur AAC-Audiodateien enthalten. genauer:
Eine Datei mit der gleichen Auflösung wie das Original, die eine Geschwindigkeit von 30 fps gewährleistet, AAC-Audio mit 128 kbps und das Pixelformat yuv420p (das Pixelformat des "gedumpten" Videostreams ist yuvj420p, wodurch der Stream direkt in Chrome nicht wiedergegeben werden kann. .. Zumindest für jetzt).
Eine Datei mit den gleichen Funktionen wie oben, aber der halben Auflösung.
- Eine Datei, die nur das AAC-Audio enthält.
Ich habe den Befehl, die erste Datei zum Laufen zu bringen (obwohl jemand einen Kommentar zu dieser Datei hat, wird er auch sehr geschätzt):
/usr/bin/avconv "/home/borrajax/Videos/original.dump" \
-acodec libvo_aacenc -ac 1 -ab 128k -ar 44100 \
-vcodec libx264 -preset fast -r 30 -pix_fmt yuv420p \
"/home/borrajax/Videos/transcoded.mp4"
Wahrscheinlich konnte ich einige der Optionen speichern, aber das Problem ist, dass die Konfiguration der Kamera geändert werden kann, sodass ich sicherstellen muss, dass die resultierende .mp4 das von mir benötigte Format hat (aus diesem Grund habe ich so viele angegeben).
Vermutlich ist das eine gute Idee (ich sage "wahrscheinlich", weil ich nicht viel über Videokodierung weiß ), die drei Dateien in einer Aufnahme zu transkodieren und die transkodierten Daten erneut zu verwenden, um Zeit zu sparen.
Zum Beispiel: Das Video mit der halben Auflösung des Originals hat genau das gleiche Audio wie das "große", sodass es nicht erneut transkodiert werden muss. Dasselbe gilt natürlich für die Audiodatei. Es sollte nicht nötig sein, dreimal zu transkodieren. Vielleicht kann ich den Videostream auch wiederverwenden (und hier weiß ich nicht, was besser sein wird). Da ich zwei Videos mit einem anderen FPS- und Pixel-Format als das Original benötige, ist es vielleicht angebracht, sie nur einmal zu transkodieren (wie ich es bereits im obigen Befehl getan habe) und dann den Videostream zu greifen, der bereits das Pixel-Format 30fps und yuv420p hat, und einfach zu machen die halbe Auflösung.
Ich denke, es wird eine gute Idee sein, zusammenzufassen ... wie kann ich mehrere Ausgänge mit avconv verketten (leiten?) Und dabei jeweils unterschiedliche Optionen anwenden?
Verwenden von:
- Ubuntu 12.04 LTS
- avconv version 0.8.5-4: 0.8.5-0ubuntu0.12.04.1
quelle
libvo_aacenc
Erzeugt eine ziemlich schlechte AAC-Qualität.libfdk_aac
oderlibfaac
sollte bevorzugt werden.Antworten:
Der effizienteste Weg, dies ohne Duplizieren zu tun, wäre wahrscheinlich ein Skript, das mehrere Dinge ausführt und dann die Ergebnisse muxt, um die endgültigen Dateien zu erstellen.
Zum Beispiel:
Audio vom Original in AAC umcodieren ergibt audio.aac
Video in voller Auflösung in temp-full-vid.mp4 umcodieren
Video vom Original in die halbe Auflösung in temp-half-vid.mp4 umcodieren
mux temp-full-vid.mp4 und audio.aac in full.mp4
mux temp-half-vid.mp4 und audio.aac in half.mp4
Löschen Sie temp-full-vid.mp4 und temp-half-vid.mp4
So haben Sie die 3 Dateien full.mp4, half.mp4 und audio.aac, nach denen Sie suchen, ohne unnötiges Wiederholen der Transcodierung.
quelle
avconv
, aber sie sollten spätestens funktionierenffmpeg
. Im Falle von Problemen sollten Benutzer das echte FFmpeg aus dem Quellcode kompilieren .