Wie können Sie ein Video mit einem Alphakanal testen, bevor Sie es mit einem anderen Video zusammenführen?

1194
cdlvcdlv

Ich arbeite an Videos mit Alphakanal, die an einer bestimmten Position mit einem Hintergrundvideo (z. B. [100,100] ) zusammengefügt werden. Sie können dies erreichen, indem Sie Folgendes verwenden:

ffmpeg -i BACK -i OVER -filter_complex [0] [1] Overlay = 100: 100 OUTPUT

Aber ich möchte das Ergebnis testen, ohne das gesamte Video generieren und abspielen zu müssen.

Ich habe VLC ausprobiert, aber die einzige Überlagerungsoption besteht darin, ein Bild (nicht einmal animiert) über das Video zu legen. Ich weiß nicht, ob es in der MPC-HC einen Shader gibt, der zu mir passt, aber ich habe ihn nicht gefunden (und Shader sind, selbst die einfachsten, in der Regel eine CPU-Belastung). Das Gleiche passiert mit avisynth : Das Spielen ist ruckartig und sucht noch schlimmer (ich glaube es liegt daran, dass avisynth mit unkomprimiertem Video arbeitet und ausgibt).

Gibt es eine Möglichkeit, das resultierende Video on-the-fly anzuschauen, zu einem beliebigen Punkt davon zu springen und eine vernünftige Menge an CPU zu verwenden?

1

2 Antworten auf die Frage

1
Gyan

Wenn Sie eine fragmentierte MP4-Datei erstellen, können Sie das Video während der Codierung anzeigen. Sie können nur bis zu den Punkten suchen, die zum Zeitpunkt des Ladens der Datei bereits verschlüsselt wurden. Wenn Sie weiter suchen möchten, laden Sie es später erneut.

Grundlegende Syntax ist

ffmpeg -i input -<encoding parameters> -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov out.mp4 
Ich schätze die Anstrengung, aber nicht das, wonach ich gesucht habe. Ich möchte vielleicht 4 oder 5 zufällige Punkte (z. B. einen davon am Ende) mit einem reibungslosen Spiel überprüfen und was ich zu vermeiden versuchte, ist die Kodierung und Erstellung der Datei, bis ich mir des Ergebnisses ziemlich sicher war . Aber +1 für die Idee, die ich für andere Zwecke interessant finde (Ich werde diese geheimnisvollen Flaggen genauer betrachten). cdlvcdlv vor 8 Jahren 0
Dann können Sie einfach kleine Segmente kodieren: `` ffmpeg -ss 34 -t 10 -i zurück -i vorbei ... test-output` und prüfen. Wenn Sie willkürliche Stichproben durchführen möchten, ist ein Video-Editor die beste Option. [Openshot] (http://www.openshot.org/) ist kostenlos. Gyan vor 8 Jahren 0
1
cdlvcdlv

Ich antworte mir selbst:

Ich fand eine Frage im Zusammenhang, und ich dachte, ich könnte Rohr ffmpeg ffplay . Es funktioniert teilweise (Sie können das zusammengefügte Video ansehen), aber Sie können nicht suchen (und die CPU wird verschluckt).

ffmpeg -i BACKGROUND -i OVERLAY -filter_complex [0][1]overlay=100:100 -f matroska - | ffplay - 

Aber ich dachte nicht, dass ffplay verwendet werden könnte. Obwohl ffplay nur eine -iOption akzeptiert, um die ffmpeg- Filter zu überarbeiten, bin ich auf den movieFilter gestoßen (fast ungenutzt mit ffmpeg, da Sie mehrere -iOptionen hinzufügen können), der eine Möglichkeit zum Hinzufügen bietet mehr Eingänge. Nach einigen Tests konnte ich machen, was ich wollte:

ffplay -i BACKGROUND -vf "movie=OVERLAY[ov]; [in][ov]overlay=100:100"

(Wenn Sie Windows verwenden und OVERLAYein Name mit Leerzeichen ist, können Sie ihn mit einschließen ''.)

Mit dieser Befehlszeile können Sie das resultierende Video ohne erkennbare zusätzliche CPU suchen (klicken Sie einfach mit der rechten Maustaste auf das Bild - Sie werden zu dem Prozentsatz in der Datei, der dem Bruch der Breite entspricht) angezeigt.

Ein Plus ist, wenn Sie zusätzliche Optionen für die endgültige Kodierung mit ffmpeg benötigen, können sie von ffplay nicht verstanden werden .