将参数传递给Powershells调用操作符-I can';我不能让它工作

将参数传递给Powershells调用操作符-I can';我不能让它工作,powershell,ffmpeg,Powershell,Ffmpeg,出于某种原因,我甚至无法让最简单的Ffmpeg案例工作: $pathToFfmpeg = "PathToFfmpeg\ffmpeg.exe" $video = "PathToVideoFile\video.mp4" $param = "--i $video", "output.avi" $execute = &$pathToFfmpeg $param 根据Ffmpeg网站:Ffmpeg-i input.mp4 output.avi,这将产生最基本的Ffmpeg用法。 然而,我得到的只是

出于某种原因,我甚至无法让最简单的Ffmpeg案例工作:

$pathToFfmpeg = "PathToFfmpeg\ffmpeg.exe"
$video = "PathToVideoFile\video.mp4"
$param = "--i $video", "output.avi"
$execute = &$pathToFfmpeg $param
根据Ffmpeg网站:
Ffmpeg-i input.mp4 output.avi
,这将产生最基本的Ffmpeg用法。 然而,我得到的只是:

ffmpeg.exe : ffmpeg version git-2020-01-01-7b58702 Copyright (c) 2000-2020 the FFmpeg developers
At line:4 char:12
+ [string[]] $execute = &$pathToFfmpeg $param
+                          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (ffmpeg version ...mpeg developers:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

  built with gcc 9.2.1 (GCC) 20191125
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass 
--enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb 
--enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame 
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma 
--enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex 
--enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec 
--enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 38.100 / 56. 38.100
  libavcodec     58. 65.100 / 58. 65.100
  libavformat    58. 35.101 / 58. 35.101
  libavdevice    58.  9.102 / 58.  9.102
  libavfilter     7. 70.101 /  7. 70.101
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Unrecognized option '-i PathToVideoFile\video.mp4'.
Error splitting the argument list: Option not found

看来我做错了什么。有人知道我是怎么做到的吗?我尝试了不同的方法来创建params数组,并使用EchoArgs.exe进行了检查,但没有效果。我没有主意了。Ffmpeg似乎无法识别Powershell传递给它的内容。

令人遗憾的是,呼叫接线员的文档记录不足。如果所有参数都是一个数组的元素,并用逗号分隔,那么这对我来说是有效的

$param = '-l','dns.ps1'
$prog = '/bin/ls'
& $prog $param

-rw-r--r--  1 jsz  staff  173 Dec 30 10:06 dns.ps1
但这似乎是一种艰难的做事方式。或者,如果没有空格,则指定完整路径(甚至可以反引号引空格),或者首先添加到路径。在Windows中,使用分号而不是冒号

/bin/ls -l dns.ps1

$env:PATH += ':/bin'
ls -l dns.ps1

我相信问题已经解决了。Ffmpeg似乎对接收参数的方式和顺序有点挑剔。 我想感谢@IvBaranov和他的答案,他给出了一个想法,可以自己添加参数的每个部分:

$param = @("--i", "$video", "output.avi")
这似乎有效


同样值得赞扬的是@Walter Mitty再次尝试挥霍。

文档中说
-i
,您正在使用
-i
。我是不是错过了什么?你有没有试过泼洒?@hcm:是的,这是件奇怪的事。如果没有双连字符,错误消息是:
无法识别的选项'i pathtovidefile\video.mp4'。
@WalterMitty:您的意思是:
$param=@(“--i$video”,“output.avi”)$execute=&$pathtofmpeg@param
这会产生相同的结果:(您可以删除
@()
)。