ffmpeg: Bilder vor dem Crossfade-Blend mit filter_complex skalieren

ffmpeg: Bilder vor dem Crossfade-Blend mit filter_complex skalieren

Ich versuche, eine MP4-Datei von einem Bild zu erstellen, das mit dem Blend-Filter in ein anderes überblendet wird filter_complex, und wie in dargestelltdiese Antwort.

Ich möchte aber auch beide Bilder vor dem Mischen auf 480p skalieren. Hier ist der Befehl, den ich verwende:

ffmpeg \
-loop 1 -t 1 -i field.jpg \
-loop 1 -t 1 -i island.jpg \
-filter_complex \
"[0:v]scale=hd480[v0]; \
 [1:v]scale=hd480[v1]; \
 [v1][v0]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
 [v0][b1v][v1]concat=n=3:v=1:a=0 [v]" -map "[v]" -threads 0 -preset ultrafast -y out.mp4

Allerdings scheint Concat mit der folgenden Ausgabe fehlzuschlagen:

Input #0, image2, from 'field.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 409918 kb/s
    Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 4000x2000 [SAR 72:72 DAR 2:1], 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #1, image2, from 'island.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 252593 kb/s
    Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 4000x2000 [SAR 72:72 DAR 2:1], 25 fps, 25 tbr, 25 tbn, 25 tbc
[swscaler @ 0x57425e0] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0x577e4a0] deprecated pixel format used, make sure you did set range correctly
[Parsed_concat_3 @ 0x59c1c20] Input link in1:v0 parameters (size 852x480, SAR 80:71) do not match the corresponding output link in0:v0 parameters (4000x2000, SAR 72:72)
[Parsed_concat_3 @ 0x59c1c20] Failed to configure output pad on Parsed_concat_3
Error configuring complex filters.
Invalid argument

Beide Bilder sind 4000x2000px groß,feld.jpgUndInsel.jpg.

Ich bin für jede Hilfe wirklich dankbar. Ich verwende einen aktuellen Nightly Build:

ffmpeg version N-81188-gcebad64-static

Antwort1

Verwenden

ffmpeg -loop 1 -t 1 -i field.jpg -loop 1 -t 1 -i island.jpg  
       -filter_complex "[0:v]scale=-2:480,split[v0][cv0];
                        [1:v]scale=-2:480,split[v1][cv1];
 [v1][v0]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v];
 [cv0][b1v][cv1]concat=n=3:v=1:a=0 [v]" -map "[v]" -threads 0 -preset ultrafast -y out.mp4

Innerhalb eines Filterkomplexes generierte Eingabepads können nur einmal verwendet werden. Ich habe also eine Teilung vorgenommen, um eine Kopie für die Verkettung zu generieren. Außerdem habe ich die Skalierung geändert, um -2:480das Seitenverhältnis beizubehalten. Sie können es zwar wiederherstellen, hd480aber Webplayer, die die Seitenverhältnisflags nicht beachten, zeigen das Video verzerrt an.

verwandte Informationen