Saltar al contenido

usando FFMPEG con silentdetect para eliminar el silencio de audio

José, miembro de este gran equipo, nos ha hecho el favor de redactar este escrito ya que domina perfectamente dicho tema.

Solución:

Utilizar el silenceremove filtrar. Esto elimina el silencio solo de la pista de audio: dejará el video sin editar, es decir, las cosas se desincronizarán.

Sus argumentos son un poco crípticos.

Un ejemplo

ffmpeg -i input.mp3 -af silenceremove=1:0:-50dB output.mp3

Esto quita el silencio

  • al principio (indicado por el primer argumento 1)
  • con longitud mínima cero (indicado por el segundo argumento 0)
  • el silencio se clasifica como algo por debajo de -50 decibelios (indicado por -50dB).

Documentación: filtro de eliminación de silencio FFMPEG

Además, cualquier persona que busque encontrar el valor correcto para clasificar el silencio puede desear considerar la normalización de su volumen de audio de entrada para 0dB primero, para hacer esto en ffmpeg, vea esta respuesta.

Editar

Como lo señaló @mems, para detectar si su versión de ffmpeg tiene el filtro ejecutado

ffmpeg -hide_banner -filters | grep silenceremove

si tiene el filtro, generará algo como

silenceremove A->A Remove silence

ffmpeg silent detect solo detecta el silencio. Uno tiene que escanear la salida ffmpeg y cortar el archivo mp3.

En teoría, esto se haría como:

ffmpeg -i INPUT.mp3 -af silencedetect=n=-50dB:d=1

y seguimiento de la salida en forma de:

[silencedetect @ 0000000004970f80] silence_start: -0.00154195
[silencedetect @ 0000000004970f80] silence_end: 3.20435 | silence_duration: 3.2059
...
[silencedetect @ 0000000004970f80] silence_start: 343.84

Y, cortando silencio de principio y fin:

ffmpeg -i INPUT.mp3 -ss 3.20435 -t (343.84-3.20435)

Terminé escribiendo un pequeño programa Java que lo hace. Sugerencias:

  • ffmpeg escribe en stderr. Esto significa que necesita usar ProcessBuilder y redirectErrorStream(true).
  • en segundo lugar, debe extraer la información de silent_start y silent_end.
  • entonces podrías usar las marcas de tiempo para cortar el video

El siguiente código puede ser útil: Uso de Java y FFMPEG con silentdetect para eliminar el silencio de audio

Leí la documentación de eliminación de silencio de FFmpeg y así es como eliminaría el silencio al principio y al final de un archivo de audio (mantiene el silencio en el medio).

ffmpeg -i "INPUT.mp3" -af silenceremove=start_periods=1:stop_periods=1:detection=peak "OUTPUT.mp3"

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *