ffplay - wie man separate Video- und Audiodateien zusammen spielt

9

So kann ich separate Video- und Audiodateien wie folgt in eine Filmdatei umcodieren:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -ac 2 -ab 256k -vb 3000k -t 10 -y mov/movie.mp4

Und sehen und hören Sie den resultierenden Film so:

ffplay -ss 0 -lowres 1 -vf "xyz2rgb" mov/movie.mp4

Um jedoch zu vermeiden, dass Film und Ton zusammen in eine Datei transkodiert werden müssen, bevor ich sie sehen kann, möchte ich einfach die beiden separaten Dateien zusammen abspielen. Soweit ich weiß, können Sie mit ffplay nicht zwei verschiedene Dateien kombinieren (richtig?).

Wenn Sie diese Foren lesen , können Sie anscheinend eine ffmpeg-Ausgabe an ffplay weiterleiten . Das Folgende ist so nah wie ich gekommen bin. Es ist nicht so nah. :( Videoinformationen werden eindeutig übertragen, aber es handelt sich um grünen "Schnee" in der richtigen Bildgröße, mit Hinweisen auf die tatsächlichen Bilder, die im schrecklichen grünen Schnee tanzen. Auf diese Weise weiß ich, dass sich etwas von den tatsächlichen Bilddaten überträgt , nur nicht richtig rendern. Überhaupt nicht.

Und keine Audiowiedergabe. Der Sound überträgt sich nicht (glaube ich nicht). Jetzt ... stecke ich fest. Das Folgende schlägt vor, was ich versuche, aber es funktioniert nicht:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -f rawvideo - | ffplay -f rawvideo -vf "xyz2rgb" -s 1998x1080 -
Bill Rudolph Yaber Russell
quelle

Antworten:

4

Videoinformationen werden eindeutig übertragen, aber es handelt sich um grünen "Schnee" in der richtigen Bildgröße, mit Hinweisen auf die tatsächlichen Bilder, die im schrecklichen grünen Schnee tanzen.

Dies muss das Pixelformat sein. Sie wenden den xyz2rgbFilter an, der den DCP-Farbraum in RGB konvertiert, und leiten dann Rohvideos an weiter ffplay. Hier wenden Sie den xyz2rgbFilter erneut an , was wahrscheinlich zu Verzerrungen führt, da FFmpeg keine Ahnung hat, wie das Rohvideo codiert wird. Mit dem Video wird alles getan, was Sie wollen, und der Farbraum wird sogar zweimal konvertiert.


Ich habe gute Ergebnisse erzielt, indem ich das Matroska-Format ffplayanstelle von weitergeleitet habe rawvideo, wodurch Sie auch die Möglichkeit haben, Audio zu dekodieren (siehe unten). Das Matroska-Format kann jede Art von Codec enthalten.

Beachten Sie, dass die Reihenfolge der Optionen in FFmpeg von Bedeutung ist und Sie wahrscheinlich eine neuere Version verwenden sollten, da es strenger ist, wo Sie die Optionen platzieren:

  • Globale Optionen stehen an -yerster Stelle.
  • Geben Sie dann Optionen zum Lesen von Eingabedateien an - dies -r 24erzwingt die Bildrate für die picture.mxfDatei.
  • Geben Sie dann alle Eingabedateien an.
  • Dann kommen die Codec-Optionen wie Videofilter, die Videobitrate usw.

In Ihrer Situation ist es sinnvoll, nur den Audiostream zu kopieren, da wir ihn nicht wirklich transkodieren müssen. Das Video muss transkodiert werden, um den Filter anwenden zu können.

So etwas sollte reichen. Beachten Sie, wie wir das Ausgabeformat explizit als festlegen matroskaund ffplayden Rest selbst herausfinden:

ffmpeg -r 24 -i dcp/picture.mxf -i mov/sound.wav \
-filter:v "xyz2rgb" -b:v 3000k -c:a copy -t 10 -f matroska - | \
ffplay -

Ich habe die (IMO weniger mehrdeutige) Syntax für Optionen wie -filter:vanstelle von -vf, -b:vanstelle von -vbund -c:aanstelle von verwendet -acodec.

Wenn dieses Format für Sie nicht funktioniert, versuchen Sie es mit AVI:

ffmpeg -i picture.mxf -i sound.wav -f avi - | ffplay -

Dies funktionierte bei mir ohne Probleme und ich musste nicht einmal den Filter verwenden, den Sie brauchten. Audio funktionierte ebenfalls.

slhck
quelle
slhck, danke dafür! OK, ich habe Folgendes erhalten: <br/> <br/> Es wurde kein geeignetes Ausgabeformat für '-filter: v' gefunden. -Filter: v: Ungültiges Argument <br> <br> ?? (Gleiches gilt für -vf). Der Codec & Filter stammt von hier: goo.gl/avE1f - der Autor hat ihn geschrieben und eine benutzerdefinierte Installation von ffmpeg entworfen (nur eine Version, die mit diesem Verfahren und seinen Dateien funktioniert), die den proprietären Codec und den Farbraumfilter enthält kann es entschlüsseln. Die benutzerdefinierte ffmeg-Installation muss in der Lage sein, die proprietäre JPEG2000 MJPEG-Bildsequenz zu lesen, die im Bild-MFX enthalten ist. Wenn das hilft zu beachten :)
Bill Rudolph Yaber Russell
Hoppla, ich bin ein Dummy, ich habe vergessen, die Pausen "\" in der Befehlszeile zu entfernen. Wie auch immer, jetzt, wenn ich Ihren Vorschlag eingebe, zeigen die Zahlen Streaming, aber es öffnet sich kein Fenster. Ungefähr 20 Sekunden später stoppt es mit: <br /> <br /> Segmentierungsfehler: 1136,0 Größe = 138 kB Zeit = 00: 00: 00,08 Bitrate = 13445,2 kbit / s
Bill Rudolph Yaber Russell
EIN BILD IST TAUSEND WÖRTER WERT - hier zeigt dieses praktische Screenshot-Video, was funktioniert und was nicht: dl.dropbox.com/u/11290938/screen_grab_ffdcp_750.mov
Bill Rudolph Yaber Russell
Vielen Dank für das Video. Zunächst einmal hat Ihr erster Befehl rawvideo das Problem, dass Sie die falsche Größe angeben. Ihre Eingabe hat eine Größe von 500 x 270 - oder zumindest ist dies der Punkt, an den Sie weitergeleitet werden ffplay. Außerdem hat Ihre Ausgabe rgb48ledas Pixelformat (aufgrund des Filters), ffplaygeht jedoch davon aus yuv420p, dass Sie auch Folgendes angeben müssen : ffplay -f rawvideo -s 500x270 -pix_fmt rgb48le -. Was den Segfault betrifft: Keine Ahnung ... vielleicht könnten Sie irgendwo eine kleine Testdatei erstellen und hochladen?
Slhck
Ooo goodie, teste Dateien! In der Tat, danke. Der Grund für 500x270 ist, dass ich "lores 2" angegeben habe, wodurch die Größe zweimal reduziert wird (um in einen ordentlichen Screenshot für Sie zu passen :) Also habe ich anscheinend einen verpasst. Als Hintergrund ist diese Datei ein hausgemachtes DCP (denken Sie an "Digitalfilmdruck" für ein Kino, weshalb die Medien so komisch sind), 2K bei 1998x1080 (1,85 Quadratpixel-Aspekt). Beim Extrahieren der Bildsequenz ist es korrekt, und ich habe das Paket gestern eingereicht und sie haben es auf einem DLP im Kino abgespielt, wo es gezeigt wird (für eine Nacht im Festival) - und es war richtig (Puh!).
Bill Rudolph Yaber Russell
3

