Merging\Joining three FFMPEG Commands (Drawtext / -filter_complex overlay / anullsrc=channel_layout)

Actualmente estoy usando tres comandos diferentes para crear tres mp4s solo para eliminar los dos vídeos "temporarios" usando este código.

@ECHO OFF
ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -vf "drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange" "out1.mp4"
ffmpeg -i "out1.mp4" -i logo.png -filter_complex "overlay=x=10:y=10" "out2.mp4"
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -i "out2.mp4" -c:v copy -c:a aac -shortest "out3.mp4"
del "out1.mp4"
del "out2.mp4"
pause

Lo más cercano que he venido es mover el anullsrc=channel_layout en el -filter_complex pero eso resulta en un código largo que realmente no entiendo lo que está pasando porque si ctrl-c para cancelar el lote todavía crea out3.mp4 correctamente.

ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -vf "drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange" "out1.mp4"
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000  -i "out1.mp4" -i logo.png -filter_complex "overlay=x=10:y=10" "out3.mp4"

Parece que esto podría ser simplificado para no crear los archivos temporales. Pero tal vez esta es la única manera de hacer esto. Gracias por cualquier ayuda y perdón si la respuesta es obvia.

Rory

Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecraftsman


3 Respuestas:

  • Uso

    ffmpeg -f lavfi -i color=s=1280x720:d=5:r=25:color=black -i logo.png -f lavfi -i anullsrc=cl=stereo:d=5:r=48000 -filter_complex "[0]drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange[vid];[vid][1]overlay=x=10:y=10" -c:v libx264 -c:a aac "out3.mp4"

    Respondida el Dec 18, 2020 a las 11:32 - por phpphoenix

    Votos positivos: 0 | Votos negativos: 0

  • ¡Hola Rory!

    Para combinar los tres comandos de FFMPEG en uno solo y evitar la creación de archivos temporales, puedes utilizar la opción -filter_complex para aplicar múltiples filtros y efectos en una sola ejecución. Aquí te dejo el comando combinado que fusiona los tres comandos que mencionaste:

    bash
    ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -i logo.png -filter_complex "[0:v]drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Exchange',overlay=x=10:y=10[v];anullsrc=channel_layout=stereo:sample_rate=48000[a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -shortest "out3.mp4"
    

    En este comando combinado, se realiza lo siguiente:

    • Se crean las imágenes y texto en el video de entrada inicial con `drawtext`.
    • Se aplica el overlay del logo sobre el video resultante.
    • Se genera el audio nulo con el formato adecuado.
    • Se mapean los flujos de video y audio para la salida final.
    • Se utiliza los códecs `libx264` para el video y `aac` para el audio en el resultado final.

    Espero que esta solución te sea útil para simplificar tu proceso de creación de videos con FFMPEG. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 19, 2020 a las 11:33 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Comando simplificado que elimina los archivos temporales:

    
    ffmpeg -f lavfi -i color=size=1280x720:duration=5:rate=25:color=Black -vf "drawtext=fontfile='GothamRnd-Book.otf':line_spacing=15:fontsize=15:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text=Stack Exchange" -filter_complex "[0:v]overlay=x=10:y=10[vout]" -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -c:v copy -c:a aac -shortest -map "[vout]" -map 1:a "out3.mp4"
    

    Explicación:

    Este comando combina los tres comandos originales en uno solo, eliminando la necesidad de crear archivos temporales.

    El filtro [0:v]overlay=x=10:y=10[vout] superpone la imagen con el logotipo sobre el vídeo con texto. La opción -map "[vout]" especifica el vídeo con el logotipo superpuesto como salida de vídeo. La opción -map 1:a especifica el audio de anullsrc como salida de audio.

    Beneficios:

    Elimina la necesidad de crear archivos temporales, lo que ahorra tiempo y espacio. Simplifica el proceso y lo hace más fácil de entender. Sigue produciendo el mismo resultado que el código original.

    Respondida el Dec 19, 2020 a las 11:44 - por Gemini

    Votos positivos: 0 | Votos negativos: 0