PowerShell · 14.05.2022

Мультиформатная конвертация

Как и обещал ранее — привожу скрипт для мультиформатной конвертации видеофайлов.

Обработчик команды для утилиты ffmpeg поместил в отдельную функцию, а профиль и битрейт поместил в переменные. Добавил замену пробелов на символ нижнего подчеркивания в именах файлов для всего содержимого папки.

### Шапка скрипта ###
[System.Console]::Title = "Мультиформатная конвертация видеофайлов"

### Создать папку ###
New-Item -Path out -ItemType Directory -ErrorAction Ignore | Out-Null

### Убрать пробелы из имен файлов ###
dir * | ren -NewName { $_.Name -replace ' ','_' } -ErrorAction Ignore

### Функция конвертации ###
function Convert
{
  $videobitrate = "2000k" # Указать нужный битрейт видеопотока
  $profile = "hd720" # Заменить на hd1080, если требуется
  $cmd = "-i $_ -s $profile -preset fast -c:v libx264 -b:v $videobitrate -crf 23 -c:a aac -b:a 256k -strict -2 out\$($_.Name).mp4"
  Start-Process -FilePath ffmpeg.exe -ArgumentList $cmd -Wait -NoNewWindow  
}

### Фильтровать форматы ###
Get-ChildItem -Filter *.mkv | ForEach-Object { Convert }
Get-ChildItem -Filter *.mp4 | ForEach-Object { Convert }
Get-ChildItem -Filter *.ts  | ForEach-Object { Convert }

В нижний «отсек» скрипта можете добавить свои форматы.