I wi sh для преобразования нескольких сотен тысяч файлов малой длительности (<5 se c) <code>mp3 в wav
файлы. Но процесс в настоящее время занимает несколько дней. Я хотел бы знать, есть ли более быстрый способ, чем то, что я сейчас делаю.
В настоящее время я просто порождаю темы и звоню ffmpeg
через subprocess
модуль в Python. Когда я использую subprocess.Popen()
, я быстро получаю ошибки памяти, потому что запускается слишком много потоков. Использование subprocess.call()
работает без ошибок. Кроме того, я использую threading.Semaphore()
для ограничения максимального количества рабочих потоков.
Код:
import threading
import subprocess
maxthreads = 50
sema = threading.Semaphore(value=maxthreads)
threads = []
def task(mp3_path): # mp3 file path taken from the list of file_ids `mp3_list` below
sema.acquire()
subprocess.call(['ffmpeg', '-y', '-i', mp3_path, '-preset', 'ultrafast', '-ar', '8000', wav_file_path])
# provide file path and destination path
sema.release()
def conv_to_wav_():
for i in mp3_list:
thread = threading.Thread(target=task,args=([i]))
threads.append(thread)
thread.start()
Я работаю на Windows 10 и имею доступный графический процессор Nvidia с поддержкой CUDA а также, если это полезно.