一条线解决方案

一条线解决方案

我是 FFmpeg 的新手,正在尝试解决这个问题。我发现了批量处理和这个答案视频旋转但我需要把它们放在一起。

有人可以解释一下如何在 Windows 上为此操作创建脚本吗?

答案1

基本上,您只需要查找文件(将它们存储在变量中),然后将查找到的文件输入到 FFmpeg 中。

当然,Windows 的批处理语言就足够了。但由于我对此不太熟练,这里有一个 PowerShell 脚本:

# Searching for files with the Get-ChildItem cmdlet and saving their relevant properties in an array:
# NOTE: -File will only work with PowerShell-versions >= 3.
[array]$FilesToRotate = Get-ChildItem -Path "C:\PATH_TO_FILES" ((-Filter *.mp4)) ((-Recurse)) -File | ForEach-Object {
    # NOTE: This part is a bit tricky - I just added it so I'm able to save the parent-path of each file in an object.
    # NOTE: One could also omit the whole ForEach-Object and use the Split-Path cmdlet inside the output-file's specification in FFmpeg's code.
    [PSCustomObject]@{
        InFullName = $_.FullName
        # Will put the output-file in the same folder as the input-file and add "_ROTATION" as suffix in its name.
        OutFullName = "$(Split-Path -Parent -Path $($_.FullName))\$($_.BaseName)_ROTATE$($_.Extension)"
    }
}

# Processing the files with FFmpeg using PowerShell's Start-Process cmdlet:
for($i=0; $i -lt $FilesToRotate.Length; $i++){
    Start-Process -FilePath "C:\PATH_TO_FFMPEG\ffmpeg.exe" -Argumentlist " -i `"$($FilesToRotate[$i].InFullName)`" -c copy -metadata:s:v:0 rotate=<x> `"$($FilesToRotate[$i].OutFullName )`" " ((-Wait)) ((-NoNewWindow))
}

此脚本将使用您提供的代码(我没有检查,但你无论如何都可以轻松替换它)并将生成的文件保存到名称后缀为“_ROTATE”的同一文件夹中 - 因此“MyMovie2017.mov”将变为“MyMovie2017_ROTATE.mov”。 (如果您想将它们渲染到一个全新的文件夹,请$($FilesToRotate[$i].ParentPath)用您喜欢的路径替换。)

注意:双括号内的内容(( ))是可选的:

  • -Filter只会查找(一种)特定类型的文件,例如 *.mp4 只会查找 MP4 文件。如果您有多种文件类型,但许多文件不需要转换(如文本文件),您可以选择所有-Exclude您不想转换的格式,也可以-Include只选择那些应该转换的格式(-Include就像-Filter- 它速度较慢,但​​可以包含多种格式。)
  • -Recurse还将查看子文件夹。您也可以-Depth与 PowerShell v 5+ 一起使用。
  • -Wait将一次打开一个 ffmpeg 实例 - 如果没有它,所有实例将并行打开。
  • -NoNewWindow将在 PowerShell 控制台中显示 ffmpeg 实例的输出,如果没有它,ffmpeg 的每个实例都将在新的控制台窗口中打开。只有使用 才有意义-Wait

在启动脚本之前,您必须删除所有双括号(如果您不想要,则删除其中的内容)。

此外,还需要调整以下事项:

  • C:\PATH_TO_FILES显然是文件路径。
  • C:\PATH_TO_FFMPEG\ffmpeg.exe显然,这是 ffmpeg.exe 的路径。
  • rotate=<x>- 您需要将 替换<x>90180270。 (如代码源中所述)

如果有什么需要更多解释的话,我很乐意提供帮助。

答案2

一条线解决方案

npx rotate-video --source=source_path --destination=destination_path --extension=MP4 --angel=270

笔记:您需要FFMPEG先安装 CLI安装

相关内容