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

.
¿Fue útil?

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.

LAME para la parte de codificación mp3. Uso shntplit para dividir el archivo. Tendrá que poner sus puntos de división en un archivo de referencia, pero que es fácil.

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")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top