Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $c = Read-Host "input youtube url"
- $m = Read-Host "input minutes"
- # Root 경로 이 경로 밑의 download 에 저장됨 수정해서 사용
- $root = "E:\yt-dlp-live-sections"
- # 임시로 다운로드될 파일 경로
- $troot = "E:\yt-dlp-live-sections\temp"
- # yt-dlp의 경로
- $ytdlp = "E:\yt-dlp-live-sections\bin\yt-dlp.exe"
- # ffmpege 경로
- $ffmpeg = "E:\yt-dlp-live-sections\bin\ffmpeg.exe"
- # 파일저장 정보 가져오기 (파일경로 파일명에서 사용불가능한 특수문자 제거 귀찮아서 사용)
- $info = Invoke-Expression "${ytdlp} $c --no-warnings --print filename,id --skip-download -P ${root} -o ""download/%(uploader)s/[%(release_date>%Y-%m-%d)s] %(title)s"""
- $filePath = $info[0] -replace " [\d-]{10} [\d_]+$", "" # yt-dlp 이 버전에서 파일명에 다운받은 날짜 시간을 포함하기에 삭제
- $guid = New-Guid # 고유아이디
- $dirPath = Split-Path $filePath # 파일이 저장될 폴더
- # 다운로드 실행
- Start-Process $ytdlp -ArgumentList $c,--live-from-start,"--download-sections ""#-${m}minutes - 0""",-P,$troot,-o,"${guid}_%(section_start)s-%(section_end)s.%(ext)s" -Wait
- # 파일명 패턴
- $partPattern = "${guid}_(\d+\.\d+)-(\d+\.\d+)\.(f\d+)\.(\w+)\.part$"
- $videoPatten = "${guid}_(\d+\.\d+)-(\d+\.\d+)\.(\w+)$"
- # 디렉터리 내의 파일 목록 가져오기
- $files = Get-ChildItem $troot
- # 대상폴더가 없다면 폴더 생성
- if (-not (Test-Path $dirPath -PathType Container)) {
- $null = New-Item -Path $dirPath -ItemType Directory
- }
- # 정규식을 사용하여 파일 목록 필터링
- $partFiles = $files | Where-Object { $_.Name -match $partPattern }
- $videoFiles = $files | Where-Object { $_.Name -match $videoPatten }
- if ($partFiles.Count -eq 2) { # 파트파일이 존재하는 경우 (다운로드 완료전 종료)
- # 병합할 파일경로
- $file1 = $partFiles[0].FullName
- $file2 = $partFiles[1].FullName
- $partFiles[0] -match $partPattern
- #섹션 시간 변환
- $sectionTimeStart = (Get-Date "1970-01-01 00:00:00").AddSeconds($Matches[1] ).ToLocalTime().ToString("HHmmss")
- $sectionTimeEnd = (Get-Date "1970-01-01 00:00:00").AddSeconds($Matches[2] ).ToLocalTime().ToString("HHmmss")
- #확장자
- $ext = $Matches[4]
- # ffmpeg로 오디오 비디오 파일 병합
- Invoke-Expression "${ffmpeg} -i ${file1} -i ${file2} -c copy ""${filePath} [${sectionTimeStart}-${sectionTimeEnd}].${ext}"""
- Write-Host "강제종료되었습니다. 다운로드된 임시 파일을 병합했습니다"
- } elseif ($videoFiles.Count -eq 1) { # 비디오 파일이 존재하는 경우
- $videoFiles[0] -match $videoPatten
- #섹션 시간 변환
- $sectionTimeStart = (Get-Date "1970-01-01 00:00:00").AddSeconds($Matches[1] ).ToLocalTime().ToString("HHmmss")
- $sectionTimeEnd = (Get-Date "1970-01-01 00:00:00").AddSeconds($Matches[2] ).ToLocalTime().ToString("HHmmss")
- #확장자
- $ext = $Matches[3]
- # 파일 이동 (이름변경)
- Move-Item -Path $videoFiles[0].FullName -Destination "${filePath} [${sectionTimeStart}-${sectionTimeEnd}].${ext}"
- } else {
- Write-Host "일치하는 파일이 존재하지 않습니다."
- }
- # 임시파일 삭제
- Get-ChildItem -Path $troot -Filter "${guid}_*" | ForEach-Object { Remove-Item $_.FullName }
- # 다운로드된 경로열기
- explorer $dirPath
- # 자동종료방지
- Read-Host "press enter key to exit"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement