很长时间以来,StackExchange一直是我寻找答案的第一位-不幸的是,我找不到针对当前问题的任何(有效的)解决方案,因此我打开了这个问题。
我想做的是创建一个PowerShell脚本(我对PS还是很陌生的),以通过FFmpeg自动处理文件列表(即与脚本共享同一文件夹的所有MP4文件)。
TL; DR:我无法工作:使用-vf "iamafilterargument"
包含变量的过滤器命令()。
手写到cmd时我要尝试执行的命令是:
ffmpeg -i <input_file> -an -c:v libx264 -crf 16 -preset veryslow -vf "drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text='<input_filename>':bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5" <output_filename>.mkv
通过cmd,它可以按预期工作。现在我的PS脚本:
$encoder = "C:\FFMPEG\ffmpeg.exe"
$dateien = Get-ChildItem .\*.mp4
$dateinamen = ForEach-Object {$dateien.BaseName}
for($i=0; $i -lt $dateien.Length; $i++){
$filterbefehl = " -i " + $dateien[$i] + " -an -map_metadata -1 -vf=`"drawtext=fontsize=12:fontfile=/Windows/Fonts/arial.ttf:text=" + $dateinamen[$i] + ":bordercolor=black:borderw=2:fontcolor=white:x=(w-tw)/2:y=5:alpha=0.5`" -c:v libx264 -intra -crf 16 -hide_banner " + $dateinamen[$i] + ".mkv"
Start-Process -FilePath $encoder -ArgumentList $filterbefehl -NoNewWindow; pause
}
Write-Host "Done!"
但是,我从FFmpeg收到此错误消息:(我有意保留了文件名-整个文件称为“ cam4_2017-03-01_2238.mp4”。)
无法识别的选项'vf = drawtext = fontsize = 12:fontfile = / Windows / Fonts / arial.ttf:text = cam4_2017-03-01_2238:bordercolor = black:borderw = 2:fontcolor = white:x =(w-tw)/ 2:Y = 5:阿尔法= 0.5' 。拆分参数列表时出错:找不到选项
我尝试了各种事情:
- 使用双引号(“”)代替反引号(`“)
- 运用
&$encoder $filterbefehl
- 将$ filterbefehl的内容包括在内
-ArgumentList
- $ filterbefehl使用单引号而不是双引号
以上结果是到目前为止我可以完成的工作脚本中最接近的事情。我的其他大多数尝试都失败了,因为我无法弄清楚如何获得正确的报价(“”和“”都无效)。
使用的软件:-Win10 Pro(尽管我希望它能在Win> = 7上运行)-Powershell 5.1(内部版本14393)-Zeranoe网站上的FFmpeg-binariy-最新版本(20170225-7e4f32f)(使用3.2.2并未做出改变)
在此先感谢您对我的帮助!
fontfile
-我稍后会检查。令人尴尬的东西-由于初学者的错误而失败;-)
fontfile
字体路径的错误吗?
Fontconfig error: Cannot load default config file
-我花了一些时间弄清楚如果您的工作目录不在系统磁盘上(例如D:\ Path),则会出现此错误。所以我的代码现在涉及到:( $system_volume = "C:\" $files_volume = "D:\Path" cd $system_volume <ffmpeg command as above, with FULL PATH for input and output files> cd $files_volume <additional commands>
整个脚本很长,因为这只是整个过程的一部分-稍后,我将这些文件连接起来,...)再次感谢您的帮助!
=
在-vf=