greeple
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TomasAnders Цитата: Да не пишет оно сразу в готовый файл! Всё равно по частям пишет. | пишет в готовый, если закрыть ffmpeg в консоли, то файл останется один, если закрыть yt-dlp, то качать будет ffmpeg дальше, в тот же файл не суть на все остальные вопросы отвечено уже в теме по скачиванию видео попробуй такой (набросал как сумел, за дальнейшими правками если понадобится, к кому нибудь обратишься кто шарит в vbs\jscript cmd и т.д.) Код: @if (@a==@b) @end /* :: fetch.bat <url> :: fetch a web page @echo off >nul chcp 65001 setlocal if "%~1"=="" goto usage echo "%~1" | findstr /i "https*://" >NUL || goto usage set "URL=%~1" for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do ( rem process the HTML line-by-line echo(%%I ) goto :EOF :usage echo Usage: %~nx0 URL echo for example: %~nx0 http://www.google.com/ echo; echo The URL must be fully qualified, including the http:// or https:// goto :EOF JScript */ var wsarg = WSH.Arguments(0); WShell = WScript.CreateObject("WScript.Shell"); w(WShell); function w(wh){ while (xhr(wsarg)!=true) {WSH.Sleep(30000)}; wh.Run ("yt-dlp.exe --no-part --playlist-end 1 " + wsarg,1,true); WSH.Sleep(50) w(wh); }; function xhr(warg){var x=new ActiveXObject("Microsoft.XMLHTTP"); x.open("GET",warg,true); x.setRequestHeader('User-Agent','XMLHTTP/1.0'); x.send(''); while (x.readyState!=4) {WSH.Sleep(50)}; if (x.responseText.match(/"LIVE"/g)){ return true; }else { return false; }; }; | Это батник, который вызывает jscript, который написан в нём же Запуск с аргументом, аргумент это ссылка типа https://www.youtube.com/@Wylsacom/streams Код: После запуска скрипт раз в 30 секунд проверяет стрим (я это дело не проверил, не на чем было, но должен работать) WSH.Sleep(30000) тут в миллисекундах Если стрим есть, то запускает yt-dlp с --no-part --playlist-end 1 и в качестве ссылки эту же ссылку с которой запущен батник. Если путь надо свой, или ещё какие ключи, добавляй свои. Если в них есть кавычки, то их надо экранировать, и слэш тоже Код: wh.Run ("yt-dlp.exe --no-part --playlist-end 1 -o \"C:\\Users\\greeple\\Desktop\\yt\\%(title)s.%(ext)s\" " + wsarg,1,true); | Так как это плейлист, поэтому как и в первом варианте notinthewoods вызывается эта же ссылка и берётся первое видео. Обычно там на первом видео стрим, если нет нескольких стримов. Далее если стрим оборвался или закончился, проверяется заново. Как только стрим заработает начнётся заново. И вот надо потестить на нормальных стримах, пока я тестил отруб ffmpeg он сразу начинал запись снова, потому что канал стримит и задержку WSH.Sleep(50) я не добавлял, это сейчас в коде добавил, пока больше не тестил. В общем посмотри как оно. Закончить проверку как обычно CTRL+C, но тут ещё просит подтвердить Y, видимо надо запускать скрипт cscript /nologo ... с каким то ключом хз, ну и так норм. скрипт очень быстро работает, поэтому на самом деле тут Код: function w(wh){ while (xhr(wsarg)!=true) {WSH.Sleep(30000)}; wh.Run ("yt-dlp.exe --no-part --playlist-end 1 " + wsarg,1,true); WSH.Sleep(50) w(wh); }; | WSH.Sleep(50) можно смело делать 3000 (3 секунды) чтобы было время остановить стрим, а то ты только нажал CTRL+C, а он уже новый запускает (ну если стрим идёт и ты вручную заканчиваешь) может есть вариант отслеживать нажатие вручную кнопки и чтобы вышел из функции, но это уже к спецам | Всего записей: 4320 | Зарегистр. 11-02-2020 | Отправлено: 19:49 28-04-2024 | Исправлено: greeple, 20:32 28-04-2024 |
|