
En FFmpeg, ¿es posible mapear una salida desde el medio de una cadena de filtros?
Por ejemplo, en este comando:
ffmpeg -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50[txt1];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50[txt2];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50[txt3];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50[txt4]" -map "[txt4]" -t 10 -y ~/Desktop/mapping.mp4
Esto funciona: -map "[txt4]". Al intentar asignar "[txt3]" (o txt2 o txt1), aparece "
La salida con la etiqueta 'txt3' no existe en ningún gráfico de filtro definido o ya se usó en otro lugar".
Quiero llamar al comando completo y usar diferentes partes de la cadena de filtros ( -map [$val]
) para generar diferentes archivos.
Gracias
Respuesta1
Es posible, pero tenemos que usardividirfiltro para el "filtro medio".
Cuando el "filtro intermedio" se utiliza como entrada para otro filtro, ese filtro lo "consume" y no se puede utilizar más adelante.
A continuación se muestra un ejemplo para crear archivos de vídeo a partir de todos los "filtros intermedios" con un solo comando:
ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4]" -t 10 -map "[txt1out]" mapping1.mp4 -t 10 -map "[txt2out]" mapping2.mp4 -t 10 -map "[txt3out]" mapping3.mp4 -t 10 -map "[txt4]" mapping4.mp4
Para codificar cada archivo por separado, podemos agregarselección de flujofiltro, al final de la cadena de filtros:
[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]
Establecer map=0
para seleccionar [txt1out]
, establecer map=1
para seleccionar [txt2out]
...
Comando de muestra:
ffmpeg -y -f lavfi -i smptehdbars=rate=25:size=1920x1080 -filter_complex "[0:v]drawtext=text=text1:x=100/2:y=100:fontsize=50:fontfile=arial.ttf,split[txt1][txt1out];[txt1]drawtext=text=text2:x=200/2:y=200:fontsize=50:fontfile=arial.ttf,split[txt2][txt2out];[txt2]drawtext=text=text3:x=300/2:y=300:fontsize=50:fontfile=arial.ttf,split[txt3][txt3out];[txt3]drawtext=text=text4:x=400/2:y=400:fontsize=50:fontfile=arial.ttf[txt4];[txt1out][txt2out][txt3out][txt4]streamselect=4:map=1[out]" -t 10 -map "[out]" mapping2.mp4
Nota: Fue necesario
agregar para que funcionara en Windows.fontfile=arial.ttf
drawtext