Знаете, стыдно использовать subprocess
для вызова внешних утилит.Например, вы могли бы построить трубы вроде:
#!/usr/bin/env python
import subprocess
frommp3 = subprocess.Popen(['mpg123', '-w', '-', '/tmp/test.mp3'], stdout=subprocess.PIPE)
toogg = subprocess.Popen(['oggenc', '-'], stdin=frommp3.stdout, stdout=subprocess.PIPE)
with open('/tmp/test.ogg', 'wb') as outfile:
while True:
data = toogg.stdout.read(1024 * 100)
if not data:
break
outfile.write(data)
На самом деле, это, вероятно, ваш лучший подход в любом случае.Учтите, что в многопроцессорной системе MP3-декодер и OGG-кодер будут работать в разных процессах и, вероятно, будут запланированы на разных ядрах.Если вы попытаетесь сделать то же самое с однопоточной библиотекой, вы сможете транскодировать только с той скоростью, с которой справится одно ядро.