• SVT-AV1 Documentation
└• README
└• Parameters (-svtav1-params)
○○○○○○○○○○○○
○ ССЫЛКИ ○
○○○○○○○○○○○○
FFmpeg Audio
Все FLAC в Opus 160k Stereo.
$outputDir = Join-Path -Path $PWD.Path -ChildPath "output"
if (!(Test-Path -LiteralPath $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
Get-ChildItem -LiteralPath $PWD.Path -Filter *.flac -File | ForEach-Object {
$basename = $_.BaseName
$outputPath = Join-Path -Path $outputDir -ChildPath "$($basename).opus"
if (Test-Path -LiteralPath $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
ffmpeg -nostdin -n -i "$($_.FullName)" -hide_banner -c:a libopus -b:a 160k -ac 2 -vbr on -compression_level 10 "$outputPath"
}
}
FFmpeg Video
Для старых мультфильмов Telecined NTSC с гибридными вставками. Копирует все аудио-дорожки и субтитры. Аудио в Opus 160k Stereo.
• "fieldmatch=order=auto" — auto можно заменить на tff (Hybrid Telecined NTSC) или bff (NTSC Hard Telecine (BFF - Bottom Field First)), если не определило автоматически.
$outputDir = Join-Path -Path $PWD.Path -ChildPath "output"
if (!(Test-Path -LiteralPath $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
Get-ChildItem -LiteralPath $PWD.Path -Filter *.mkv -File | ForEach-Object {
$basename = $_.BaseName
$inputPath = $_.FullName
$outputPath = Join-Path -Path $outputDir -ChildPath "$($basename).mkv"
if (Test-Path -LiteralPath $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
ffmpeg -nostdin -n -i "$inputPath" -hide_banner -vf "fieldmatch=order=auto:combmatch=full,bwdif=mode=send_frame:deint=interlaced,decimate" -c:v libsvtav1 -preset 4 -crf 28 -svtav1-params "tune=0:enable-qm=1:qm-min=8:qm-max=15:chroma-qm-min=14:film-grain=17:enable-tf=0:adaptive-film-grain=1:film-grain-denoise=0:scd=1:keyint=10s:lookahead=32" -pix_fmt yuv420p10le -c:a libopus -b:a 160k -ac 2 -compression_level 10 -c:s copy -map 0 "$outputPath"
}
}
Видео и аудио на глаз и слух практически не отличимы от оригинала, неплохое сжатие. Все MP4 в SVT-AV1 и Opus 160k Stereo. Копирует все дорожки субтитров.
• film-grain - подобрать своё значение
• enable-tf - включение очень сильно экономит битрейт, но подпорчивает резкость изображения
$outputDir = Join-Path -Path $PWD.Path -ChildPath "output"
if (!(Test-Path -Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
Get-ChildItem -Path $PWD.Path -Filter *.mkv -File | ForEach-Object {
$basename = $_.BaseName
$outputPath = Join-Path -Path $outputDir -ChildPath "$($basename).mkv"
if (Test-Path -Path $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
ffmpeg -nostdin -n -i $_.FullName -hide_banner -c:v libsvtav1 -preset 4 -crf 28 -svtav1-params "tune=0:enable-qm=1:qm-min=8:qm-max=15:chroma-qm-min=14:film-grain=13:enable-tf=0:adaptive-film-grain=1:film-grain-denoise=0:scd=1:keyint=10s:lookahead=32" -pix_fmt yuv420p10le -c:a libopus -b:a 160k -ac 2 -compression_level 10 -c:s copy -map 0 "$outputPath"
}
}
Небольшая потеря качества видео и умеренная потеря качества аудио, очень сильное сжатие. Все MP4 в SVT-AV1 и Opus 50k Mono.
$outputDir = Join-Path -Path $PWD.Path -ChildPath "output"
if (!(Test-Path -Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
Get-ChildItem -Path $PWD.Path -Filter *.mp4 -File | ForEach-Object {
$basename = $_.BaseName
$outputPath = Join-Path -Path $outputDir -ChildPath "$($basename).mkv"
if (Test-Path -Path $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
ffmpeg -nostdin -n -i $_.FullName -hide_banner -c:v libsvtav1 -preset 4 -crf 35 -svtav1-params "tune=0:enable-qm=1:qm-min=0:qm-max=15:film-grain=10:enable-tf=1:adaptive-film-grain=1:film-grain-denoise=1:scd=1:keyint=10s:lookahead=32" -pix_fmt yuv420p10le -c:a libopus -b:a 50k -ac 1 -compression_level 10 -c:s copy -map 0 "$outputPath"
}
}
Images
Статичные изображения из .jpg в .avif.
Требуется:
• libavif
if (!(Test-Path "output")) { New-Item -ItemType Directory -Name "output" }
Get-ChildItem *.jpg | ForEach-Object {
$basename = $_.BaseName
$outputPath = "output/$($basename).avif"
if (Test-Path $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
avifenc --ignore-xmp -d 10 -q 80 --speed 1 --jobs all --yuv 420 $_.FullName "$outputPath"
}
}
Цветные изображения из .png в .jxl.
• -d — качество изображения (ниже значение — лучше качество)
• -e — усилие кодирования (10 — максимальное), лучше качество и меньше размер, но медленнее кодирование.
Требуется:
• libjxl
if (!(Test-Path "output")) { New-Item -ItemType Directory -Name "output" }
Get-ChildItem *.png | ForEach-Object {
$basename = $_.BaseName
$outputPath = "output/$($basename).jxl"
if (Test-Path $outputPath) {
Write-Host "Пропуск: $($_.Name) уже обработан." -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
cjxl $_.FullName "$outputPath" --lossless_jpeg=0 -d 2.5 -e 10
}
}
Чёрно-белые изображения из .jpg в .jxl с фиксом на искажение цвета.
• -d — качество изображения (ниже значение — лучше качество)
• -e — усилие кодирования (10 — максимальное), лучше качество и меньше размер, но медленнее кодирование.
Требуется:
• libjxl
• ImageMagick
if (!(Test-Path "output")) { New-Item -ItemType Directory -Name "output" | Out-Null }
if (!(Test-Path "temp")) { New-Item -ItemType Directory -Name "temp" | Out-Null }
Get-ChildItem *.jpg | ForEach-Object {
$basename = $_.BaseName
$outputPath = "output/$($basename).jxl"
$tempPath = "temp/$($basename).png"
if (Test-Path $outputPath) {
Write-Host "Пропуск: $($_.Name)" -ForegroundColor Cyan
} else {
Write-Host "Обработка: $($_.Name)" -ForegroundColor Yellow
# JPG -> PNG
magick $_.FullName -colorspace sRGB -type TrueColor -strip $tempPath
# PNG -> JXL
cjxl $tempPath $outputPath -d 3 -e 10
Remove-Item $tempPath
}
}
Remove-Item "temp" -Recurse -Force