Recortar MP3 a los primeros 30 segundos

103

Pregunta original

Quiero poder generar un archivo MP3 nuevo (totalmente válido) a partir de un archivo MP3 existente para usarlo como vista previa, estilo de prueba antes de comprar. 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 un PITA real en una pista VBR. Me gustaría poder generar un archivo MP3 adecuado.

¿Alguien alguna idea?

Respuestas

Ambos mp3splity ffmpegson 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> cortar después de un número especificado de segundos
  • -y forzar la sobrescritura del archivo
  • -ab <bitrate>establecer la tasa de bits, por ejemplo, -ab 96k
  • -ar <rate Hz>establecer la frecuencia de muestreo, por ejemplo, -ar 22050 para 22,05 kHz
  • -map_meta_data <outfile>:<infile> copiar los metadatos de la pista de infile a outfile

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

  • -acodec copy
Cheekysoft
fuente
No lo he usado para este propósito específico, pero apuesto a que ffmpeg puede hacerlo.
pomelo
Solo un pensamiento: es posible que desee omitir el comienzo de la canción original. Digamos que puedes usar una pieza de 30 segundos a partir del tercero de la canción. En algunas canciones, los primeros 30 segundos no le dice mucho, ya que es sólo una "configuración de la escena" parte - por ejemplo, Pink Floyd 's Shine On You Crazy Diamond .
Tomas Sedovic
Solo como nota, lo pasé muy mal con ffmpeg, mptsplit y mp3cutter en CentOS, todos ellos informaron "Falta de encabezado". Entonces, tuve que ir con la clase de MP3 y algunas matemáticas para cortar.
Gardner
No me di cuenta de que ffmpeg podía hacer eso. Gracias.
Sridhar Sarnobat

Respuestas:

142

También recomiendo ffmpeg, pero la línea de comando sugerida por John Boker tiene un efecto secundario involuntario: vuelve a codificar el archivo a la tasa de bits predeterminada (que es de 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 comando que se dividirá en 30 segundos sin transcodificar:

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

El modificador -acodec le dice a ffmpeg que use el códec especial de "copia" que no transcodifica. Es rápido como un rayo.

NOTA: el comando se actualizó según el comentario de Oben Sonne

Tim Farley
fuente
21
Las ffmpegversiones recientes (al menos desde 0.10.6) interpretan las opciones de manera diferente según la posición. Las opciones relacionadas con la entrada deben aparecer antes -i ...y las opciones relacionadas con la salida deben aparecer después -i .... Este medio ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3sería ahora la respuesta correcta.
Oben Sonne
¿Puedo extraer audio de 30 segundos de un archivo de entrada de 15 segundos, significa que si el archivo ralla, luego 30 segundos, luego extrae 30 segundos, pero si el archivo es de 15 segundos, repita y extrae 30 segundos completos.
Girish Patidar
6
Si desea establecer la hora de inicio (compensación), puede usar -ss hh:mm:ss[.xxx]. Ejemplo: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3cortará a 30 segundos a partir de 00h 00m 15s 500ms .
patryk.beza
1
por alguna razón, el comando anterior no funcionó para mí, pero si lo cambié a: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3entonces está funcionando perfectamente
Krishnendu
Para mí, las opciones -t y -s deben usarse por separado en 2 comandos. ¡Pero funciona, gracias!
Yan King Yin
57

Si desea QUITAR los primeros 30 segundos (y conservar el resto), utilice esto:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
the.jxc
fuente
18

tratar:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
fuente
12

Este comando también funciona perfectamente. Recorté mis archivos de música de 20 a 40 segundos.

-y: fuerza a sobrescribir el archivo de salida.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Rahul Chauhan
fuente
1
¡Perfecto! Gracias por compartir esto.
HerrimanCoder
11

puedes usar mp3cut:

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

Está en ubuntu Repo, por lo que sólo: sudo apt-get install cutmp3.

Michał Šrajer
fuente
6

Es posible que desee probar Mp3Splt .

Lo he usado antes en un servicio C # que simplemente envolvió el proceso win32 de mp3splt.exe. Supongo que se podría hacer algo similar en su escenario Linux / PHP.

Ryan Duffield
fuente
2
Se usó MP3Split con éxito para el corte de mp3
Freshblood
0

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:

La solución para mí fue:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
fuente
0

medipack es una aplicación de línea de comandos muy simple como envoltorio ffmpeg.

puede lograr recortar su video usando estos comandos:

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

puede ver las opciones del subcomando trim como:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

también puede explorar otras opciones usando medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

puede visitar https://github.com/srbcheema1/medipack y ver ejemplos de pago en README.

srbcheema1
fuente
1
¿Cuál es la ventaja de esta envoltura? Porque no parece más simple queffmpeg -i input -ss <start time> -to <end time> output
llogan
También agregué una opción de la -tcual se puede usar alternativamente, lo -eque significa que suponga que debo recortar el siguiente video de 4 minutos y 36 segundos, no tengo que preocuparme de agregar esos tiempos manualmente, también he proporcionado una facilidad similar al recortar los videos, vea los ejemplos en README entenderá por qué su CLI es más fácil que el simple ffmpeg. Estoy de acuerdo en que no es tan poderoso, pero para una persona normal es una herramienta útil.
srbcheema1
2
ffmpegtiene la -toopción que es lo que -tprobablemente hace.
llogan
¿Qué pasa con la opción de% de edad de cultivo mencionada en README en la subopción de cultivo, también está disponible? Acabo de crear esa herramienta a pedido por alguien que me pagó poco dinero, ya que no quieren preocuparse por la gran lista de opciones de cli, solo querían una herramienta que pudiera hacer ciertas tareas con facilidad, incluso si hay todas las opciones en ffmpeg, pero aún así, sería difícil para un novato encontrarlos todos en la sección de ayuda de la línea de comandos. esta herramienta tiene una sección de ayuda simple fácil de entender para un novato
srbcheema1
Claro,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan