Domanda

Vorrei creare un programma che rende mp3 dei primi 30 secondi di un file AIFF o WAV. Vorrei anche essere in grado di scegliere un altro luogo e la durata, come ad esempio l'audio 2:12-02:42. Ci sono tutti gli attrezzi che mi permette di fare questo?

Sborsare è OK. L'applicazione verrà eseguita su un server Linux, quindi sarebbe dovuto essere uno strumento che funziona su Linux.

Non mi dispiace farlo in due fasi - vale a dire uno strumento che prima crea il ritaglio del AIFF / WAV, poi passarlo a un encoder mp3

.
È stato utile?

Soluzione 2

ho voluto usare qualcosa di livello più basso possibile, così ho finito per usare RubyAudio , un wrapper per 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

Altri suggerimenti

SoX con la trim predicato può fare questo. Se il sox non è costruito con il supporto MP3, allora si dovrà inviare l'output a lame dopo, o trovare uno che è.

LAME per la parte di codifica mp3. Utilizzare shntplit dividere il file. Avrete bisogno di mettere i punti di divisione in un file cue, ma che è facile.

Esegui questo Bash one-liner in una directory con i file * .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

primi 60 secondi. 3 secondi fade-in e 3 secondi fade-out. file wav originali rimangono intatte. File di anteprima sono dotati di un prefisso "Anteprima-". Sarete in grado di scegliere la posizione e la lunghezza cambiando "trim 0 60" alle proprie esigenze. Richiede: sox, lame

Se si dispone di una directory con file mp3 e la necessità di creare anteprime, eseguire questo:

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

Richiede: mpg123, sox, zoppo

scroll top