Frage

Ich möchte ein Programm erstellen, das mp3s der ersten 30 Sekunden einer AIFF oder WAV-Datei macht. Ich möchte auch in der Lage sein mögen Lage und Länge zu wählen, wie die Audio-von 2.12 bis 02.42. Gibt es irgendwelche Werkzeuge, die ich dies tun können?

ist OK Beschuss aus. Die Anwendung wird auf einem Linux-Server ausgeführt werden, so wäre es ein Werkzeug, das funktioniert auf Linux sein muß.

Ich habe nichts dagegen nicht in zwei Schritten tun - das heißt ein Werkzeug, das zunächst den Ausschnitt der AIFF / wav schafft, dann gibt sie an einen MP3-Encoder

.
War es hilfreich?

Lösung 2

Ich wollte etwas so niedriges Niveau wie möglich verwenden, so dass ich am Ende mit RubyAudio , ein Wrapper für 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

Andere Tipps

SoX mit dem trim Prädikat kann dies tun. Wenn Ihr SOx nicht mit MP3-Unterstützung gebaut wird dann leiten Sie weiter zur Rohr haben die Ausgabe lame nach oder einen finden, ist.

Verwenden Sie LAME für den MP3-Encoding-Teil. Verwenden Sie shntplit die Datei zu teilen. Sie müssen Ihre Split-Punkte in einer Cue-Datei setzen, aber das ist einfach.

Führen Sie diesen Bash Einzeiler in einem Verzeichnis mit * .wav-Dateien.

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

Die ersten 60 Sekunden. 3 Sekunden Fade-in und 3 Sekunden Fade-out. Original-WAV-Dateien bleiben unberührt. Vorschaudateien werden mit einem „Preview-“ erfolgen. Sie werden in der Lage Lage und Länge zu wählen, indem „trimmen 0 60“ Ihre Bedürfnisse anzupassen. Benötigt: SOX, lahm

Wenn Sie ein Verzeichnis mit MP3-Dateien und Notwendigkeit, um Vorschauen zu erstellen, führen Sie dies:

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

Benötigt: mpg123, SOX, lahm

Ich schrieb eine Python-Bibliothek, pydub , dass diese trivial macht, obwohl es ffmpeg verwendet in den Konvertierungen zu tun, um mehr Formate zu unterstützen ...

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top