Приключения в мире PowerShell и FFMPEG мною уже описывались здесь и здесь. Общедоступные образцы скриптов по этим заметкам я не формировал, потому как случаи работы с видеофайлами носят исключительно частный характер. Здесь же несколько другое дело…
В сети водится уйма программ для скачивания видео с youtube, но все они — как правило — разбухшие от реклам и наворотов графического интерфейса. В конечном счёте, от такой программы требуется только функционал качалки видеофайла(ов) и ни байтом больше. В поисках наиболее простейшей программы — набрёл на лёгкую утилиту YouTube-DL с управлением из командной строки. Ещё где-то здесь у них есть свой репозиторий с полным перечнем параметров.
По сути, от PowerShell требуется лишь оболочка для общения с пользователем, так как базовые вещи YouTube-DL умеет делать сама. К примеру, можно указать в какую папку нужно скачивать видео и утилита сама создаст папку и сложит туда файлы с нужным названием, заданным в шаблоне. Кроме этого, программа чистит за собой весь мусор. Да и внешний обработчик FFMPEG запускает сама. Нужно только всё хранить в одном каталоге.
В Linux использовать YouTube-DL можно прямо из терминала, предварительно установив программу из репозитория. Подробнее можно прочитать в статье на losst.ru.
Функционал моего скрипта достаточно прост: ищем исполняемый файл youtube-dl.exe, если не находим — скачиваем в папку со скриптом; далее предлагаем пользователю выбор действий. Для постобработки потребуется файл ffmpeg.exe — его уже добываем сами с официального сайта FFMPEG (скрипт откроет страницу скачивания).
В итоге у меня получился вот такой скрипт:
## Шапка скрипта ##
$start = "Скачать видео с YouTube"
[System.Console]::Title = $start
## Скачивание YouTube-DL ##
$getytdl = "https://www.youtube-dl.org/downloads/latest/youtube-dl.exe"
Import-Module BitsTransfer
$testutdl = Test-Path youtube-dl.exe
if (!$testutdl){ Write-Host "Файл youtube-dl.exe не найден!" -ForegroundColor Red
Write-Host "Запуск процесса скачивания." -ForegroundColor Red
Start-BitsTransfer -Source $getytdl -Destination $PSScriptRoot }
## Предупреждение перед запуском ##
Write-Host
Write-Host "Перед запуском операции скачивания поместите в буфер обмена URL нужного ролика" -ForegroundColor Cyan
## Блок переменных ##
$downloadbegin = "Запущен процесс скачивания..."
$downloadend = "Процесс скачивания завершён!"
$updatebegin = "Запущен процесс обновления YouTube-DL..."
$updateend = "Процесс обновления YouTube-DL завершён!"
## Запуск цикла скрипта ##
while($true) {
## Формирование меню скрипта ##
Write-Host
Write-Host "------------------------------------------------" -ForegroundColor Yellow
Write-Host " 1. Скачать видео" -ForegroundColor Green
Write-Host " 2. Скачать аудиодорожку в формате mp3" -ForegroundColor Green
Write-Host " 3. Обновить YouTube-Dl" -ForegroundColor Green
Write-Host "------------------------------------------------" -ForegroundColor Yellow
Write-Host " 4. Завершить работу скрипта" -ForegroundColor Red
Write-Host "------------------------------------------------" -ForegroundColor Yellow
Write-Host
## Селектор ##
$choice = Read-Host "Выберите вариант"
Write-Host
switch($choice){
## Скачивание видео ##
1{ Write-Host $downloadbegin -ForegroundColor Cyan
$cmd = "-f best $(Get-Clipboard) --no-check-certificate -o /video/%(title)s.%(ext)s --console-title"
Start-Process -FilePath youtube-dl.exe -ArgumentList $cmd -Wait -NoNewWindow
Write-Host $downloadend -ForegroundColor Cyan
[System.Console]::Title = $downloadend
}
## Скачивание mp3 ##
2{ Write-Host $downloadbegin -ForegroundColor Cyan
$testffmpeg = Test-Path ffmpeg.exe
if (!$testffmpeg) {
Write-Host "Для этой операции необходима утилита FFMPEG, которая не была найдена!" -ForegroundColor Red
Write-Host "Скачайте утилиту и разместите в папке со скриптом." -ForegroundColor Red
Start-Process -FilePath https://ffmpeg.org/download.html
Break
}
else {
$cmd = "-f bestaudio -x --embed-thumbnail --audio-format mp3 --audio-quality 0 $(Get-Clipboard) --no-check-certificate -o /audio/%(title)s.%(ext)s --console-title"
Start-Process -FilePath youtube-dl.exe -ArgumentList $cmd -Wait -NoNewWindow
Write-Host $downloadend -ForegroundColor Cyan
[System.Console]::Title = $downloadend }
}
## Обновление программы ##
3{ Write-Host $updatebegin -ForegroundColor Cyan
[System.Console]::Title = $start
$cmd = "-U"
Start-Process -FilePath youtube-dl.exe -ArgumentList $cmd -Wait -NoNewWindow
Write-Host $updateend -ForegroundColor Cyan }
## Завершить работу скрипта ##
4{ Exit }
## Неверный выбор ##
default {Write-Host "Неверный выбор. Попробуйте снова." -ForegroundColor Red
Write-Host}
}
}
Кстати, не ютьюбом единым жива YouTube-DL. Список всех поддерживаемых сайтов можно глянуть здесь.
UPD: если в буфер обмена поместить ссылку на плейлист — YouTube-DL начнёт выкачивать все видео из этого плейлиста.