【问题标题】:Create mp3 previews from wav and aiff files从 wav 和 aiff 文件创建 mp3 预览
【发布时间】:2010-03-30 23:02:47
【问题描述】:

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

脱壳没问题。该应用程序将在 linux 服务器上运行,因此它必须是适用于 linux 的工具。

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

【问题讨论】:

    标签: audio mp3 wav aiff


    【解决方案1】:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在包含 *.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,la脚

          如果您有一个包含 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

          【讨论】:

            【解决方案5】:

            我写了一个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")
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-19
              • 1970-01-01
              • 2020-06-14
              相关资源
              最近更新 更多