Пакет pydub, который вы используете в worker()
, уже довольно эффективен, поскольку он поддерживается низкоуровневой медиа-библиотекой, которая не написана на Python: FFmpeg.То есть из-под капота pydub вызывает команду ffmpeg
, используя модуль subprocess
(см. код pydub ) для выполнения преобразования, в результате чего получается команда, которая выглядит следующим образом:
ffmpeg -y -f wav -i input.wav -write_xing 0 -f flac output.flac
К сожалению, реализация кодера FLAC в FFmpeg не кажется распараллеленной, и поэтому невозможно улучшить скорость кодирования каждого независимого файла, сохраняя при этом то же качество кодирования, с этим конкретным кодером.Предполагая, что вы хотите продолжать использовать pydub и его кодировщик FFmpeg FLAC, ваш подход к проблеме, заключающийся в обработке каждого файла в отдельном процессе, звучит разумно.
Однако, если вы действительно хотите повысить производительность любой ценой,альтернативным вариантом будет обмен качества звука на скорость конвертации.Для этого вы можете настроить некоторые параметры кодирования, например, уменьшить частоту дискретизации:
# export the song with a lower sampling frequency
low_quality_song = song.set_frame_rate(11025)
low_quality_song.export(flac_filename, format="flac")
При этом, учитывая, что вы ориентируетесь на формат без потерь, переключитесь на более эффективный (потенциально GPU-основанный на) кодер, скорее всего, даст гораздо лучшие результаты при сохранении того же качества звука