Herramienta para acelerar / convertir un archivo de audio a granel

6

Quiero escuchar ciertos podcasts en mi teléfono, pero tengo dos problemas comunes:

  1. El audio está en algún formato extraño (algunos no se reproducen en mi teléfono).
  2. El audio es lento.

Quiero usar algo como sox o avconv para convertir masivamente los archivos. Ya que esto es solo la voz y el teléfono celular, los archivos pequeños de baja calidad serían lo mejor para mí. Tuve un buen éxito usando avconv:

avconv -i weird.wma normal.ogg

Desafortunadamente, este comando crea un enorme archivo ogg y no puedo reproducirlo más rápido. Lo ideal es que este archivo en particular se reproduzca a un 170% de la velocidad original.

User1
fuente
Tu jugador no puede jugar wma archivos pero puede reproducir ogg?
Scott Chamberlain

Respuestas:

9

Convertir con FFmpeg

FFmpeg tiene un filtro de audio incorporado para cambiar el tempo sin cambiar el tono. Necesitamos codificar el archivo a algún formato que su teléfono reproduzca. Esto depende del teléfono por supuesto. Muchos teléfonos inteligentes modernos como el audio AAC:

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100 final.m4a

Aquí, puedes cambiar la calidad con la -q:a Opción, donde el valor es en porcentaje y mayor significa mejor.

O bien, audio MP3 con una calidad (promedio) de 4, donde menos significa mejor (0 que resulta en aproximadamente 245 kBit / s):

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libmp3lame -q:a 4 final.mp3

Si su teléfono no admite ninguno de estos, tendremos que seguir investigando. Ah, y yo uso ffmpeg sinónimo de avconv aquí. No son exactamente iguales, pero para los casos anteriores puede usar cualquiera de las dos herramientas. Si su versión de FFmpeg o avconv no incluye FAAC o LAME, vaya a obtener una compilación estática de Linux desde la página de descarga de FFmpeg .


Si no te gustan los filtros FFmpeg, aquí hay otro enfoque:

Extraer audio crudo

En primer lugar, debe extraer la secuencia de audio sin formato en un formato sin comprimir, por ejemplo. Audio estéreo PCM de 16 bits en un contenedor WAV.

ffmpeg -i weird.wma temp.wav

Ahora podemos usar el archivo. temp.wav Para acortar el audio. Tenemos algunas opciones para eso:

Opción 1: SoX

SoX ofrece algunos filtros diferentes que le permiten cambiar la velocidad, el tono o el tempo. Simplemente cambiando la velocidad aumentará el tono para compensar la longitud, por lo que esto puede sonar poco natural.

los tempo el filtro utiliza un algoritmo avanzado para acortar los archivos, pero mantiene el tono, dividiéndolo en ventanas de tiempo más pequeñas y luego "fusionándolas", acelerando así el tempo. Por ejemplo:

sox temp.wav output.wav -tempo 1.7

Esto puede sonar un poco raro. Si lo hace, recurra a la opción 2.

Opción 2: Estiramiento de sonido extremo de Paul

Este programa promete ofrecer una mejor calidad que SoX, y hay una versión de línea de comandos escrita en Python disponible en GitHub . Un comando podría tener este aspecto: tenga en cuenta que, por defecto, estira el archivo, para acortarlo, calculamos el inverso de 1.7, que es 0.59:

python paulstretch_stereo.py -s 0.59 temp.wav output.wav

Convertir audio en bruto en un archivo comprimido

Ahora tenemos un archivo WAV acortado, pero aún no está comprimido, por lo que necesitamos comprimirlo nuevamente. Consulte las opciones en la parte superior de esta publicación para varios formatos.

ffmpeg -i output.wav -c:a …

Los métodos no ffmpeg descritos anteriormente perderán sus metadatos; puede agregarlo de nuevo al convertir output.wav a un formato comprimido así:

ffmpeg -i output.wav -i weird.wma -map 0 -map_metadata 1 -c:a ...
slhck
fuente
Me gusta la opción uno, pero ¿no perderé la metainformación del archivo cuando me convierto a un WAV? ¿No tiene ffmpeg un equivalente? -tempo ¿cambiar?
User1
Perderías todos los metadatos, sí. Actualicé mi respuesta con un enfoque FFmpeg nativo que debería, en teoría, mantener sus metadatos.
slhck