Unir audio e imagen -> Salida como video usando FFmpeg

8

Tengo 1 imagen (jpg) y 1 archivo de audio (MP3) y me gustaría publicar esto como un archivo de video (por ejemplo, AVI).

¿Alguien sabe cómo usar FFMPEG para unir los dos? Me gustaría mostrar la imagen mientras dura el audio.

¿Alguna idea de alguien?

usuario41559
fuente
¿Qué sistema
operativo

Respuestas:

6

Si está en Windows, también puede hacerlo en Windows Movie Maker ... si necesita instrucciones, deje un comentario

Para FFmpeg use esto

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 es el número de fotogramas que se deben colocar en bucle para tener una imagen continua para todo el archivo audio.mp3

    Ej: durante 8 minutos y 3 segundos ((8m x 60s + 3s) x 30fps = 14490 vf)

Recurso desde aquí

subanki
fuente
Hola Subanki, ¡gracias por tu comentario! Sin embargo, no entiendo esto. Necesito generar un archivo de video desde el audio y la imagen. ¿Cómo hace eso?
user41559
@nayrsllew Me acabo de enterar de que el código no funciona, lo siento ... Bueno, lo básico es convertirlo a video usando ffmpeg -f image2 -i image% d.jpg video.mpg y luego unir video y audio
subanki
actualizado mi respuesta, fue duro pero mi 1 hora de búsqueda Google encontró, estoy feliz :)
subanki
La respuesta es correcta, ¿por qué el down -vote :(
subanki
Hola No puedo, ¿me pueden ayudar aquí? El video resultante es demasiado grande. Necesito el video del mismo tamaño del archivo mp3. Mi archivo de imagen es muy pequeño. También necesito subir este video a Youtube.
Parminder
7

Hay una manera mucho más simple que las sugeridas aquí, que no requiere calcular la cantidad de fotogramas o ingresar la longitud de los archivos individuales (especialmente mejor para el procesamiento por lotes). Con una versión reciente de ffmpeg, puede usar la -shortestopción, que detiene la codificación cuando finaliza la secuencia más corta, en este caso, input.mp3 (dado que la imagen se repetirá para siempre, tiene una longitud infinita):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

Esto usa 2 cuadros por segundo para la imagen / video, lo cual debería estar bien, pero puede configurarlo en un 25 más estándar si lo desea.

maldad
fuente
5

Subanki casi lo hizo bien. La línea de comando de trabajo es la siguiente;

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

sobrescribir archivos de salida sin preguntar

-lazo 1

La opción '-loop_input' está en desuso uso -loop 1. Consulte la documentación de ffmpeg .

-yo

archivo (s) de entrada

-r

Los cuadros por segundo
también se pueden expresar como: -r 30000/1001 dando un fps de 29.97nnn

-b: v

bitrate de vídeo; cuanto mayor sea el número, mejor será la calidad y mayor será el tamaño del archivo.

-vframes

Como se explicó anteriormente; tome el tiempo total de su archivo de audio en segundos (por ejemplo, 00:02:41 (2 minutos 41 segundos) es igual a 161 segundos totales (2 x 60) + 41). Luego, multiplique el total de segundos por los cuadros por segundo que especificó con -r (por ejemplo, 161 x 30 = 4830).

-vframes se pueden reemplazar con -t 161 (-t registro de duración o transcodificar "duración" segundos de audio / video)

-acodec

Use el códec de audio correcto para el tipo de archivo que está creando. Para .mp4 debería ser un formato AAC. El códec libvo_aacenc fue el códec de codificación correcto para mi sistema Windows 7.

-ab

velocidad de bits de audio

result.mp4

Este es el nombre del archivo de salida. Puede ser cualquier nombre de archivo legal para su sistema. La extensión ayudará a ffmpeg a determinar el códec de video adecuado si no especifica uno usando -vcodec.

Jon Hall
fuente
1

Ese simple script bash / cygwin que codificará AUTOMÁGICAMENTE todos los archivos de la extensión $ AUDIO en el directorio al archivo de video mp4 10FPS en el directorio con la imagen de la carpeta.jpg incrustada,

útil para cargas de youtube;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &
usuario113368
fuente
0

Descarga VirtualDub , luego haz esto:

  1. Abra la imagen como si abriera un archivo de video normal.

  2. Calcule la duración del audio en segundos y redondee al segundo entero más cercano (por ejemplo, 78.34 segundos se convierten en 79 segundos). Este valor se llama x de ahora en adelante.

  3. Vaya a "video> velocidad de cuadros", seleccione "cambiar a velocidad de cuadros (fps)" e ingrese "1 / x" como valor. Además, si desea tener una velocidad de fotogramas normal en el archivo resultante como 25 fps, seleccione "Convertir a fps" e ingrese la velocidad de fotogramas deseada allí.

  4. Seleccione "video> compresión" y elija su sabor favorito. Puede ser que necesite ajustar el tamaño de la imagen con el filtro de cambio de tamaño.

  5. Vaya a "audio> audio de otro archivo" y seleccione su audio allí. Si es necesario, seleccione una compresión para el audio.

  6. Guarda el archivo.

Fuente: stephanV

Oso gruñón
fuente
Gracias StephanV .. Necesito usar FFMpeg pero esta es una buena sugerencia .. gracias
user41559