1

私のスクリプトを実行する簡単な方法は、ユーザーがフォルダーの場所とファイルタイプを提供し、 glob.glob() が提供されたファイルタイプのファイルを見つけてリストに追加することです。次に、for ループを使用してリストを調べ、各ビデオを変換します。しかし、ffmpeg コマンドを実行しようとすると気に入りません。どんな助けでも素晴らしいでしょう。私は64ビットのffmpegとPython 3.3でWin 7 64ビットも使用しています。エラーは次のとおりです。

OS Error
Traceback (most recent call last):
  File "C:\Python33\lib\subprocess.py", line 1106, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\user\Workspace\PythonConverter\HTMLandPythonConverter\Converter.py", line 77, in <module>
    massConvert(fileNames)
  File "C:\Users\user\Workspace\PythonConverter\HTMLandPythonConverter\Converter.py", line 47, in massConvert
    convertVideotoNewFormat('.mp4', x)
  File "C:\Users\user\Workspace\PythonConverter\HTMLandPythonConverter\Converter.py", line 61, in convertVideotoNewFormat
    myFile = subprocess.Popen(ffmpegString)#, stdout=subprocess.PIPE, stderr=subprocess.PIPE
  File "C:\Python33\lib\subprocess.py", line 820, in __init__
    restore_signals, start_new_session)
  File "C:\Python33\lib\subprocess.py", line 1112, in _execute_child
    raise WindowsError(*e.args)
FileNotFoundError: [WinError 2] The system cannot find the file specified

これが私のコードです:

import subprocess
from subprocess import call
import glob

fileNames = []
fileLocation = {}
filetype = {}
def convertString(location):
    s = list(location)
    for i in range(len(s)):
        if s[i] in '\\':
            s[i] = '/'

    if s[len(s)-1] != '/':
        s.append('/')
    location = "".join(s)
    return location

def convertStringBack(stringTo):
    s = list(stringTo)
    for i in range(len(s)):
        if s[i] in '/':
            s[i] = '\\'
    stringTo = "".join(s)
    return stringTo

def fileTypeTester():
    FieldType = '*' + input('What\'s the file type we are converting from?')
    typeSplit = list(FieldType)
    if typeSplit[1] != '.':
        typeSplit.insert(1,'.')
    FieldType = "".join(typeSplit)
    if FieldType not in ['*.flv','*.kdb']:
        print('Not a valid file type')
    else:
        return FieldType
    return None

def massConvert(listOfFiles):
    print('Starting Conversion')
    for x in listOfFiles:
        #x = convertStringBack(x)
        print('Converting ' + x + ' to .mp4')
        convertVideotoNewFormat('.mp4', x)
    print('Finished File Conversion')


def convertVideotoNewFormat(newFormat, fileLoc):
    newFilePath = fileLoc[0:len(fileLoc)-4]
    ffmpegString = ["ffmpeg64","-i", fileLoc,"-qscale","0","-ar","22050","-vcodec","libx264",newFilePath,newFormat]
    try:
        subprocess.check_call(newFilePath)
    except OSError:
        print('OS Error')
    except subprocess.CalledProcessError:
        print('Subprocess Error')
    myFile = subprocess.Popen(ffmpegString)
    print(myFile)

#This will replace old HTML flv object tag with new video tag, but it is yet to be implemented
def replaceHTML():
    pass

fileLocation = input('What is the path of the files you\'d like to convert?')
fileLocation = convertString(fileLocation)
fileType = fileTypeTester()
fileNames = glob.glob(fileLocation + fileType)
massConvert(fileNames)

私は見回しましたが、チュートリアルのほとんどは2.7で、コードは3.3で、3.3にffmpegを使用するチュートリアルが見つかりません。私のffmpegは、PATHで「ffmpeg64」に設定されています。

ありがとう!

4

1 に答える 1