قم بإنشاء معاينات MP3 من ملفات WAV و AIFF
سؤال
أرغب في إنشاء برنامج يجعل MP3 من أول 30 ثانية من ملف AIFF أو WAV. أود أيضًا أن أكون قادرًا على اختيار الموقع والطول ، مثل الصوت بين 2:12 و 2:42. هل هناك أي أدوات تتيح لي القيام بذلك؟
القصف على ما يرام. سيتم تشغيل التطبيق على خادم 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
نصائح أخرى
SoX
مع ال trim
المسند يمكن أن يفعل هذا. إذا لم يتم تصميم Sox الخاص بك بدعم MP3 ، فسيتعين عليك تنشيط الإخراج lame
بعد ، أو ابحث عن واحد.
قم بتشغيل هذا الخطية الواحدة في دليل مع ملفات *.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 الأصلية دون مساس. تأتي ملفات المعاينة مع بادئة "معاينة-". ستتمكن من اختيار الموقع والطول عن طريق تغيير "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 ، sox ، عرجاء
كتبت أ مكتبة بيثون ، 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")