ytdlpwin

z lol, 1 dzień temu, napisane w PowerShell, wyświetlone 5 razy. [paste_expire] 10 miesiące.
URL https://pastebin.k4be.pl/view/bf8ce0ee Udostępnij
Pobierz wklejkę lub Pokaż surowy tekst
  1. #HOW TO RUN THIS THING:
  2. # SAVE THIS FILE AS ytrescue.ps1
  3. #THROW IT INTO WHATEVER FOLDER YOU WANT
  4. #HAVE yt-dlp.exe EITHER:
  5. #- IN PATH
  6. # - OR SITTING NEXT TO THIS SCRIPT
  7. #OPEN powershell.exe
  8. #RUN:
  9. #                                       powershell -ExecutionPolicy Bypass -File .\ytrescue.ps1 "C:\MOVIES"
  10. #
  11. # NOTES FOR THE BRAVE:
  12. # - CHANGE "C:\MOVIES" TO YOUR ACTUAL FOLDER
  13. # - ffmpeg MAY BE NEEDED ??
  14. #- SCRIPT SCANS VIDEO FILE NAMES, STEALS YT ID, REDOWNLOADS CLEAN VERSION
  15. #IF YOUR FILENAMES ARE GARBAGE, IT SKIPS THEM. YOU DESERVED iT
  16.  
  17.  
  18. param([string]$Dir = ".")
  19.  
  20. if (-not (Test-Path -LiteralPath $Dir)) {
  21.     Write-Host "DIR NOT REAL: $Dir"
  22.     exit 1
  23. }
  24.  
  25. Set-Location -LiteralPath $Dir
  26.  
  27. $ytdlp = $null
  28. if (Get-Command yt-dlp.exe -ErrorAction SilentlyContinue) {
  29.     $ytdlp = "yt-dlp.exe"
  30. } elseif (Test-Path ".\yt-dlp.exe") {
  31.     $ytdlp = ".\yt-dlp.exe"
  32. } else {
  33.     Write-Host "YT-DLP NOT FOUND. NOT IN PATH. NOT IN FOLDER. YOU HAVE NOTHING."
  34.     exit 1
  35. }
  36.  
  37. $fmt = "bestvideo[height<=800][vcodec!=av01]+bestaudio[tbr<100]"
  38. $out = '%(title)s [%(resolution)s %(id)s] - %(uploader)s - %(upload_date>%Y-%m-%d)s.%(ext)s'
  39. $ok = 0; $fail = 0; $skip = 0
  40.  
  41. $files = Get-ChildItem -File | Where-Object { $_.Extension -match '^\.(mkv|webm|mp4|avi|flv|m4v|mov|ts)$' }
  42.  
  43. if ($files.Count -eq 0) {
  44.     Write-Host "NO VIDEO FILES. FOLDER IS BARREN."
  45.     exit 1
  46. }
  47.  
  48. Write-Host "SCANNING: $Dir ($($files.Count) files)"
  49.  
  50. foreach ($f in $files) {
  51.     $vid = $null
  52.     $brackets = [regex]::Matches($f.BaseName, '\[([^\]]+)\]')
  53.     foreach ($m in $brackets) {
  54.         $tokens = $m.Groups[1].Value -split '\s+'
  55.         foreach ($t in $tokens) {
  56.             if ($t -match '^[A-Za-z0-9_-]{11}$') { $vid = $t }
  57.         }
  58.     }
  59.     if (-not $vid) {
  60.         $all = [regex]::Matches($f.BaseName, '[A-Za-z0-9_-]{11}')
  61.         if ($all.Count -gt 0) { $vid = $all[$all.Count - 1].Value }
  62.     }
  63.     if (-not $vid) {
  64.         Write-Host "[SKIP] BAD NAME. NO ID FOUND: $($f.Name)"
  65.         $skip++
  66.         continue
  67.     }
  68.  
  69.     $url = "https://www.youtube.com/watch?v=$vid"
  70.     Write-Host "[GET]  $vid <- $($f.Name)"
  71.  
  72.     & $ytdlp -ciw -f $fmt --embed-metadata --embed-info-json --add-metadata --embed-thumbnail --convert-thumbnails jpg -o $out $url
  73.  
  74.     if ($LASTEXITCODE -eq 0) {
  75.         Write-Host "[OK]   $vid DOWNLOADED. NICE."
  76.         $ok++
  77.     } else {
  78.         Write-Host "[FAIL] $vid ERROR ERRORED. RIP."
  79.         $fail++
  80.     }
  81. }
  82.  
  83. Write-Host ""
  84. Write-Host "DONE. OK=$ok FAIL=$fail SKIP=$skip TOTAL=$($files.Count)"
  85. if ($fail -gt 0) { Write-Host "SOME FAILED. SKILL ISSUE OR DELETED VIDEOS." }
  86. if ($skip -gt 0) { Write-Host "SOME SKIPPED. FILENAMES UNREADABLE. RENAME YOUR STUFF." }
  87.  

odpowiedź "ytdlpwin"

Tutaj możesz odpowiedzieć na wklejkę z góry

captcha