gpt4 book ai didi

powershell - 如何为 ffmpeg 创建 powershell 脚本/或 windows .bat 文件

转载 作者:行者123 更新时间:2023-12-03 01:25:12 25 4
gpt4 key购买 nike

因此,我想创建一个 Powershell 或 Batch 文件(以最适合该任务的方式),我可以将其粘贴到文件夹中,执行后,将开始使用 FFmpeg 对所有视频进行编码
有效的部分(在.bat中):

for %%a in ("*.mkv") do(
ffmpeg -i "%%a" -c:v libx265 -c:a copy -x265-params crf=25 "%%a [encoded].mkv"
pause)
这可行,但在某些文件夹中,我已经有 [编码] 文件。我希望脚本跳过这些文件。
我在 reddit 中询问并收到以下脚本:
for %%a in ("*.mkv") do (
if not exist "%%a [encoded].mkv" ffmpeg -i "%%a" -c:v libx265 -c:a copy -x265-params crf=25 "%%a [encoded].mkv"
pause)
我试过这个脚本,但每个文件都被编码了,即使它里面有 [encoded]。在我指出这一点之后,他们告诉我应该切换到 PowerShell 并给出一个 StackOverflow 问题的链接:

You probably need to switch to PowerShellFind files which does not contains selected stringThen do a foreach in what is returned to execute the ffmpeg command on it.


但我不知道如何在 PowerShell 中编码(以前从未使用过)
.bat 文件甚至可以工作吗?如果是,我该怎么写?如果 PowerShell 脚本是更好的选择,我将如何编写代码?
任何帮助和答案表示赞赏。

最佳答案

电源 ,您可以使用以下内容(您可以将此代码按原样粘贴到 PowerShell 控制台窗口中):

Get-ChildItem *.mkv | where BaseName -notlike '*`[encoded]' | foreach {
ffmpeg -i $_ -c:v libx265 -c:a copy -x265-params crf=25 "$($_.BaseName) [encoded].mkv"
pause
}
  • Get-ChildItem *.mkv使用 Get-ChildItem 获取有关当前目录中所有带扩展名 (.mkv) 的文件的信息(您可以添加 -File 以明确排除目录,但带扩展名的目录名是)。
  • where BaseName -notlike '*`[encoded]'使用 Where-Object cmdlet(其内置别名为 where )清除基本名称(不带文件扩展名的名称)已经以 [encoded] 结尾的文件.注意 `开幕前[为了逐字使用它,因为 [在 PowerShell 的 wildcard expressions 中有特殊含义,其中 -like / -notlike operator上运行。
  • foreach { ... }使用 ForEach-Object cmdlet(其内置别名是 foreach )调用 ffmpeg对于每个感兴趣的文件:
  • 在脚本 block ( { ... } ) 中,automatic $_ variable指手头的管道 (|) 输入对象,在本例中为 System.IO.FileInfo 表示输入文件的实例。
  • "$($_.BaseName) [encoded].mkv"使用 expandable string (字符串插值)通过输入文件的基本名称($_.BaseName)导出输出文件名。

  • 关于powershell - 如何为 ffmpeg 创建 powershell 脚本/或 windows .bat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64082434/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com