ffmpeg: escala imágenes antes de la mezcla de fundido cruzado usando filter_complex

ffmpeg: escala imágenes antes de la mezcla de fundido cruzado usando filter_complex

Estoy intentando crear un mp4 de una imagen fusionada con otra usando el filtro de mezcla y filter_complex, como se ilustra enesta respuesta.

Pero también quiero escalar ambas imágenes a 480p antes de fusionarlas. Aquí está el comando que estoy usando:

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

Sin embargo, parece que concat falla y genera el siguiente resultado:

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

Ambas imágenes son 4000x2000px,campo.jpgyisla.jpg.

Realmente aprecio cualquier ayuda. Usando una compilación nocturna reciente:

ffmpeg version N-81188-gcebad64-static

Respuesta1

Usar

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

Las almohadillas de entrada generadas dentro de un complejo de filtros solo se pueden consumir una vez. Entonces, puse una división para generar una copia para concat. También cambié la escala para -2:480preservar la relación de aspecto. Puedes revertirlo, hd480pero los reproductores web que no respetan las banderas de relación de aspecto mostrarán el video distorsionado.

información relacionada