2015-02-24 109 views
1

我是一名python初學者,希望能夠在python腳本上放置一個視頻文件,並在其上運行多個FFMPEG命令,文件名稱作爲輸出文件名稱的變量。我得到了點點滴滴的命令。我希望能夠編輯自己的基本功能腳本。 我目前使用的是Windows批處理,上面寫着:相當於cmd的python「for %% a in(%*)做」

FOR %%a IN (%*) do (
c:\ffmpeg.exe -i "%%~a" "do some stuff" "D:\%%~na\%%~na_360.mp4" 
c:\ffmpeg.exe -i "%%~a" "do some stuff" "D:\%%~na\%%~na_480.mp4" 
) 

我想Python作爲本應該運行的多平臺(贏,蘋果機和Linux)和Python具有FFMPEG管這使得它快。

回答

2

%*對給定程序的參數進行迭代。在Python中,這些在sys.argv中可用,但第一個參數argv[0]是程序本身的名稱;因此我們使用其他參數sys.argv[1:]~n代表文件名,在Python中可以在os.path.basename的幫助下實現;我們也使用subprocess.call來執行程序,因爲它比os.system更安全; r''需要原始字符串,因爲\用於在正常Python字符串中轉義;儘管原始字符串不適用於以\\結尾的字符串 - 我們需要'D:\\'

因此,我們會得到:

import sys 
from subprocess import call 
from os.path import basename, join, splitext 

for a in sys.argv[1:]: 
    base, _ = splitext(basename(a)) 

    # target_prefix is D:\%%~na\%%~na 
    target_prefix = join('d:\\', base, base) 
    args = [r'c:\ffmpeg.exe', '-i', a, 'do', 'some', 'stuff'] 

    call(args + [target_prefix + '_360.mp4']) 
    call(args + [target_prefix + '_480.mp4']) 
+1

你的回答已經教了我很多。雖然腳本在「for a sys.argv [1:]」的右括號中以「SyntaxError:invalid syntax」打開,並立即關閉。 – 2015-02-24 06:21:40

+0

@o_ren我沒有窗戶,所以我沒有打擾測試:D固定 – 2015-02-24 06:23:25

+0

這開始看起來不錯。 FFMPEG開始編碼,但它似乎沒有得到輸出文件和/或路徑參數。在上面的代碼中,名爲somefile.avi的文件應該在d:\ somefile_360.mp4處結束。對? – 2015-02-24 09:03:45