Dies würde die Streams nicht transkodieren:

ffmpeg -i video.mkv -i audio.mkv -c copy -map 0:0 -map 1:1 output.mkv

-map 1:1= zweite Datei, Stream 1 (normalerweise Audio). -c copy= -c:v copy -c:a copy. Standardmäßig ist die Mux-Datei so lang wie die längere Datei, -shortestwürde sie jedoch so lang wie die kürzere Datei machen.

Lri
quelle
Vielen Dank für diese Informationen. Ich brauche keine Ausgabedatei, aber diese Schalter sind wirklich gut zu wissen.
Bill Rudolph Yaber Russell
3
ffmpeg -lowres 2 -ss 0 -r24 -i MOVIE.MOV -ss 0 -i AUDIO.WAV -vf xyz2rgb -ac: 2 -c:v mpeg2video -f avi - | ffplay -

Für meine Zwecke ermöglicht dies eine schnelle Überprüfung des Inhalts eines DCP (Digital Cinema Package), das Sie mit Open Source-Tools erstellen können . Das DCP verwendet den xyz-Farbraum, daher muss ein xyz-Videofilter installiert sein , andernfalls können Sie ihn in der obigen Zeile nicht verwenden. (Das ist okay, es wird nur stark orange getönt aussehen, Sie werden nicht die wahren Farben sehen.)

Ich habe den Codec mpeg2video b / c hinzugefügt, obwohl er die Qualität verringert, die Rate niedrig ist und ein wenig puffert, damit er auf meinem Computer reibungsloser funktioniert. (Aus irgendeinem Grund erhalte ich ohne vorherige Transcodierung nur ein Standbild von der jpeg2000-mjpeg-Sequenz, die mit mächtigen 125 MB / s vom MXF gespeist wird, es sei denn, ich starte "- ss 0", dh ganz am Anfang des Datei.) Mit einem SEHR SCHNELLEN Computer können Sie theoretisch das 2K-Kino überprüfen, indem Sie keinen Codec (entfernen Sie "-c: v mpeg2video"), die volle Größe ("-lores 0") und ab 0 (-ss 0) angeben Qualität DCP genau wie es ist. Nun, bis auf spezielle Anweisungen, die in den XMLs enthalten sind - Untertitel oder andere Programmierungen. Aber im Allgemeinen. (Übrigens "-ac: 2" Downmixe 5.1 bis 2.0 - obwohl Sie möglicherweise Hardware haben, die Auditioning 5.1 unterstützt, verwenden Sie in diesem Fall "-c: eine Kopie".)

Vielen Dank an Matthias von Belle-Nuit und slhck oben für FOR GEDULDIG mich durch diese gehen. Vielen Dank!!!! Das ist sehr nützlich. Und tatsächlich rettete mich vor einer möglicherweise peinlichen Filmvorführung im Aero-Theater am Sonntagabend. Meine Bildsequenznummerierung war nicht in der richtigen Reihenfolge - habe sie damit gefunden und behoben!

Wow, das alles nur für eine Kommandozeile, wer wusste;)

Cheereo - b worldpoop.com

Bill Rudolph Yaber Russell
quelle
Ich habe diesen Fehler erhalten: Kein solcher Filter: 'xyz2rgb'
Dr.jacky