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

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

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

有帮助吗?

解决方案 2

我想用一些低级别越好,这样我结束了使用 RubyAudio ,对于一个包装 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

其他提示

SoXtrim 谓词可以做到这一点。如果您的 sox 没有构建 MP3 支持,那么您必须将输出通过管道传输到 lame 之后,或者找到一个。

使用 LAME 以MP3编码部。使用 shntplit 分割文件。你需要把你的分割点的CUE文件,但这是容易的。

运行此击单行与* .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

首先60秒。 3秒淡入和3秒淡出。原wav文件留不变。预览文件拿出一个“预览 - ”前缀。您可以通过更改“修剪0 60”,以满足您的需求来选择位置和长度。 要求:SOX,跛脚

如果您有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的,袜,跛脚

我写了一个 Python库,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")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top