Créer des aperçus mp3 à partir de fichiers WAV et AIFF
Question
Je voudrais créer un programme qui fait mp3s des 30 premières secondes d'un fichier AIFF ou WAV. Je voudrais aussi pouvoir choisir l'emplacement et la longueur, comme l'audio 2:12-2:42. Y a-t-il des outils qui me permet de le faire?
est OK Bombardements sur. L'application fonctionne sur un serveur linux, il devrait être un outil qui fonctionne sur Linux.
Je ne me dérange pas de faire en deux étapes - à savoir un outil qui crée d'abord la découpe du AIFF / wav, puis passer à un encodeur mp3
.La solution 2
Je voulais utiliser quelque chose d'aussi bas niveau possible, donc je fini par utiliser RubyAudio
, une enveloppe pour 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
Autres conseils
SoX
avec le prédicat trim
peut le faire. Si votre sox ne se construit pas avec le support MP3, vous devrez redirigez la sortie lame
après, ou de trouver celui qui est.
Utilisez pour la BOITEUX partie de l'encodage mp3. Utilisez shntplit pour diviser le fichier. Vous aurez besoin de mettre vos points de division dans un fichier cue, mais qui est facile.
Exécuter ce Bash one-liner dans un répertoire avec les fichiers * .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
Les 60 premières secondes. 3 secondes fade-in et 3 secondes fade-out. Les fichiers originaux wav restent intacts. Les fichiers de prévisualisation sont livrés avec un préfixe « Preview- ». Vous serez en mesure de choisir l'emplacement et la longueur en changeant « trim 0 60 » pour répondre à vos besoins. Nécessite: sox, boiteux
Si vous avez un répertoire avec les fichiers mp3 et que vous devez créer des aperçus, exécutez ceci:
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
Nécessite: mpg123, sox, boiteux
J'ai écrit une bibliothèque Python , pydub , qui fait de ce trivial, bien qu'il utilise ffmpeg pour faire les conversions pour pour supporter d'autres formats ...
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")