Создавайте предварительные просмотры mp3 из файлов wav и aiff

StackOverflow https://stackoverflow.com/questions/2549304

  •  23-09-2019
  •  | 
  •  

Вопрос

Я хотел бы создать программу, которая создает 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 после, или найдите тот, который есть.

Использование ХРОМОЙ для части кодирования mp3.Использование шнтплит чтобы разделить файл.Вам нужно будет поместить свои точки разделения в файл cue, но это несложно.

Запустите этот однострочный файл Bash в каталоге с файлами *.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-файлы остаются нетронутыми.Файлы предварительного просмотра поставляются с префиксом "preview-".Вы сможете выбрать местоположение и длину, изменив "обрезать 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, 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