3

私はこれで何時間も頭を悩ませてきました。

HandbrakeCLI を使用して .AVI 形式の古いビデオを .mp4 に変換する簡単なスクリプトを作成しようとしていますが、Handbrake に正しい引数を登録させることができません。「Missing output file name.Run C:/Program Files /Handbrake/HandbrakeCLI.exe --help for syntax.\r\n" エラー。

ここに私がこれまでに持っているものがあります

import glob
import os

import handbrake

hb = handbrake.HandbrakeEncode
mydir = "C:\\Path\\To\\MyVids\\"
os.chdir(mydir)

filesList = []

for files in glob.glob("*.avi"):
    filesList.append(mydir + files)
    print(mydir + files) 
    #this prints the correctly assembled path and file as expected

for files in filesList:
    print("Encoding file: " + files)
    hb(files)

hb 関数は次のとおりです。

def HandbrakeEncode(filepath):
    import subprocess
    import os
    from subprocess import Popen, PIPE
    outputPath, fileExtension = os.path.splitext(filepath)
    outputPath += ".mp4"

    args = '-i ' + filepath + ' -o '+ outputPath


    cmd = ['C:\\Program Files\\Handbrake\\HandbrakeCLI.exe', args]


    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = p.communicate()
    print(stdout)

あなたが提供できる助けをありがとう...

4

1 に答える 1

6

subprocess.Popenコマンドがエスケープ可能なチャンクに分割されることを期待しています:

['foo', '-a', 'bar', '--baz']

コマンドは引数のリストである必要があります。

cmd = [
    'C:\\Program Files\\Handbrake\\HandbrakeCLI.exe',
    '-i', filepath,
    '-o', outputPath
]
于 2013-10-27T20:20:39.647 に答える