0

好吧,伙计们看起来我还有另一个问题要问,这与我的上一个问题有关,可以在这里找到:如何使用 Windows PowerShell 启动 ffprobe。在那里,我问如何使用 Windows PowerShell 启动 ffprobe,在尝试了一些东西之后,我得到了它,好吧,可以说,在它再次关闭之前启动了一秒钟。我在 PowerShell 中使用以下命令进行了尝试:

$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"

结果,奇怪的是,xml 文件只包含来自 的标准文本ff-prompt.bat,如下所示:

100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 对于帮助运行:ffmpeg -h 对于格式运行:ffmpeg格式 | 更多编解码器运行:ffmpeg -codecs | 更多 当前目录现在是:“C:\Users\Administrator\bin” bin 目录已添加到 PATH

我的第一个想法是,它根本不工作,但后来我想知道为什么我得到一个 XML 文件,而它根本不工作。PowerShell 可能会执行一秒钟,然后 PowerShell 在不执行我的一半命令的情况ff-prompt.bat下再次关闭。ff-prompt.bat有谁知道为什么 ff-prompt 在执行我的所有命令之前被关闭?

编辑:所以我尝试的是应该直接执行它的东西,但实际上我得到了一大堆错误:

$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

我收到的错误消息:

“ffprobe.exe 无法为选项‘show_streams’设置值‘-select_streams v’:找不到选项”

我现在面临的问题是-show_streams没有得到一个值,所以也许这就是他使用下一个参数作为值的原因,有什么我能做的吗?

4

2 回答 2

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 | 输出文件 $outputFile

我应该意识到 '-select_streams v' 计算 2 个命令行参数,因此将它们包装在一个参数中是行不通的。

我删除了“>”重定向并添加了该| out-file ....子句。

FFPROBE 的主要问题是它将日志信息写入 STDERR 通道。PowerShell 发现这一点并引发 NativeCommandError 异常。

我尝试使用$ErrorActionPreference = 'stop'try...catch构造捕获 NativeCommandError,但在生成 XML 输出之前触发异常。最后,我为 FFPROBE 使用 RTFM 并添加了-loglevel quiet停止 FFPROBE 写入任何日志信息的参数。

注意 - 此代码假定它是从“bin”上方的目录执行的。

于 2014-03-09T03:23:55.160 回答
0

假设 ffmpeg 在 C:\users\Administrator\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
于 2014-03-07T12:48:18.250 回答