Verwenden Sie die Transcodierungsausgaben erneut, um mit AvConv mehrere Dateien zu generieren


1

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:

  1. 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).

  2. Eine Datei mit den gleichen Funktionen wie oben, aber der halben Auflösung.

  3. 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

1
Nur ein Kommentar: libvo_aacencErzeugt eine ziemlich schlechte AAC-Qualität. libfdk_aacoder libfaacsollte bevorzugt werden.
Slhck

Antworten:


1

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:

  1. Audio vom Original in AAC umcodieren ergibt audio.aac

    avconv -i <input> -c:a libfaac -vn audio.aac
    
  2. Video in voller Auflösung in temp-full-vid.mp4 umcodieren

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -an temp-full-vid.mp4
    
  3. Video vom Original in die halbe Auflösung in temp-half-vid.mp4 umcodieren

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -filter:v scale=-1:ih/2 -an temp-half-vid.mp4
    
  4. mux temp-full-vid.mp4 und audio.aac in full.mp4

    avconv -i temp-full-vid.mp4 -i audio.aac -c copy -map 0 -map 1 full.mp4
    
  5. mux temp-half-vid.mp4 und audio.aac in half.mp4

    avconv -i temp-half-vid.mp4 -i audio.aac -c copy -map 0 -map 1 half.mp4
    
  6. 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.


Ich habe einige Beispielbefehle hinzugefügt. Nicht getestet mit avconv, aber sie sollten spätestens funktionieren ffmpeg. Im Falle von Problemen sollten Benutzer das echte FFmpeg aus dem Quellcode kompilieren .
Slhck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.