将参数传递给Powershells调用操作符-I can';我不能让它工作
出于某种原因,我甚至无法让最简单的Ffmpeg案例工作:将参数传递给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用法。 然而,我得到的只是
$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
这会产生相同的结果:(您可以删除@()
)。