Agregue silencio al final de un MP3


12

¿Alguno de ustedes sabe de una manera de agregar silencio de una duración fija al final de un MP3, en Linux? Por ejemplo, usando MEncoder, FFmpeg, etc.

Debe ser la línea de comandos, ya que se ejecutará en nuestro servidor.

Busqué en Google esto y lo mejor que pude hacer es usar la padfunción en SoX , pero eso no funcionará con MP3.

Podría convertirlo a WAV, usar SoX, luego convertirlo nuevamente a MP3 y copiar los metadatos (menos la duración) del original al nuevo MP3. Pero, antes de escribir un guión para eso, pensé en ver si había una solución única.


2
Creo que puede lograr algo como esto con mp3DirectCut (solo Windows, pero dicen que es compatible con Linux en Wine), lo que evita volver a comprimir los datos de sonido. Si tuviera que ir a MP3 -> WAV -> MP3, estaría volviendo a comprimir el flujo de datos comprimido de MP3, perdiendo mucha calidad en el camino.
Avance el

Gracias. ¿Se puede ejecutar el software de Windows a través de Wine desde la línea de comandos? Preferiría evitar las soluciones de Wine si es posible, ya que soy reacio a instalar Wine en nuestro servidor.
Max Williams

Hmm, es posible que desee evitar la ruta del vino si aún no la tiene. El vino en sí es una descarga bastante grande, muy por encima de un megabyte o dos para una simple herramienta de corte / fusión de MP3. Estoy seguro de que hay una solución equivalente, nativa de Linux. Si encuentro alguna herramienta adicional, me aseguraré de informarle.
Avance el

Respuestas:


9

Puede hacerlo fácilmente con el padargumento de SoX y la siguiente sintaxis:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

Ejemplo:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

Esos silencios son en segundos. (Otros usos son posibles utilizando una sintaxis diferente, para insertar esos silencios en posiciones específicas. Consulte la documentación de SoX para obtener más información).


Debo señalar que lo probé bien con archivos MP3 (con libmad-0.dll y libmp3lame-0.dll instalados, respectivamente para decodificar y codificar MP3). En la medida de lo posible, recomendaría trabajar con un formato sin pérdidas y solo convertir a MP3 al final solamente.
Fabien Snauwaert 01 de

eso es genial, ¡gracias Fabien!
Max Williams

¿Es esto sin pérdidas?
Geremia

Actualización: leí en la página de manual de Sox que se convierte a un formato interno y luego vuelve a codificar ...
Geremia

MP3 es un formato con pérdida. Codificar y volver a codificar en un formato con pérdida degradará progresivamente la calidad del audio (lo escuche o no). Como tal, es mejor trabajar con formatos sin pérdida y solo codificar en un formato con pérdida una vez, al final. Para obtener una lista de códecs de audio con pérdida: en.wikipedia.org/wiki/Lossy_compression#Audio y para obtener una lista de códecs de audio sin pérdida en.wikipedia.org/wiki/Lossless_compression#Audio
Fabien Snauwaert

15

Con ffmpeg, puede usar el filtro aevalsrc para generar silencio y luego, en un segundo comando, usar el protocolo concat para combinarlos sin pérdidas:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

Puede controlar la duración del silencio modificando el -t 10tiempo en segundos que prefiera. Por supuesto, solo necesita generar el silencio una vez, luego puede mantener el archivo y usarlo para rellenar cada uno de los archivos que desea. También es posible que desee buscar el demuxer concat : requiere un poco más de procesador, pero puede resultarle más fácil colocarlo en un script de shell.

Si desea hacerlo en un solo comando, puede usar el filtro concat; esto requerirá que vuelva a codificar su audio (ya que los gráficos de filtro son incompatibles -codec copy), por lo que la opción anterior probablemente sea la mejor para usted. Pero esto puede ser útil para cualquier persona que trabaje con PCM sin procesar, que busque agregar silencio al final antes de codificar el audio:

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

Controle la duración del silencio cambiando el d=10tiempo (en segundos) que desee. Si utiliza este método, puede encontrar útil esta guía de codificación de MP3 FFmpeg .


gracias @evilsoup. Acabo de intentarlo y obtuve lo siguiente: max-thinkpad-linux: ~ $ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 silence.mp3ffmpeg version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Unrecognized option 'filter_complex' Failed to set value 'aevalsrc=0' for option 'filter_complex'
Max Williams

@max En primer lugar, en realidad estás usando avconv del proyecto libav: son una bifurcación de FFmpeg que Debian y Ubuntu están usando en lugar del proyecto principal, y proporcionan una versión paralizada de ffmpeg. Intente usar en su avconvlugar: la sintaxis debe ser la misma, solo reemplace ffmpegcon avconv.
evilsoup

Si eso no funciona, intente actualizar a una versión más nueva de ffmpeg. Como estás en Ubuntu, deberías poder usar este PPA , o para la última versión puedes compilarlo desde la fuente .
evilsoup

1
@MaxWilliams O bien, puede descargar una compilación estática , que no tiene que compilar primero. Simplemente descargue, extraiga, use.
slhck

1
para referencia futura: si enfrenta un error como yo, intente reemplazar las comillas simples con comillas dobles
SZT
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.