Конвертируйте многофайловые файлы с потоком ffmpeg в Python - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь конвертировать mp3 файлы в m4a. Файлы находятся в разных папках, таких как MainFolder (folder1, folder2, ...)

Это уже работает, но очень медленно, потому что конвертирует файл за файлом.

import os
import sys

path = "/Users/flo/Desktop/test"

for root, dir, files in os.walk(path):
    dir.sort()
    files.sort()

    for file in files:
        if file.find('.mp3') != -1:
            os.system('ffmpeg -i ' +'"' +root +'/' +file +'" ' +'-c:v copy -c:a libfdk_aac -b:a 300k '  +'"' +root +'/' +file[:-4] +'.m4b' +'"')

Теперь я бы хотел бы реализовать многозадачность.

import os
import sys
import threading
import queue

path = "/Users/flo/Desktop/test"
def convert(file):
    if file.find('.mp3') != -1:
        os.system('ffmpeg -i ' +'"' +root +'/' +file +'" ' +'-c:v copy -c:a libfdk_aac -b:a 300k '  +'"' +root +'/' +file[:-4] +'.m4b' +'"')

for root, dir, files in os.walk(path):
    dir.sort()
    files.sort()

    q = queue.Queue
    threads = [threading.Thread(target=convert(file)) for file in files]
    for t in threads:
        t.start()

    for file in files:
        q.put(file)

    for file in files:
        q.put('stop')

    q.join()

    for t in threads:
        t.join()

Но я получил сообщение об ошибке:

File "/var/folders/r6/z5f_jcf139b8fh2n8m4lznlm0000gn/T/atom_script_tempfiles/30127c90-6b13-11ea-af8a-432a34b059ac", line 31
    threads = [threading.Thread(target=convert(file)) for file in files]
    ^
IndentationError: unexpected indent
[Finished in 0.028s]
...