因此,我编写了一个powershell脚本,它递归地搜索超过一定大小的所有视频文件,然后调整大小。
我觉得我缺少了一些明显的here...because --我的脚本实际上并不运行FFMPEG,它只是在屏幕上显示运行它的命令。我相信我会找到解决办法的。
$SearchPath = "N:\baseball"
$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB};
Set-Location -Path 'C:\Program Files\ffmpeg\bin';
foreach ($OldVideo in $oldVideos)
{
$outputfolder = "O:\resized"
$oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName
$suffix = "_resized.mp4"
$newname = "$($oldname)_$($suffix)"
$ffmpeg = ".'C:\Program Files\ffmpeg\bin\ffmpeg.exe'"
$arguments = " -i `"$($OldVideo)`" -vf scale=720:trunc(ow/a/2)*2 -c:v libx264 -f mp4 `"$outputfolder\$newname`" -y"
$ffmpeg + $arguments}下面是我运行脚本时屏幕的实际输出。‘C:\Program Files\ffmpeg\bin\ffmpeg.exe’-i“N:\棒球\点击\067.mov”-vf scale=720:trunc(ow/a/2)*2 -c:v libx264 -f mp4 "O:\resized\067__resized.mp4“-y
该命令应该执行(它在命令窗口中运行)。
发布于 2016-08-05 12:27:00
我终于开始工作了.我看了几个其他的脚本,以及它们是如何成为executing...seems的,就像我把它弄得太复杂了。编辑:我添加了日志记录和附加功能,以删除原始文件并将其移动到原始位置。我可能应该添加一些错误处理来检查电影长度是否是identical...gotta首先显示出来的。注意:日志记录并不完全适用于脚本的核心部分right...but (查找500‘t以上的电影,调整大小,移回原始文件夹并删除作品)。我还需要添加2个检查到电影文件。1查看调整后的电影是否实际上更小,以及电影的持续时间是否相同。
$env:Path += ";C:\Program Files\ffmpeg\bin\"
function Write-Log
{
param
(
[string]$strMessage
)
$LogDir = 'L:\conlogs\'
$Logfile = "\Conversion-Log.txt"
$Path = $logdir + $logfile
[string]$strDate = get-date
add-content -path $Path -value ($strDate + "`t:`t"+ $strMessage)
}
$SearchPath = "N:\baseball"
$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi","*.mp4") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB} | where-object {$_.Name -NotMatch "resized"};
foreach ($OldVideo in $oldVideos)
{ $outputfolder = "O:\resized"
$oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName
$suffix = "resized.mp4"
$newname = "$($oldname)_$($suffix)"
ffmpeg.exe -i $oldvideo.FullName -vf "scale=720:trunc(ow/a/2)*2" -c:v libx264 -f mp4 -y "$outputfolder\$newname"
$OriginalSize = (Get-Item $OldVideo).length
$ConvertedSize = (Get-Item $outputfolder\$Newname).length
If($ConvertedSize -le $OriginalSize)
{
Write-Log "$($NewVideo) has been successfully resized"
Remove-Item $OldVideo
If (Test-Path $OldVideo)
{
write-log "Unable to remove $($OldVideo)"
}
Else
{
write-log "Successfully removed $($OldVideo)"
}
Elseif
{
write-log "You dun goofed!"
}
$oldvidpath = [System.IO.Path]::GetDirectoryName($oldvideo)
Move-Item "$outputfolder\$Newname" -Destination $oldvidpath
If (Test-Path "$oldvidpath\$newname")
{
write-log "Unable to move $($newname)"
}
Else
{
write-log "Successfully moved $($OldVideo)"
}
Elseif
{
write-log "You dun goofed!"
}
}
}发布于 2016-08-04 21:30:02
现在,您只需要组合两个字符串,所以它输出合并的字符串。它正按照你的要求去做。尝试将其更改为:
$SearchPath = "N:\baseball"
$oldVideos = Get-ChildItem -Include @("*.mkv", "*.mov", "*.mpg", "*.wmv", "*.avi") -Path $SearchPath -Recurse | where-object {$_.length -gt 500MB};
Set-Location -Path 'C:\Program Files\ffmpeg\bin';
foreach ($OldVideo in $oldVideos)
{
$outputfolder = "O:\resized"
$oldname = Get-Item $oldvideo | Select-Object -ExpandProperty BaseName
$suffix = "_resized.mp4"
$newname = "$($oldname)_$($suffix)"
$ffmpeg = "'C:\Program Files\ffmpeg\bin\ffmpeg.exe'"
$arguments = " -i `"$($OldVideo)`" -vf scale=720:trunc(ow/a/2)*2 -c:v libx264 -f mp4 `"$outputfolder\$newname`" -y"
& $ffmpeg $arguments}https://stackoverflow.com/questions/38777489
复制相似问题