Наконец-то дошла очередь обновления и до скрипта по работе со связкой yt-dlp и ffmpeg. Обновление объединило в себе два поста — этот и этот. Теперь не требуется таскать за собой пачку ps1 для работы с одним и тем же набором утилит.
Кратко напомню к чему эта карусель: данный скрипт позволяет обращаться к утилитам yt-dlp и ffmpeg для скачивания видео и аудио с видеохостингов. Все посты о моем опыте работы с утилитой yt-dlp можно найти по этому тегу.
Эта версия скрипта умеет скачивать перечисленные выше утилиты, если их нет в папке со скриптом, а yt-dlp можно ещё и обновлять прямо из скрипта.
## Заголовок окна консоли ##
[System.Console]::Title = "Скачать видео с помощью yt-dlp"
## Импорт модулей ##
Import-Module BitsTransfer
## Блок переменных ##
$ytdlp = "yt-dlp.exe"
$ffmpeg = "ffmpeg.exe"
$filename = "linklist.txt"
$linkYTDLP = "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe"
$linkFFMPEG = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
## Скачать Yt-dlp и ffmpeg ##
$testytdlp = Test-Path $ytdlp -PathType Leaf
$testffmpeg = Test-Path $ffmpeg -PathType Leaf
if (!$testytdlp) { Start-BitsTransfer -Source $linkYTDLP -Destination $PSScriptRoot }
if (!$testffmpeg)
{
$zipfile = "$PSScriptRoot\ffmpeg.zip"
$temp = "$PSScriptRoot\temp"
Start-BitsTransfer -Source $linkFFMPEG -Destination $zipfile
Expand-Archive $PSScriptRoot\ffmpeg.zip -DestinationPath $temp
Get-ChildItem -Include $ffmpeg -Path $temp -Recurse -ErrorAction SilentlyContinue | Move-Item -Destination $PSScriptRoot
Remove-Item -Path $temp -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path $zipfile -Recurse -ErrorAction SilentlyContinue
}
## Запуск цикла скрипта ##
while($true) {
## Формирование меню скрипта ##
Write-Host
Write-Host "------------------------------------------------" -ForegroundColor Yellow
Write-Host " 1. Скачать видео" -ForegroundColor Green
Write-Host " 2. Скачать аудиодорожку в формате mp3" -ForegroundColor Green
Write-Host " 3. Пакетное скачивание аудиодорожек" -ForegroundColor Cyan
Write-Host " 4. Пакетное скачивание видео" -ForegroundColor Cyan
Write-Host " 5. Обновить Yt-dlp" -ForegroundColor Red
Write-Host "------------------------------------------------" -ForegroundColor Yellow
Write-Host
## Селектор ##
$choice = Read-Host "Выберите вариант"
Write-Host
switch($choice){
## Скачивание видео ##
1{
$cmd = "-f bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --merge-output-format mp4 $(Get-Clipboard) -o video\%(title)s.%(ext)s"
Start-Process -FilePath $ytdlp -ArgumentList $cmd -Wait -NoNewWindow
}
## Скачивание mp3 ##
2{
$cmd = "-x --audio-format mp3 --audio-quality 0 --embed-thumbnail $(Get-Clipboard) -o audio\%(title)s.%(ext)s"
Start-Process -FilePath $ytdlp -ArgumentList $cmd -Wait -NoNewWindow
}
## Пакетное скачивание аудиодорожек ##
3{
# Создание файла для формирования списка #
try {
# Проверка наличия файла #
$testtxt = Test-Path $filename
if ($testtxt) { Start-Process notepad.exe -ArgumentList $filename -Wait }
else
{
Write-Host "Скопируйте ссылки на ролики в файл linklist.txt" -ForegroundColor Cyan
New-Item -Path $filename -ItemType File -ErrorAction Ignore | Out-Null
Start-Process notepad.exe -ArgumentList $filename -Wait
Write-Host "Файл со списком ссылок готов!" -ForegroundColor Cyan }
}
catch { Write-Host "Ошибка создания файла для списка ссылок!" -ForegroundColor Red }
# Скачивание аудиофайлов #
$cmd = "-x --audio-format mp3 --audio-quality 0 --embed-thumbnail --batch-file $filename -o audio\%(title)s.%(ext)s"
Start-Process -FilePath $ytdlp -ArgumentList $cmd -Wait -NoNewWindow
Remove-Item -Path $filename
}
## Пакетное скачивание видео ##
4{
# Создание файла для формирования списка #
try {
# Проверка наличия файла #
$testtxt = Test-Path $filename
if ($testtxt) { Start-Process notepad.exe -ArgumentList $filename -Wait }
else
{
Write-Host "Скопируйте ссылки на ролики в файл linklist.txt" -ForegroundColor Cyan
New-Item -Path $filename -ItemType File -ErrorAction Ignore | Out-Null
Start-Process notepad.exe -ArgumentList $filename -Wait
Write-Host "Файл со списком ссылок готов!" -ForegroundColor Cyan }
}
catch { Write-Host "Ошибка создания файла для списка ссылок!" -ForegroundColor Red }
# Скачивание видеофайлов #
$cmd = "-f bestvideo[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --merge-output-format mp4 --batch-file $filename -o video\%(title)s.%(ext)s"
Start-Process -FilePath $ytdlp -ArgumentList $cmd -Wait -NoNewWindow
Remove-Item -Path $filename
}
## Обновление программы ##
5{
$cmd = "-U"
Start-Process -FilePath $ytdlp -ArgumentList $cmd -Wait -NoNewWindow
}
## Неверный выбор ##
default{
Write-Host "Неверный выбор. Попробуйте снова." -ForegroundColor Red
Write-Host
}
}
}
Скрипт использует модуль BitsTransfer для скачивания файлов из этих ваших Интернетов. В случае с ffmpeg — скачивается официальный (эээм…) zip архив и извлекается в папку temp. После извлечения, скрипт отыскивает ffmpeg.exe и перемещает его в папку со скриптом, а всё остальное зачищает.