2010-03-30 8 views
4

aiff 또는 wav 파일의 처음 30 초 동안 mp3를 만드는 프로그램을 만들고 싶습니다. 2:12에서 2:42 사이의 오디오와 같이 위치와 길이를 선택할 수 있기를 바랍니다. 이 작업을 수행 할 수있는 도구가 있습니까?wav 및 aiff 파일에서 mp3 미리보기 만들기

셀링 아웃은 괜찮습니다. 응용 프로그램은 Linux 서버에서 실행되므로 Linux에서 작동하는 도구 여야합니다.

두 단계, 즉 aiff/wav의 컷 아웃을 먼저 만든 다음 mp3 인코더로 전달하는 데 신경 쓰지 않아도됩니다.

답변

2

최대한 낮은 레벨을 사용하고 싶었 기 때문에 libsndfile의 래퍼 인 RubyAudio을 사용했습니다.

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

SoXtrim 조건자는이 작업을 수행 할 수 있습니다. sox가 MP3 지원으로 구축되지 않은 경우 출력을 lame으로 파이프해야합니다. 그렇지 않으면 찾으십시오.

+0

+1 Sox ... ooooo shiny –

1

mp3 인코딩 부분에 LAME을 사용하십시오. shntplit을 사용하여 파일을 분할하십시오. 스플릿 포인트를 큐 파일에 넣어 두어야하지만 쉽습니다.

1

* .wav 파일이있는 디렉토리에서이 Bash 한면을 실행하십시오.

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 파일은 그대로 유지됩니다. 미리보기 파일에는 "미리보기"접두어가 붙습니다. 귀하의 필요에 맞게 "trim 0 60"을 변경하여 위치와 길이를 선택할 수 있습니다. 이 필요합니다 : 삭스,

절름발이 당신은 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 library, pydub을 썼다

1

절름발이, 이 형식은 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") 
관련 문제