2014-03-07 45 views
0

好吧,看起來我還有一個問題要問,這與我最後一個問題有關,可以在這裏找到:How to start ffprobe with Windows PowerShell。在那裏,我問了如何使用Windows PowerShell啓動ffprobe,並在嘗試了一些我已經獲得它的東西之後,可以說,在再次關閉之前開始了一秒。 我試了一下,在PowerShell中下面的命令:爲什麼PowerShell在執行我的命令之前關閉ff-prompt.bat

$env:Path = ';C:\Users\Administrator\bin\' 
$title = "A_Day_for_Cake_and_Accidents" 
Start-Process ff-prompt.bat -ArgumentList "ffprobe -show_streams -select_streams v -print_format xml -count_frames C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.mov > C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\totalframes.xml" 

的結果,這是很奇怪的,是隻能從ff-prompt.bat標準文本的xml文件,它看起來像這樣:

C:\ Users \ Administrator> ECHO OFF ffmpeg版本N-60959-g669043d 2014年2月27日22:01:58使用gcc 4.8.2(GCC) 配置:--enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable -libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab - -enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid - 使能的zlib libavutil 52. 66.100/52 66.100 libavcodec的55 52.102/52.102 55. 了libavformat 55. 33.100/33.100 55. libavdevice 55. 10.100/10.100 55. libavfilter 4. 2.100/2.100 4 libswscale 2.101/2. 5.101 libswresamp le 0. 18.100/0.18.100 libpostproc 52. 3.100/52. 3.100 幫助運行:ffmpeg -h 對於運行格式:ffmpeg -formats |更多 對於編解碼器運行:ffmpeg -codecs |現在越來越 當前目錄是:「C:\用戶\管理\ BIN」 bin目錄已被添加到PATH

我首先想到的是,它並沒有在所有的工作,但後來我想知道爲什麼當它不工作時我得到一個XML文件。在PowerShell關閉ff-prompt.bat而未執行一半命令之前,PowerShell可能會執行ff-prompt.bat一秒鐘。有人知道爲什麼在執行我所有的命令之前ff-prompt被關閉了嗎?

編輯:那麼,我想是應該直接執行它,但事實上,我得到錯誤的shitload:

$title = "A_Day_for_Cake_and_Accidents" 
$Cmd = ‘C:\Users\Administrator\ffmpeg\bin\ffprobe.exe’ 
$Arg1 = ’ffprobe ' 
$Arg2 = ‘-show_streams ’ 
$Arg3 = ‘-select_streams v ' 
$Arg4 = ‘-print_format xml ' 
$Arg5 = ‘-count_frames ' 
$Arg6 = "C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.mov >" 
$Arg7 = " C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\totalframes.xml" 
& $Cmd $Arg1 $Arg2 $Arg3 $Arg4 $Arg5 $Arg6 $Arg7 

錯誤消息(S)我得到:

「ffprobe。 EXE 無法設置值「-select_streams v」選項「show_streams」:選項找不到」

我現在面臨的問題是,-show_streams沒有得到一個值,所以也許這就是爲什麼他使用的下一個參數爲價值,有什麼我可以做的嗎?

+0

爲什麼你使用bat文件呢?你會發現直接從powershell調用ffprobe要容易得多。並且指定.exe的完整路徑而不是即時修改PATH也會更容易。 – arco444

+0

@ arco444這聽起來很不錯,但我該怎麼做?我必須安裝一些軟件還是需要其他命令?問題是我有一堆電影,我必須從XML文件中提取總幀數,我認爲這會更容易,如果我可以自動做到這一點,沒有太多的努力,這就是爲什麼我使用這個參數'$ title'爲我所有的視頻。 – sebastian

+0

您需要了解的有關在此處啓動外部命令的所有信息:http://edgylogic.com/blog/powershell-and-external-commands-done-right/ – andyb

回答

1

以下爲我工作:

 
$title = "A_Day_for_Cake_and_Accidents" 
$inputFile = "C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.mov" 
$outputFile = "C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\totalframes.xml" 

&.\bin\ffprobe.exe -show_streams -select_streams v -print_format xml -count_frames -loglevel quiet $inputFile | out-file $outputFile 

我應該已經意識到, '-select_streams V' 計數2命令行參數,所以將它們包裝在一個參數中將不起作用。

我刪除了'>'重定向並添加了| out-file ....子句。

FFPROBE的主要問題是它將記錄信息寫入STDERR通道。 PowerShell發現這個並引發一個NativeCommandError異常。

我嘗試捕獲NativeCommandError,使用$ErrorActionPreference = 'stop'try...catch構造,但異常在生成XML輸出之前觸發。最後,我爲FFPROBE提供了RTFM,並添加了-loglevel quiet參數,它可以停止FFPROBE寫入任何日誌信息。

注意 - 這段代碼假設它是從'bin'上面的目錄執行的。

+0

感謝您花時間幫助我,但我自己嘗試過,並收到錯誤消息「&:Die Benennung」。\ bin \ ffprobe.exe「wurde nicht als名稱eines Cmdlet在Zeile中:5 Zeichen:2 +&。\ bin \ ffprobe.exe -show_streams -select_streams v -print_format xml -count_fram ...」告訴我PowerShell無法識別'。\ bin \ ffprobe.exe'作爲命令。我的「ffprobe路徑」仍然是相同的「C:\ Users \ Administrator \ ffmpeg \ bin \ ffprobe.exe」。 – sebastian

+0

好吧我不知道該如何謝謝你,我已經使用了'ffprobe.exe'的完整路徑,並最終做到了這一點。你先生,給你自己的答案,做得很好,完全是當之無愧的。 – sebastian

0

假設的ffmpeg是在C:\用戶\管理\ ffmpeg的:

$title = "A_Day_for_Cake_and_Accidents" 
& C:\users\Administrator\ffmpeg\bin\ffprobe -show_streams -select_streams v -print_format xml -count_frames C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.mov > C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\totalframes.xml 
+0

這是否也適用於PowerShell v.1?或者我需要更新我的PowerShell?因爲我按照自己的方式嘗試了它,但是收到一條錯誤消息,說PowerShell不知道這個命令。 – sebastian

+0

確切的錯誤是什麼?是否存在'C:\ users \ Administrator \ ffmpeg \ bin \ ffprobe.exe'?如果沒有,您可能需要更改程序的路徑。我只是猜測它是基於你的另一個問題。 – arco444

+0

我已經與你的命令工作了一下(看我編輯下的第一篇文章)看起來像它可以工作,如果我得到這個錯誤清除。 – sebastian

相關問題