PowerShell优化:单份ffmpeg crop脚本批量调用并传递MP4变量
优化后的PowerShell脚本实现方案
修改思路
- 将
ffmpeg crop.ps1统一存放至C:\Videos根目录,消除多份脚本的维护成本 - 直接递归遍历所有子文件夹中的MP4文件,为每个文件启动根目录的裁剪脚本
- 通过命令行参数向裁剪脚本传递当前MP4的完整路径和文件名
最终脚本代码
$rootDir = "C:\Videos" $cropScript = Join-Path $rootDir "ffmpeg crop.ps1" # 递归查找所有子文件夹中的MP4文件 Get-ChildItem -Path $rootDir -Recurse -Filter "*.mp4" | ForEach-Object { $mp4 = $_ try { # 启动根目录的裁剪脚本,传递MP4的完整路径和文件名参数 Start-Process -WorkingDirectory $mp4.DirectoryName powershell.exe @" -NoExit -File "$cropScript" -VideoFullPath "$($mp4.FullName)" -VideoName "$($mp4.Name)" "@ } catch { Write-Host -NoNewline -ForegroundColor Red "无法处理文件: " Write-Host -NoNewline -ForegroundColor White "$($mp4.Name)`n" Write-Host -NoNewline -ForegroundColor White "错误信息: " Write-Host -ForegroundColor Red "$($_.Exception.Message)`n" } }
裁剪脚本参数接收配置
在C:\Videos\ffmpeg crop.ps1开头添加参数定义,用于接收传递的变量:
param( [Parameter(Mandatory=$true)] [string]$VideoFullPath, [Parameter(Mandatory=$true)] [string]$VideoName ) # 后续裁剪逻辑可直接使用 $VideoFullPath 和 $VideoName 变量处理视频 # 示例:Write-Host "正在处理视频: $VideoName,路径: $VideoFullPath"
关键说明
- 路径统一:
$cropScript固定指向根目录的脚本,无需再维护多份副本 - 参数传递:使用Here-String(
@" ... "@)避免复杂的引号转义,确保参数正确传递 - 工作目录:保持原逻辑,将进程工作目录设为MP4所在文件夹,适配裁剪脚本的相对路径依赖
- 错误处理:调整错误输出,明确显示出错的MP4文件名,便于排查问题
内容的提问来源于stack exchange,提问作者Tyrone Hirt
相关产品推荐
相关产品推荐

