批量:压缩+moov前置流式MP4,输出compress前缀压缩后视频
Get-ChildItem *.mp4 | ForEach-Object {
$src = $_.FullName
$dst = Join-Path $_.DirectoryName ("compress_" + $_.Name)
# crf 24平衡体积画质,数字越大压缩越强、画质略降;音频固定128k aac
ffmpeg -i "$src" `
-c:v libx264 -preset fast -crf 24 -pix_fmt yuv420p `
-c:a aac -b:a 128k `
-movflags +faststart -y "$dst"
}
进阶版:和上面一致,但是不重命名
Get-ChildItem *.mp4 | ForEach-Object {
$src = $_.FullName
$dir = $_.DirectoryName
$name = $_.Name
# 生成一个同目录下的临时文件(随机名称,避免冲突)
$temp = Join-Path $dir ("temp_" + [System.Guid]::NewGuid().ToString("N") + ".mp4")
Write-Host "Processing: $name"
# 执行压缩,输出到临时文件
ffmpeg -i "$src" `
-c:v libx264 -preset fast -crf 24 -pix_fmt yuv420p `
-c:a aac -b:a 128k `
-movflags +faststart -y "$temp"
if ($LASTEXITCODE -eq 0) {
# 压缩成功,用临时文件覆盖原文件
Move-Item -Force $temp $src
Write-Host "Replaced: $name"
} else {
# 压缩失败,删除临时文件,保留原文件不动
Remove-Item -Force $temp -ErrorAction SilentlyContinue
Write-Warning "Failed to compress $name, original file kept."
}
}