Crear vistas previas de archivos mp3, wav y aiff
Pregunta
Me gustaría crear un programa que hace mp3 de los primeros 30 segundos de un archivo AIFF o WAV. También me gustaría ser capaz de elegir la ubicación y longitud, como por ejemplo el audio 2:12-dos y cuarenta y dos. ¿Existe alguna herramienta que me permite hacer esto?
desembolsar está bien. La aplicación se ejecutará en un servidor Linux, por lo que tendría que ser una herramienta que funciona en Linux.
no me importa hacerlo en dos pasos - es decir, una herramienta que crea en primer lugar el recorte de la AIFF / WAV, y luego pasarlo a un codificador de mp3
.Solución 2
quería usar algo como el nivel más bajo posible, así que terminé usando RubyAudio
, un contenedor para libsndfile .
require "rubygems"
require "ruby-audio"
EXTRACT_BEGIN = 11.2
EXTRACT_LENGTH = 3.5
RubyAudio::Sound.open("/home/augustl/sandbox/test.aif") do |snd|
info = snd.info
["channels", "format", "frames", "samplerate", "sections", "seekable"].each do |key|
puts "#{key}: #{info.send(key)}"
end
# TODO: should we use a 1000 byte buffer? Does it matter? See RubyAudio::Sound rdocs.
bytes_to_read = (info.samplerate * EXTRACT_LENGTH).to_i
buffer = RubyAudio::Buffer.new("float", bytes_to_read, info.channels)
snd.seek(info.samplerate * EXTRACT_BEGIN)
snd.read(buffer, bytes_to_read)
out = RubyAudio::Sound.open("/home/augustl/sandbox/out.aif", "w", info.clone)
out.write(buffer)
end
Otros consejos
SoX
con el predicado trim
puede hacer esto. Si su sox no se construye con la ayuda MP3, entonces tendrá que canalizar la salida a lame
después, o encontrar uno que sea.
Ejecutar este golpe de una sola línea en un directorio con archivos * .wav.
for wavfile in *.wav; do \
sox "${wavfile}" "preview-${wavfile}" trim 0 60 fade 3 57 3; \
lame --preset standard "preview-${wavfile}" \
"preview-`basename ${wavfile} .wav`".mp3; \
rm "preview-${wavfile}"; \
done
Primeros 60 segundos. 3 segundos fundido de entrada y 3 segundos fundido de salida. archivos WAV originales permanecen intactos. Vista previa de archivos vienen con un prefijo "Vista previa:". Podrás elegir la ubicación y la longitud cambiando "recortar 0 60" para adaptarse a sus necesidades. Se requiere: Medias, cojos
Si usted tiene un directorio con los archivos mp3 y necesidad de crear vistas previas, ejecute lo siguiente:
for mp3file in *.mp3; do \
mpg123 -w "${mp3file}.wav" "${mp3file}"; \
sox "${mp3file}.wav" "preview-${mp3file}.wav" trim 0 60 fade 3 57 3; \
rm "${mp3file}.wav"; \
lame --preset standard "preview-${mp3file}.wav" "preview-${mp3file}"; \
rm -v "preview-${mp3file}.wav"; \
done
Se requiere: mpg123, sox, cojos
Me escribió una biblioteca href="http://pydub.com" pitón, pydub , que hace que este trivial, aunque utiliza ffmpeg para realizar las conversiones con el fin para soportar más formatos ...
from pydub import AudioSegment
sound = AudioSegment.from_file("/input/file.aiff", format="aif")
# 2 min and 12 sec, them convert to milliseconds
start = (2*60 + 12) * 1000
end = start + (30 * 1000)
snip = sound[start:end]
# add 3 second fade in and fade out
snip = snip.fadeIn(3000).fadeOut(3000)
# save as mp3
snip.export("/output/file.mp3", format="mp3")