División de un archivo de audio en fragmentos de una longitud específica

16

Tengo varios archivos de audio largos (80 minutos cada uno; m4a) y quiero que se dividan en partes de 5 o 10 minutos.

Veo muchas preguntas para dividir un archivo de audio en pausas extendidas, tonos, etc., pero parece que no puedo encontrar una con respecto a esta operación simple. ¿Alguien sabe una manera simple de hacer esto?

Por supuesto, algo automático, y la línea de comandos está bien, incluso es preferible.

¡Gracias por adelantado!

Andrew Cheong
fuente

Respuestas:

20

Con ffmpeg reciente (descargue una compilación estática desde aquí ):

ffmpeg -i in.m4a -f segment -segment_time 300 -c copy out%03d.m4a

Esto usa el segmento muxer y copia los flujos de bits. Si su archivo tiene transmisiones de audio y video, puede deshabilitar la transmisión de video con -vn.


Aquí hay una línea, solo necesita Ruby y FFmpeg instalados:

ruby -e '(0..4500).step(300) { |x| system "ffmpeg -ss #{x} -i in.m4a -c copy -t 300 out-#{x}.m4a"}'

Simplemente ejecute eso en la misma carpeta donde in.m4aestá. Copiará el flujo de bits de audio, por lo que ejecutar esto probablemente tomará menos de unos segundos.

Para explicar:

  • 4800 segundos es la duración del archivo de audio (80 minutos × 60 segundos), por lo que nuestra última división es de 4500 (4800 - 300 segundos).
  • Pasamos de 0 a 4500, y nos dividimos cada 300 segundos (5min × 60s).
  • FFmpeg comenzará a la hora especificada por -ss
  • Y copiará por el tiempo especificado por -t
  • Escribirá varios archivos de salida llamados out-<x>.mp4, donde <x>es el tiempo de inicio en segundos.
slhck
fuente
¡Gracias! ¿Es su comando para UNIX o también funciona en Windows? Tengo una instalación de Cygwin, por lo que no debería importar, pero me pregunto. Lo intentaré cuando llegue a casa.
Andrew Cheong
Esto funciona de forma nativa en Linux (y Unixes que tienen instalado Ruby), y también debería funcionar en Windows: simplemente necesita Ruby y FFmpeg, pero no necesitará Cygwin para eso. También hay ejecutables de Ruby Installer y FFmpeg para Windows. Ahora, el comando FFmpeg podría automatizarse sin Ruby, usando archivos por lotes de Windows o PowerShell, pero no soy un usuario de Windows, por eso tomé Ruby (porque viene con Linux y OS X). ¿Quizás alguien con experiencia en lotes de Windows pueda reescribir el comando Ruby anterior?
slhck
Tengo Cygwin porque no puedo acostumbrarme a la línea de comandos de Windows. Creo que ya tengo instalado ruby ​​y ffmpeg, así que debería poder usar tu comando. Pero sí, una versión de Windows podría ayudar a alguien más a ver esta pregunta. +1 por ahora; aceptará cuando lo intente.
Andrew Cheong
2
Si, como yo, su archivo m4a incluye una transmisión de video (en mi caso, una sola imagen), entonces necesita agregar el -vninterruptor para seleccionar solo la transmisión de audio. Si desea conservar la transmisión de video, deberá enviar un archivo con la extensión .mp4.
Rob Church
2

Estaba buscando una solución para esto yo mismo. La forma más fácil que encontré para hacer esto es a través de MP4Box :

mp4box -split 300 infile.m4a

Donde "300" es el tiempo en segundos. MP4Box escribirá automáticamente archivos de salida numerados.

(No necesita instalar toda la aplicación GPAC grande. Estos son los archivos que puede extraer del archivo para que funcione: js.dll; libeay32.dll; libgpac.dll; MP4Box.exe; ssleay32.dll)

dfkt
fuente
2

Ha pasado un tiempo desde que se hizo esta pregunta, pero después de perder el tiempo con Ruby y ffmpeg, decidí que tenía que haber una manera más fácil de hacerlo dentro de Windows, y descubrí que sí.

Descargue e instale Audacity

Cree un archivo de texto en algún lugar donde pueda encontrarlo y pegue la siguiente cadena en él: (intervalos de 300 segundos, es decir, 5 minutos, 10 minutos serían 600 intervalos, etc.)

0       300  
300     600  
600     900  
900     1200  
1200    1500  
1500    1800  
1800    2100  
2100    2400  
2400    2700  
2700    3000  
3000    3300  
3300    3600  
3600    3900  
3900    4200  
4200    4500  
4500    4800  
4800    5100  
5100    5400  
5400    5700  
5700    6000  
6000    6300  
6300    6600  
6600    6900  
6900    7200  
7200    7500  
7500    7800  
7800    8100  
8100    8400  
8400    8700  
8700    9000  
9000    9300  
9300    9600  
9600    9900  
9900    10200  
10200   10500  
10500   10800  
10800   11100  
11100   11400  
11400   11700  
11700   12000  
12000   12300  
12300   12600  
12600   12900  
12900   13200  
13200   13500  
13500   13800  
13800   14100  
14100   14400  
14400   14700  
14700   15000  

Solo asegúrate de que el número de intervalos sea mayor que la longitud total de tus archivos de audio, creé este que dura más de tres horas, mucho tiempo para mis necesidades, agrega más para satisfacer tus necesidades.

Importe el archivo de audio a Audacity y realice cualquier balanceo y cualquier otra edición que desee, luego haga clic en archivo> etiquetas> importar etiquetas

Seleccione su archivo de texto, luego seleccione la pista de la etiqueta y la pista de audio al mismo tiempo y haga clic en archivo> Exportar múltiples.

Cambie el tipo de archivo al que desea exportar y ajuste la configuración, luego seleccione la carpeta de destino.

Siempre cambio el patrón de numeración a Numeración después del prefijo de nombre de archivo y escribo el nombre de archivo que quiero en el cuadro y el programa agregará los números, presione Exportar y viola.

C. Hamilton
fuente
-1

Descargar Audacity: es una herramienta de audio gratuita que puede hacer exactamente lo que necesitas, y es totalmente gratuita y fácil de usar. http://audacity.sourceforge.net/

JohnnyVegas
fuente
2
¿Hay alguna manera de hacer que Audacity haga esto automáticamente? No quisiera cortar manualmente varios archivos en 16 partes cada uno seleccionando piezas de 5 minutos con mi mouse, cortarlos, ir al menú, guardar los archivos, etc.
slhck
Ya tengo Audacity, así que si hay una forma automática, ¡házmelo saber!
Andrew Cheong