Recortar MP3 a los primeros 30 segundos


Pregunta inicial

Quiero ser capaz de generar un nuevo archivo MP3 (totalmente válido) a partir de un archivo MP3 existente para ser utilizado como una vista previa style try-before-you-buy style. El nuevo archivo solo debe contener los primeros n segundos de la pista.

Ahora, sé que podría simplemente "cortar la secuencia" en n segundos (calculando a partir de la tasa de bits y el tamaño del encabezado) al entregar el archivo, pero esto es un poco sucio y una verdadera PITA en una pista VBR. Me gustaría ser capaz de generar un archivo MP3 adecuado.

¿Alguien tiene alguna idea?

Respuestas

Tanto mp3split como ffmpeg son buenas soluciones. Elegí ffmpeg ya que se instala comúnmente en servidores linux y también está fácilmente disponible para windows. Aquí hay algunos parámetros de línea de comandos más buenos para generar vistas previas con ffmpeg

  • -t <seconds> corte después del número especificado de segundos
  • -y forzar archivo sobrescribir
  • -ab <bitrate> establecer la tasa de bits, por ejemplo, - ab 96k
  • -ar <rate Hz> establezca la velocidad de muestreo, por ejemplo, - ar 22050 para 22,05 kHz
  • -map_meta_data <outfile>:<infile> copiar metadatos de pista de infile a outfile

En lugar de configurar-ab y-ar, puede copiar la configuración original de la pista, como sugiere Tim Farley, con:

  • -acodec copy
 80
Author: Sridhar-Sarnobat, 2008-09-04

10 answers

También recomiendo ffmpeg, pero la línea de comandos sugerida por John Boker tiene un efecto secundario no deseado: re-codifica el archivo a la tasa de bits predeterminada (que es 64 kb/s en la versión que tengo aquí al menos). Esto podría dar a sus clientes una falsa impresión de la calidad de sus archivos de sonido, y también lleva más tiempo hacerlo.

Aquí hay una línea de comandos que cortará a 30 segundos sin transcodificación:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

El conmutador-acodec le dice a ffmpeg que use el códec especial" copiar" que no transcodifica. Es muy rápido.

NOTA: el comando se actualizó basado en el comentario de Oben Sonne

 111
Author: Tim Farley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-15 22:01:00

Si desea ELIMINAR los primeros 30 segundos (y mantener el resto), use esto:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
 46
Author: the.jxc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-25 10:39:12

Intenta:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
 16
Author: John Boker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 14:45:30

Puedes usar mp3cut:

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0

Está en ubuntu repo, así que solo: sudo apt-get install cutmp3.

 9
Author: Michał Šrajer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-19 00:15:13

Es posible Que desee probar Mp3Splt.

Lo he usado antes en un servicio de C# que simplemente envolvía el mp3splt.proceso exe win32. Asumo que algo similar podría hacerse en su escenario Linux/PHP.

 5
Author: Ryan Duffield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 14:45:52

Solo un pensamiento: es posible que desee omitir el comienzo de la canción original. Digamos que puedes usar la pieza de 30 segundos comenzando en el tercer de la canción.
En algunas canciones, los primeros 30 segundos no te dicen mucho, ya que es solo una parte de "establecer la escena", por ejemplo, Pink Floyd's Shine On You Crazy Diamond.

 5
Author: Tomas Sedovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 15:18:59

Este comando también funciona perfecto. Recorté mi música de 20 segundos a 40 segundos.

-y : forzar la sobreescritura del archivo de salida.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
 5
Author: Rahul Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 06:03:07

No lo he usado para este propósito específico, pero apuesto a que ffmpeg puede hacerlo.

 3
Author: grapefrukt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 14:38:47

Como nota, lo pasé muy mal con ffmpeg, mptsplit y mp3cutter en CentOS, todos ellos reportando "Header Missing". Por lo tanto, tuve que ir con la clase de MP3 y algunas matemáticas para cortar por tamaño de archivo.

 1
Author: Gardner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-28 19:36:52

Tengo un error al hacer lo mismo

Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:

Arreglo para mí fue:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
 0
Author: Mithun Cheriyath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-22 02:23:53