#python #audio #wav #pydub
#python #Аудио #wav #pydub
Вопрос:
У меня есть папка, в которой у меня около 2000 аудиофайлов в формате wav с разными временными интервалами, скажем, некоторые из них через 30 секунд, некоторые через 40, и я хочу разделить их все с помощью python, я пробовал pydub и разные библиотеки, и все они работают только для 1 файла, я хочу разделить их с помощьюцикл с простым кодом на python.
Пример кода:
from pydub import AudioSegment
from pydub.utils import make_chunks
myaudio = AudioSegment.from_file("a0007.wav", "wav")
chunk_length_ms = 8000 # pydub calculates in millisec
chunks = make_chunks(myaudio,chunk_length_ms) #Make chunks of one sec
for i, chunk in enumerate(chunks):
chunk_name = "{0}.wav".format(i)
print ("exporting", chunk_name)
chunk.export(chunk_name, format="wav")
Приведенный выше код работает для одного файла, тогда как мне нужно, чтобы он извлекал файлы из папки и разделял их все
Комментарии:
1. Можете ли вы поделиться своей структурой папок и кодом, который вы пробовали?
2. из pydub импортируйте АудиоСегмент из pydub.утилиты импортируйте make_chunks myaudio = AudioSegment.from_file(«a0007.wav», «wav») chunk_length_ms = 8000 # pydub вычисляет в миллисекундах фрагменты = make_chunks(myaudio,chunk_length_ms) #Сделайте фрагменты по одной секунде для i, фрагмент в enumerate(фрагменты ): chunk_name =»{0}.wav».format(i) print («экспорт», имя_записи) chunk.export(имя_записи, формат =»wav») Приведенный выше код работает для одного файла, тогда как мне нужно, чтобы он извлекал файлы из папки и разделял их все
3. Пожалуйста, измените свой вопрос, чтобы добавить код. Это не читается в комментарии.
4. @Epsi95 это сделано
Ответ №1:
Вы должны получить все имена файлов в вашем каталоге, а затем выполнить итерацию для всех имен файлов.
Вы можете использовать os
module для получения списка всех файлов в текущем каталоге.
from pydub import AudioSegment
from pydub.utils import make_chunks
import os
def process_sudio(file_name):
myaudio = AudioSegment.from_file(file_name, "wav")
chunk_length_ms = 8000 # pydub calculates in millisec
chunks = make_chunks(myaudio,chunk_length_ms) #Make chunks of one sec
for i, chunk in enumerate(chunks):
chunk_name = './chunked/' file_name "_{0}.wav".format(i)
print ("exporting", chunk_name)
chunk.export(chunk_name, format="wav")
all_file_names = os.listdir()
try:
os.makedirs('chunked') # creating a folder named chunked
except:
pass
for each_file in all_file_names:
if ('.wav' in each_file):
process_sudio(each_file)
Комментарии:
1. Ну, это только разделение первого файла и ошибка во 2-м файле, а не получение каких-либо других файлов. Выдает следующую ошибку FileNotFoundError: [Ошибка № 2] Нет такого файла или каталога: ‘a0002.wav’
2. есть ли у вас скрипт python в папке, в которой находится весь ваш аудиофайл? Есть ли в этой папке этот файл
a0002.wav
.3. Я изменил код, фрагментированный файл будет сохранен в другой папке с именем chunked.
4. Скрипт находится в той же папке и содержит все файлы, однако он собирает только первый файл
5. Можете ли вы проверить сейчас, я запустил свой компьютер, и он работает нормально.