#python #ffmpeg #wave #pydub
#python #ffmpeg #волна #pydub
Вопрос:
Я просматриваю большой файл wave с помощью словаря новых имен файлов, длин и версий. Цикл экспортирует отдельные фрагменты в виде файлов:
mix.export(key, format='wav')
Однако он преобразует исходный 24-разрядный файл в 32-разрядные фрагменты. Я обошел pro tools, чтобы вернуть файлы обратно в 24, поскольку я не могу определить ни настройки ffmpeg, ни передачу фрагмента в подпроцесс.
Я попробовал несколько вариантов этой темы:
mix.export(key, format='wav', codec='pcm_s24le')
А также этот:
mix.export(k, format='wav', parameters=['ffmpeg', '-i', '-acodec', 'pcm_s24le', '-ar', '48000'])
Кажется, я не могу заставить отдельные фрагменты работать в следующем вызове подпроцесса. key
это имя файла из пары ключ-значение. Это хорошо работает при 32-разрядном экспорте, но не уверен, как заставить его работать, когда требуется вызвать временный файл фрагмента, такой /var/folders/vc/q7jggn7900l099w45463lgx40000gn/T/tmpw_6mxyg8
как.
subprocess.call(['ffmpeg', '-i', key,
'-acodec', 'pcm_s24le', '-ar', '48000', 'output.wav'])
Надеемся на фрагменты точно такого же формата, что и исходный ввод:
mix_file = AudioSegment.from_wav(file_name)
Комментарии:
1. временный файл среза -> что это такое и как он генерируется?
2. Привет @Gyan — Использование функции slice audio в pydub. Например: фрагмент через десять секунд после пятисекундного промежутка
next_10_seconds = song[15000:25000]
3. Эта особенность связана с тем, что модуль stdlib
audioop
python не поддерживает 24-разрядный звук (до недавнего времени) — pydub преобразует 24-разрядные входные файлы в 32-разрядные, чтобы воспользоваться преимуществами функций stdlib audio4. Спасибо, я посмотрю в audioop. Я добавил подпроцесс, в котором я конвертирую папку файлов в новый набор из 24-битных файлов. Технически это медленнее, но отлично подходит для моего проекта.