【问题标题】:Why does PowerShell closes ff-prompt.bat before executing my commands为什么PowerShell在执行我的命令之前关闭ff-prompt.bat
【发布时间】:2014-04-10 13:24:57
【问题描述】:

好吧,伙计们,看来我还有一个问题要问,这与我的上一个问题有关,可以在这里找到:How to start ffprobe with Windows PowerShell。在那里,我问如何使用 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 的标准文本,如下所示:

C:\Users\Administrator>ECHO 关闭 ffmpeg 版本 N-60959-g669043d 使用 gcc 4.8.2 (GCC) 于 2014 年 2 月 27 日 22:01:58 构建 配置: --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 --enable-zlib libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libav 设备 55. 10.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 -formats |更多的 对于编解码器运行:ffmpeg -codecs |更多的 当前目录现在是:“C:\Users\Administrator\bin” bin 目录已添加到 PATH

我的第一个想法是,它根本不工作,但后来我想知道为什么我得到一个 XML 文件,而它根本不工作。 PowerShell 执行ff-prompt.bat 可能一秒钟,然后PowerShell 再次关闭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没有得到值,所以可能这就是他使用next参数作为值的原因,有什么办法吗?

【问题讨论】:

  • 你为什么要使用 bat 文件?您会发现直接从 powershell 调用 ffprobe 要容易得多。而且指定 .exe 的完整路径也比动态修改 PATH 更容易。
  • @arco444 这听起来很简单,但我该怎么做呢?我必须安装一些软件还是需要其他命令?问题是我有一堆电影,我必须从 XML 文件中提取总帧数,我认为如果我可以不费力气地自动执行此操作会更容易,这就是我使用此参数 $title 的原因我所有的视频。
  • 这里关于启动外部命令需要了解的一切:edgylogic.com/blog/powershell-and-external-commands-done-right
  • @andyb 感谢您提供此链接,我会阅读它,如果有帮助,我会回复您。
  • @sebastian - 我已经发布了你的第一个 ff-prompt.bat 问题的答案。

标签: windows powershell ffmpeg ffprobe


【解决方案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' 上方的目录执行的。

【讨论】:

  • 感谢您抽出宝贵时间帮助我,但我自己尝试过,但收到错误消息“& : Die Benennung”。\bin\ffprobe.exe" wurde nicht als Name eines Cmdlet In 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
  • 好吧,我不知道该怎么感谢你,我已经使用了ffprobe.exe 的完整路径,最后成功了。先生,您自己得到了答案,做得很好,完全应得的。
【解决方案2】:

假设 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

【讨论】:

  • 这是否也适用于 PowerShell v.1?还是我需要更新我的 PowerShell?因为我已经按照你的方式尝试过了,但是收到一条错误消息,说 PowerShell 不知道这个命令。
  • 确切的错误是什么? C:\users\Administrator\ffmpeg\bin\ffprobe.exe 存在吗?如果没有,您可能需要更改程序的路径。我只是根据您的其他问题猜测它在那里。
  • 我已经对您的命令进行了一些处理(请参阅我在 EDIT 下的第一篇文章),如果我清除此错误,它可能会起作用。
  • 是的,您现在走在正确的轨道上。您或许可以使用C:\Users\Administrator\ffmpeg\bin\ffprobe.exe -help 来准确找出您需要的选项。
  • 我需要我在这里列出的所有选项,问题是,那个该死的东西认为我想使用命令-select_streams v 来代替show_streams。我之前在 ff-prompt 上尝试过所有命令,效果很好,这就是为什么我不知道他为什么认为一个命令是另一个命令的参数。
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 2019-10-05
  • 2016-10-18
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多