4 votes

Créer des aperçus mp3 à partir de fichiers wav et aiff

Je voudrais créer un programme qui fasse des mp3 des 30 premières secondes d'un fichier aiff ou wav. J'aimerais également pouvoir choisir l'emplacement et la durée, par exemple l'audio entre 2:12 et 2:42. Existe-t-il des outils qui me permettent de faire cela ?

Dépenser sans compter, c'est bien. L'application fonctionnera sur un serveur linux, il faudrait donc que l'outil fonctionne sous linux.

Cela ne me dérange pas de le faire en deux étapes - c'est-à-dire un outil qui crée d'abord le découpage de l'aiff/wav, puis le passe à un encodeur mp3.

3voto

SoX avec le trim peut le faire. Si votre sox n'est pas construit avec le support MP3, alors vous devrez envoyer la sortie à lame après, ou en trouver un qui l'est.

2voto

August Lilleaas Points 25812

Je voulais utiliser quelque chose d'aussi bas niveau que possible, donc j'ai 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

1voto

Byron Whitlock Points 29863

Utilice LAME pour la partie encodage mp3. Utilisez shntplit pour diviser le fichier. Vous devrez placer vos points de séparation dans un fichier cue, mais c'est facile.

1voto

Thomas Szteliga Points 136

Exécutez cette ligne unique de Bash dans un répertoire contenant des 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. Fondu en entrée de 3 secondes et fondu en sortie de 3 secondes. Les fichiers wav originaux restent inchangés. Les fichiers de prévisualisation sont accompagnés d'un préfixe "preview-". Vous pourrez choisir l'emplacement et la durée en modifiant "trim 0 60" pour répondre à vos besoins. Nécessite : sox, lame

Si vous avez un répertoire avec des fichiers mp3 et que vous avez besoin de 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

Requiert : mpg123, sox, boiteux

1voto

Jiaaro Points 14379

J'ai écrit un bibliothèque python, pydub qui rend la chose triviale, bien qu'il utilise ffmpeg pour faire les conversions afin de supporter plus de 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")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X