es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo fusionar dos videos .mp4 de diferentes resoluciones

Necesito incrustar videos en youtube a través de la API, y para hacer que el proceso sea un poco más práctico, quiero fusionar mi viñeta con los videos antes de publicarlos en youtube. Sin embargo, los videos tienen diferentes resoluciones y características diferentes, por lo que la solución que encontré deja el video final con problemas de audio o transmisión.

Finalmente encontré la siguiente solución, que funciona bien, pero es extremadamente lenta, vea:

$codigo1 = 'ffmpeg -i vinheta.mp4 -qscale 0 vinheta.mpg';
$codigo2 = 'ffmpeg -i movie2.mp4 -qscale 0 movie2.mpg';
$codigo3 = 'cat vinheta.mpg movie2.mpg | ffmpeg -f mpeg -i - -qscale 0 -vcodec mpeg4';

system($codigo1);
system($codigo2);
system($codigo3);

Esta solución funciona bien y sin interrupciones, pero realmente lleva mucho tiempo, algunos videos tardan hasta 2 horas en convertirse y después el video es extremadamente pesado.

Investigué en varios lugares y probé todo tipo de código, y este fue el único que encontré que funciona sin dejar el video final con problemas de audio o video independientemente de la resolución.

Otra solución interesante es la siguiente:

$codigo1 = "ffmpeg -i vinheta.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts";
$codigo2 = "ffmpeg -i 4.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts";
// ahora se unen
$codigo3 = "ffmpeg -i \"concat:temp1.ts|temp2.ts\" -c copy -bsf:a aac_adtstoasc output.mp4";

system($codigo1);
system($codigo2);
system($codigo3);

El archivo de salida funciona perfectamente bien. Pero solo en mi computadora. Cuando lo envío a youtube, el audio del segundo video se corta constantemente.

¿Existe alguna forma más simple y ligera de hacer esto sin afectar mi video final?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en ffmpeg, puedo ofrecer algunas sugerencias para hacer el proceso de fusionar videos con viñetas más práctico y eficiente.

    1. En lugar de convertir cada video al formato MPEG y luego combinarlos, es mejor usar el formato contenedor (como MP4) que permite utilizar códecs de video y audio. Esto se puede lograr utilizando el siguiente código:
    $code = 'ffmpeg -i vinheta.mp4 -i movie2.mp4 -filter_complex "[0:v]scale=1280x720 [v0]; [1:v]scale=1280x720 [v1]; [v0][0:a][v1][1:a] concat=n=2:v=1:a=1 [v] [a]"'
    

    Este código escalará ambos videos a la misma resolución y luego los concatenará junto con sus flujos de audio.

    1. Otra opción es utilizar la opción “-shortest” para asegurarse de que la duración del audio de ambos videos sea la misma. Esto se puede agregar al código anterior de la siguiente manera:
    $code = 'ffmpeg -i vinheta.mp4 -i movie2.mp4 -filter_complex "[0:v]scale=1280x720 [v0]; [1:v]scale=1280x720 [v1]; [v0][0:a][v1][1:a] concat=n=2:v=1:a=1 [v] [a]" -shortest'
    

    Esto acortará la duración del video más largo para que coincida con la duración del video más corto y evitará problemas de audio y video.

    1. Otro posible problema podría ser la velocidad de bits de los videos, que puede causar problemas de reproducción en ciertos dispositivos o plataformas. Puedes intentar reducir la velocidad de bits del video fusionado para reducir el tamaño del archivo y mejorar la compatibilidad. Esto se puede hacer utilizando la opción “-b:v” seguida de la velocidad de bits deseada, de la siguiente manera:
    $code = 'ffmpeg -i vinheta.mp4 -i movie2.mp4 -filter_complex "[0:v]scale=1280x720 [v0]; [1:v]scale=1280x720 [v1]; [v0][0:a][v1][1:a] concat=n=2:v=1:a=1 [v] [a]" -shortest -b:v 2M'
    

    Este código establecerá la velocidad de bits de video en 2 Mbps, lo cual debería reducir el tamaño del archivo sin comprometer la calidad.

    Al usar estas opciones, puedes lograr una forma más rápida y eficiente de fusionar tu viñeta con diferentes videos, al mismo tiempo que garantizas que el video final no tenga problemas de audio o reproducción.

Comments are closed.