So verbinden Sie drei oder mehr Audio- / Videodateien in ffmpeg mit Picture in Picture

0

Ich versuche, eine einzelne Videodatei mit mehreren Picture in Picture (kurz PIP) zu erstellen. Ich konnte zwei Bilder in einem Bild zum Laufen bringen. Ich versuche jetzt, einen 4. Eingang hinzuzufügen.

Was ich mir erhoffe, wird so aussehen:

Mockup Image Beispiel

Mein versuchter Befehl:

ffmpeg -i 444_remote_0.webm -i 444_remote_1.webm -i 444_remote_2.webm \
       -i 444_local_0.webm -filter_complex \
       "[1:v]scale=iw/4:-1:flags=lanczos[rem1]; \
        [2:v]scale=iw/4:-1:flags=lanczos[rem2]; \
        [3:v]scale=iw/4:-1:flags=lanczos[loc0]; \
        [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; \
        [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; \
        [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; \
        [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
       -map "[v]" -map "[a]" -ac 2 -ar 44100 -vcodec libx264 -acodec aac 444.mp4

Ich erhalte einen neuen Fehler: Invalid stream specifier: bg.

Konsolenausgabe:

ffmpeg -i 444_remote_0.webm -i 444_remote_1.webm -i 444_remote_2.webm -i 444_local_0.webm -filter_complex "[1:v]scale=iw/4:-1:flags=lanczos[rem1]; [2:v]scale=iw/4:-1:flags=lanczos[rem2]; [3:v]scale=iw/4:-1:flags=lanczos[loc0]; [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" -map "[v]" -map "[a]" -ac 2 -ar 44100 -vcodec libx264 -acodec aac 444.mp4
ffmpeg version N-80901-gfebc862 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, matroska,webm, from '444_remote_0.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #0:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #1, matroska,webm, from '444_remote_1.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #1:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #1:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #2, matroska,webm, from '444_remote_2.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #2:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #2:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Input #3, matroska,webm, from '444_local_0.webm':
  Metadata:
    encoder         : Chrome
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #3:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
    Stream #3:1(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
[matroska,webm @ 0x35f5c40] Invalid stream specifier: bg.
    Last message repeated 1 times
Stream specifier 'bg' in filtergraph description [1:v]scale=iw/4:-1:flags=lanczos[rem1]; [2:v]scale=iw/4:-1:flags=lanczos[rem2]; [3:v]scale=iw/4:-1:flags=lanczos[loc0]; [0:v][loc0]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg]; [bg][rem1]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v]; [bg][rem2]overlay=main_w-overlay_w-360:main_h-overlay_h-10[v]; [0:a][1:a][2:a][3:a]amerge=inputs=4[a] matches no streams.
Daryl
quelle
Sie müssen die vollständige Konsolenausgabe Ihres letzten Befehls anzeigen (ohne -loglevel fatal).
Logan
@LordNeckbeard Danke für die Eingabe, ich hatte nicht bemerkt, dass es angebracht war, so viel in der Nachricht zu posten. Ich habe meinen ursprünglichen Beitrag mit der vollständigen Konsolenausgabe bearbeitet.
Daryl

Antworten:

2

Platzierungsoption 1: Nach rechts hängen

Wie dein Mockup, bei dem die Pip rechts gewichtet sind:

Bildbeschreibung hier eingeben

ffmpeg -i blue.webm -i green.webm -i red.webm -i orange.webm -filter_complex \
"[1:v]scale=iw/4:-1:flags=lanczos[pip1]; \
 [2:v]scale=iw/4:-1:flags=lanczos[pip2]; \
 [3:v]scale=iw/4:-1:flags=lanczos[pip3]; \
 [0:v][pip1]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg1]; \
 [bg1][pip2]overlay=main_w-overlay_w*2-20:main_h-overlay_h-10[bg2]; \
 [bg2][pip3]overlay=main_w-overlay_w*3-30:main_h-overlay_h-10,format=yuv420p[v]; \
 [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
-map "[v]" -map "[a]" -ac 1 output.mp4

Platzierungsoption 2: zentriert

Bildbeschreibung hier eingeben

ffmpeg -i blue.webm -i green.webm -i red.webm -i orange.webm -filter_complex \
"[1:v]scale=iw/4:-1:flags=lanczos[pip1]; \
 [2:v]scale=iw/4:-1:flags=lanczos[pip2]; \
 [3:v]scale=iw/4:-1:flags=lanczos[pip3]; \
 [0:v][pip1]overlay=main_w-overlay_w-10:main_h-overlay_h-10[bg1]; \
 [bg1][pip2]overlay=(main_w-overlay_w)/2:main_h-overlay_h-10[bg2]; \
 [bg2][pip3]overlay=10:main_h-overlay_h-10,format=yuv420p[v]; \
 [0:a][1:a][2:a][3:a]amerge=inputs=4[a]" \
-map "[v]" -map "[a]" -ac 1 output.mp4

Anmerkungen

  • Der Lanczos- Skalierungsalgorithmus wird wahrscheinlich besser als der Standard skaliert .

  • Die Standardanzahl der Eingaben für amerge ist 2, aber es ist am besten, immer die inputsOption zu verwenden, um das aufgetretene Problem zu vermeiden.

  • Verwenden Sie einen eindeutigen Namen für jedes Ausgabeetikett im Filtergraphen.

  • Wenn Ihre Eingaben nicht die gleiche Dauer haben , lesen Sie die Überlagerungsoptionen usw., um zu erfahren, wie mit eventuellen Dauerdifferenzen umgegangen werden soll.eof_actionshortest

  • Sie können pan and omit verwenden -ac, um das Downsampling-Layout genauer zu steuern.

Logan
quelle
Vielen Dank! Das hat einwandfrei funktioniert! Ich schätze die Info wirklich sehr. Vielen Dank!
Daryl
Danke noch einmal. Ich habe versucht, eine vierte Eingabedatei hinzuzufügen, aber es schien mir nicht zu gefallen, den [bg] -Alias ​​zweimal zu verwenden. Es gab mir Fehler: Invalid stream specifier: bg.sierten die 3. PIP: [3:v]scale=iw/4:-1:flags=lanczos[pip3];Hinzugefügt ein weiteres Overlay: [bg][pip3]overlay=main_w-overlay_w-180:main_h-overlay_h-10[v];Aktualisiert Amerge: [0:a][1:a][2:a][3:a]amerge=inputs=4[a]. Soll ich das als separate Frage posten? Es ist ein bisschen lang hier in den Kommentaren.
Daryl
@Daryl Sie können Ihre Frage mit Ihrem neuen Befehl und der entsprechenden vollständigen Konsolenausgabe bearbeiten. Aus der Antwort "Verwenden Sie einen eindeutigen Namen für jedes Ausgabeetikett im Filtergraphen". Wo soll der 3. Pip platziert werden?
Logan
Vielen Dank. Ich habe die gesamte Konsole bearbeitet und einen Bildlink hinzugefügt, um Ihnen zu zeigen, wie ich die Videos anordnen möchte. Vielen Dank!
Daryl
@Daryl Was ist Ihre Präferenz für das Audio: Welche Eingangskanäle sollten zu welchen Ausgangskanälen gehen? Was ist Ihr gewünschtes Ausgabekanal-Layout? Mono, Stereo?
Logan