从wav和aiff文件创建mp3预览

时间:2010-03-30 23:02:48

标签: audio mp3 wav aiff

我想创建一个程序来制作aiff或wav文件的前30秒的mp3。我还希望能够选择位置和长度,例如2:12和2:42之间的音频。是否有任何工具可以让我这样做?

脱壳是可以的。该应用程序将在Linux服务器上运行,因此它必须是一个适用于Linux的工具。

我不介意分两步完成 - 即首先创建aiff / wav剪切的工具,然后将其传递给mp3编码器。

5 个答案:

答案 0 :(得分:3)

带有trim谓词的

SoX可以执行此操作。如果您的sox不是使用MP3支持构建的,那么您必须在之后将输出传输到lame,或找到一个。{/ p>

答案 1 :(得分:2)

我想尽可能使用低级别的内容,因此我最终使用RubyAudiolibsndfile的包装。

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

答案 2 :(得分:1)

LAME用于mp3编码部分。使用shntplit拆分文件。您需要将分割点放在提示文件中,但这很容易。

答案 3 :(得分:1)

在包含* .wav文件的目录中运行此Bash one-liner。

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

前60秒。淡入3秒,淡出3秒。原始的wav文件保持不变。预览文件带有“preview-”前缀。您可以通过更改“trim 0 60”来选择位置和长度以满足您的需求。 需要:sox,lame

如果您有一个包含mp3文件的目录并需要创建预览,请运行以下命令:

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

需要:mpg123,sox,lame

答案 4 :(得分:1)

我写了python library, pydub,这使得这很简单,虽然它使用ffmpeg来进行转换以支持更多格式......

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")