Автор Тема: [BASH] While яде първия знак, на вас случвало ли се е?  (Прочетена 16934 пъти)

remotexx

  • Напреднали
  • *****
  • Публикации: 3210
    • Профил
Очакваше се и Гугъл да последва Нетфликс, а сега хората дето си накупиха 8К телевизори какво ще гледат? Ами тия с 4К? Включително и Гогата с неговия Full HD/1080p, като те ограничиха всичко на SD/480p
Интересно имаше 1-2 ... няколкоо 4К канала, какво се случи с тях, спряха ли ги или ги прекръстиха на SD или 0.48 К ха-ха-ха

Гого аз не разбрах нещо, мислех че на моменти ти пускат по добро качество, а според мейкми пускат по лошо... Би ли уточнил моля... вероятно аз съм се подвел че по големите номера означават по добро качество.

И за финал .net core версия искаш ли?
А ако много държиш да е на баш, що да не преместим темата в конкурса за баш майстора, а?
« Последна редакция: Mar 31, 2020, 08:23 от remotexx »
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Като те сърби, давай ;)

Мислех, че за програматорите вирус „Корона“ не важи и си работят :P

Проблема е терминологичен. Според света (вкл. Мейк) по-добро е това с по-добро качество. Според мен по-добро е това с по-малък размер, което възможно най-скоро ще мога да слушам/гледам и ще го чакам най-малко да се сваля.

Например, ако форматите 599/600 бяха налични навсякъде и по всяко време, щях да мога да ги пускам директно с mpv --ytdl-raw-options=f=599/600, без да ми се налага изобщо да ги тегля.  С доста разпространения 249 (има го на почти всяко видео) това е на ръба да се случи. Ако имах стабилни 7КБ, а не нещо лашкащо се между 5 и 8, а едва усреднено да е 7, то щеше да е възможно.

Конвенциите за именуване в тубата имат наследство и затова съвсем ясни. Например 17 означаваше 170i, а 36, 360i. Следователно след 17, следващ дойде 18 (реално най-стария формат), който е 360p. Mp4 720p го направиха 22. Първия webm (360p) го кръстиха 43.

И някъде в този момент им дойде до акъла, че трудно ще могат да поддържат две цифри, ако продължат да трупат формати. А те продължиха.

И тогава решиха да сложат трета цифра. Така всичко с 1** е mo4/m4a, всичко с 2** е vp8,9/ogg, а очевидно 3** вече са av1. Отначало 24* бяха webm, защото на старите 4* бяха закачили една двойка отпред, а mp4 бяха 13*. Ама и това бързо се промени. Например има 249, който отговаря на 139, но решиха да вкарат два пъти по-дискртизирани, които станаха 250 и съответно 140. А накрая добавиха и 251. Ще има 252 и 253, когато решат да стигнат до качеството на mp3 с 192 и 360 КБ/с. А за FLAC ще почакаме.

Нарастването на цифрите означава нарастване на качеството. Обаче понеже все още са налични и старите кодове, то конвенцията не е пълна.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Гого аз не разбрах нещо, мислех че на моменти ти пускат по добро качество, а според мейкми пускат по лошо... Би ли уточнил моля... вероятно аз съм се подвел че по големите номера означават по добро качество.
Проблемът е че в случая не може да се лепне етикет "по-добро" или "по-лошо". Принципно за тубата и нетфликс, може, но не и за изискванията на Гого :) .От там идва и объркването ти.
Тези формати, които Гого желае почти не се използват и се появяват, и изчезват постоянно. За това и той твърди, че ydl не работи. Аз колкото и пъти да го тествах, си работеше (сигурно вече над 100). Просто той докато свали едно клипче може да се появят и изчезнат. При мен тъй като ги свалям моментално, ако проверя най-малкия формат преди и след свалянето, то винаги ydl си е свършил работата. Заради това същото нещо му предлагам да си ползва него, защото дори и скрипт да му напишеш, крайният резултат ще е същия.


ПП: Сега се сетих- Гого, дръж си версията на ydl последна, че е доказано че от версия до версия, не се държи по един и същи начин (както споменах горе за котката и мишката). Моята е тази - 2020.03.24 . Старата която не работеше, беше на 4 месеца :)


ПП2: Ето за какво говоря:
Цитат
-rw-rw-r--  1 makeme makeme 1,9M мар 22 11:09 'Papi Hans - Стой си вкъщи [Official Video]-udGtY2bmTxs.mkv'
-rw-rw-r--  1 makeme makeme 972K мар 22 12:12 'Papi Hans - Стой си вкъщи [Official Video]-udGtY2bmTxs.mp4'
Едното го пуснах преди да напиша поста, а другото след като го написах.

При проверка се вижда че за час изчезнаха 597 и 599):
Цитат
$ youtube-dl -F https://www.youtube.com/watch?v=udGtY2bmTxs
[youtube] udGtY2bmTxs: Downloading webpage
[info] Available formats for udGtY2bmTxs:
format code  extension  resolution note
249          webm       audio only tiny   55k , opus @ 50k (48000Hz), 1.11MiB
250          webm       audio only tiny   72k , opus @ 70k (48000Hz), 1.47MiB
140          m4a        audio only tiny  130k , m4a_dash container, mp4a.40.2@128k (44100Hz), 2.82MiB
251          webm       audio only tiny  145k , opus @160k (48000Hz), 2.92MiB
160          mp4        82x144     144p   38k , avc1.4d500b, 25fps, video only, 808.96KiB
133          mp4        136x240    144p   81k , avc1.4d400c, 25fps, video only, 1.70MiB
278          webm       144x256    144p   97k , webm container, vp9, 25fps, video only, 2.04MiB
134          mp4        202x360    240p  201k , avc1.4d400d, 25fps, video only, 4.22MiB
242          webm       240x426    240p  224k , vp9, 25fps, video only, 4.61MiB
135          mp4        270x480    240p  369k , avc1.4d4015, 25fps, video only, 7.77MiB
243          webm       360x640    360p  413k , vp9, 25fps, video only, 8.41MiB
136          mp4        406x720    360p  736k , avc1.4d401e, 25fps, video only, 15.21MiB
244          webm       480x854    480p  765k , vp9, 25fps, video only, 15.16MiB
137          mp4        608x1080   480p 1377k , avc1.64001f, 25fps, video only, 27.10MiB
247          webm       720x1280   720p 1528k , vp9, 25fps, video only, 29.13MiB
248          webm       1080x1920  1080p 2682k , vp9, 25fps, video only, 51.56MiB
18           mp4        202x360    240p  428k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 9.34MiB (best)
Та от всичките писания и аз научих нещо ;)

ПП3:
Например, там където има 278 и 160, винаги избира 278.
Както виждаш от примера - това не е вярно. Ето ти аутпута:
Цитат
[ffmpeg] Merging formats into "Papi Hans - Стой си вкъщи [Official Video]-udGtY2bmTxs.mkv"
Deleting original file Papi Hans - Стой си вкъщи [Official Video]-udGtY2bmTxs.f160.mp4 (pass -k to keep)
Deleting original file Papi Hans - Стой си вкъщи [Official Video]-udGtY2bmTxs.f249.webm (pass -k to keep)
« Последна редакция: Mar 31, 2020, 10:18 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Държа си я нова версия, защото ползвам тубата постоянно:

Код
GeSHi (Bash):
  1. youtube-dl --version
  2. 2020.03.24
  3.  

597 за видео, 599, 600 за аудио са чисто нови формати от този месец. Опитно открих, че ти ги пуска веднъж на час, когато поискаш 249. 160 и 278 за видео, 140 и 249 за аудио ги има за почти всеки клип. 249 е до три пъти по-малък от 140, а 160 е почти с една трета по-малък от 278. С worstaudio винаги предпочита 249 пред 140 и това е правилна стратегия. За съжаление с worstvideo винаги взема 278 пред 160. А вече предпочита и още по-новия 378 пред 160. Съобразно името това може и да е вярно. 278 може би наистина е с една идея с по-лошо качество от 160 (поради по-ниското кодиране в битове на секунда), но едва ли има човек, който сваля с по-лошото качество заради самото качество. Сваля го заради размера. И точно в това youtube-dl се дъни лошо.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
За съжаление с worstvideo винаги взема 278 пред 160.
Горе ти дадох пример, че това не е вярно, което казваш. Махни и /worst накрая, че при твоята връзка може да го бърка нещо и остави само worstvideo+worstaudio. Не можеш да ме убедиш че не работи след като го тествах повече пъти от колкото съм го ползвал тоя ydl през живота си :)
« Последна редакция: Mar 31, 2020, 10:30 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Съгласен. Днес ще продължа изпитанията без worst. Обаче тъпия му Константин Трендафилов ми се вижда ненадежден случай. Клипчето му е снимано с телефон и се откроява рязка разлика между 160 и 278. Това е в случая (както подозирам) Ydl да вземат под внимание разделителната способност, а не размера и да вземат първата, която открият. По това клипче разбирам, че webm ги закачат за височината, а mp4 за ширината. Странно решение. Гългълска му работа.

Както обещах днес ще взема още клипове и ще правя още проби за да имам сигурен резултат, а не теоретичен. Но все пак при worstvideo+worstaidio/worst би трябвало да значи дай ми най-лошото видео, като с него искам и най-лошото аудио, но ако няма, дай ми най-лошото възможно аудио. Защото наклонената черта в Ydl значи логическо ИЛИ.

Наистина ще направя днес изпитания, за да не са напразни приказки, а да проверя, има ли промяна без /worst, навсякъде ли е или само в някои случаи.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Да, логиката е такава. Проблемът при теб мисля обаче, че може и да не се реши, тъй като от тестовете ония ден, засякох че тя самата заявка към тубата "дай възможностите" хаби доста трафик (от твоя гледна точка). Та не знам това, което получаваш като резултат дали е актуално или дали въобще не е бъгнато. Примерно пращаш заявката и тя ти върви (по мои изчисления) 2-3 мин. Да ама за тея минути, нещо се е променило и списъка или е неверен или частично е неверен (не знам точно как работи заявката).

Иначе за моето 1080п, аз си ползвам командата която по-горе дадох понеже за мен е най-доброто (цена/качество :) ). Ако прочетеш man-a ще видиш че по подразбиране работи така bestvideo+bestaudio/best. Само че на мен ми трябват мп4ки за телевизора и не виждам кой знае каква разлика в качеството. За това и използвам онези опции, които по-нагоре ги бях дал. От там се залъгах че и ти това желаеш и ти я сглобих "уж кат за тебе". Накрая осъзнах обаче, че ти искаш просто най-малкото по размер (макар и да упрекваш разработчиците, че трябва да гледат качеството) и реално стигаме до worstvideo+worstaidio . Ако това не ти свърши работа, не мисля че друго ще ти свърши.

Ако все пак не ти свърши работа, бих ти предложил, ако имаш достъп до някой сървър да си ги сваляш там и после, да си ги дърпаш с rsync. Ако вземат да се каръптват по пътя към теб, можеш да ползваш опцията му -W.
« Последна редакция: Mar 31, 2020, 11:19 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Понеже вчера говорех за този бавно развиващия Boreau, то днес реших да пробвам с негови песни. Избора е добър, защото песните му са кратки, а и записва от 11 години, та има стари, има нови качени. Тубата ми предложи някакви и започнах.

WjOxsKHY-6w:

242          webm       426x240    240p   39k , vp9, 15fps, video only, 435.60KiB
278          webm       256x144    144p   46k , webm container, vp9, 15fps, video only, 312.18KiB

Са първите две от списъка с видео. Избра 242. Звук избра 249, но точно там беше пръв. Нямаше друго преди него в списъка. По нито един критерии не отговаря за „най-лошото“ видео. Просто е първо в списъка.

3bE6ryJU640:

242          webm       426x240    240p    9k , vp9, 15fps, video only, 146.87KiB
243          webm       640x360    360p   16k , vp9, 15fps, video only, 256.82KiB
278          webm       256x144    144p   17k , webm container, vp9, 15fps, video only, 226.70KiB

Няма 160. 242 е добре.


UuDkjkyRa1M:
j6AukuckLq0:
cu0-Cob7SO0:
efabPdPgSws:
ft4ohRC1pSY:
nk0EYhwm-60:
SXBH8_yT23A:

160          mp4        256x144    144p   29k , avc1.4d400b, 15fps, video only, 269.14KiB
278          webm       256x144    144p   59k , webm container, vp9, 15fps, video only, 682.27KiB

160          mp4        256x144    144p   84k , avc1.4d400c, 25fps, video only, 1022.46KiB
278          webm       256x144    144p   95k , webm container, vp9, 25fps, video only, 1.98MiB

160          mp4        256x144    144p  107k , avc1.4d400c, 25fps, video only, 1.55MiB
278          webm       256x144    144p  146k , webm container, vp9, 25fps, video only, 2.41MiB

160          mp4        256x144    144p   29k , avc1.4d400b, 15fps, video only, 275.54KiB
278          webm       256x144    144p   59k , webm container, vp9, 15fps, video only, 696.12KiB

160          mp4        256x140    144p  110k , avc1.42c00c, 15fps, video only, 1.58MiB
278          webm       256x140    144p  128k , webm container, vp9, 15fps, video only, 1.62MiB
133          mp4        426x234    240p  260k , avc1.4d4015, 30fps, video only, 3.56MiB

160          mp4        256x144    144p   35k , avc1.4d400c, 30fps, video only, 438.64KiB
133          mp4        426x240    240p   77k , avc1.4d4015, 30fps, video only, 740.52KiB
242          webm       426x240    240p   85k , vp9, 30fps, video only, 1001.48KiB
278          webm       256x144    144p   86k , webm container, vp9, 30fps, video only, 987.61KiB

160          mp4        256x144    144p   51k , avc1.4d400c, 25fps, video only, 603.92KiB
133          mp4        426x240    240p   95k , avc1.4d4015, 25fps, video only, 1.10MiB
278          webm       256x144    144p   97k , webm container, vp9, 25fps, video only, 1.38MiB
242          webm       426x240    240p  115k , vp9, 25fps, video only, 1.32MiB


Избра 249/160. Има 278 в списъка, но е след 160.


Други клипове:
Xs0OM6DRrbM:
r0NqK4rVEpU:
6I71vtR73cw:
gxj7Gsje8Jo:
kLSSb5jiH3g:
zjXVcu46LAg:


278          webm       256x144    144p   97k , webm container, vp9, 25fps, video only, 2.07MiB
160          mp4        256x144    144p  110k , avc1.4d400c, 25fps, video only, 1.79MiB

278          webm       256x144    144p   98k , webm container, vp9, 25fps, video only, 2.26MiB
160          mp4        256x144    144p  110k , avc1.4d400c, 25fps, video only, 1.69MiB
242          webm       426x240    240p  213k , vp9, 25fps, video only, 3.91MiB
133          mp4        426x240    240p  244k , avc1.4d4015, 25fps, video only, 3.07MiB

278          webm       256x144    144p   98k , webm container, vp9, 24fps, video only, 1.80MiB
160          mp4        256x144    144p  112k , avc1.4d400c, 24fps, video only, 1.91MiB

278          webm       256x144    144p   54k , webm container, vp9, 15fps, video only, 933.96KiB
242          webm       426x240    240p   57k , vp9, 15fps, video only, 937.40KiB
160          mp4        256x144    144p  114k , avc1.42c00c, 15fps, video only, 1.63MiB

278          webm       192x144    144p   79k , webm container, vp9, 24fps, video only, 1.91MiB
160          mp4        192x144    144p   86k , avc1.4d400b, 24fps, video only, 2.43MiB
133          mp4        320x240    240p  186k , avc1.4d400d, 24fps, video only, 5.30MiB
242          webm       320x240    240p  190k , vp9, 24fps, video only, 3.31MiB

278          webm       256x144    144p   95k , webm container, vp9, 25fps, video only, 1.93MiB
160          mp4        256x144    144p  110k , avc1.4d400c, 25fps, video only, 1.98MiB
242          webm       426x240    240p  221k , vp9, 25fps, video only, 3.79MiB
133          mp4        426x240    240p  319k , avc1.4d4015, 25fps, video only, 4.04MiB




Вече неизненадващо избира 278. Явно това е алгоритъма. Просто взима първото от списъка. 249 също е първо в случая.

Изненадващото без първите две  е, че все пак стратегията на Гългъл е проработила и webm наистина е по-малък от mp4. Но това го виждам рядко.

ph7d643jpwM:

160          mp4        256x144    144p   35k , avc1.4d400c, 30fps, video only, 407.54KiB
133          mp4        426x240    240p   82k , avc1.4d4015, 30fps, video only, 862.62KiB
278          webm       256x144    144p   83k , webm container, vp9, 30fps, video only, 832.10KiB
242          webm       426x240    240p  109k , vp9, 30fps, video only, 1.08MiB

Избира 160. Пръв е в списъка и е правилен.

Разглеждайки всички примери разбирам, че тубата ги подрежда по битове на секунда, но това, когато си говорим за VP8/9 и MPEG 4 рядко значи по-малък размер.

Омръзна ми от отровната музика и лирика на този. Макар „Ай малко“ („Чаай малко“ е друга песен) с код WjOxsKHY-6w да ме впечатли. Има почти нормални послания, ако изключим първото. Но пък музиката някаква наркоманска.


=*=

Като цяло експеримента с worstaudio+worstvideo е напълно успешен. Понеже вчера не водех точна статистика, не знам дали съм попадал само на клипове с 278 преди 160. Но пък със сигурност 278 беше по-голям от 160. При тези тук повечето пъти 278 е след 160 в списъка, а единствения случай дето 278 не е наистина по-малък, сигурно и аз щях да го изпусна при нормални обстоятелства и щях да сваля 160.

Това определено е по-гъвкаво от моя вариант.

Моето с изброяване на форматите конкретно си работи. Само, че подтикнат от теб ще изпробвам вместо: 599/600/249/250/139/251/140,597/160 да дам 599/600/249/250/139/251/140+597/160, защото иначе --merge-output-format mkv не работи (както е описано в help, че не трябва да работи), а точно това е оптимизацията, която печеля с твоя вариант. Досега трябваше да пускам ffmpeg ръчно. Но, ако плюса работи и за изброени формати, то това отпада.

доп.
===
Пробвах и ми каза, че първо трябва да сложа формата на видеото,  после на аудиото, но обеща да ги събере в mkv. Трябва да пробвам с изброявания дали става. Обаче дали е по-бързо, отколкото да дам worstaudio+worstvideo не знам за сега. Онези горе не ми ги бавеше много, ама всичките са по около две минути. Когато тегля нещо истинско, дето е половин или час, ще разбера.

п.п. До man се допитвам рядко, защото всичко важно го има в --help.  В man са вече завъртяните подробности, като това, че можеш да дадеш плюс.

п.п.п. Не мога да си платя сметка за достъп до Интернет, но мислиш, че мога да си позволя да наема сървър :) Благодаря за пожеланието, дано някога е възможно. Но с тая депресия, няма да е скоро. Не, че нямаше и такива времена, но отминаха в предното десетилетие.

ОТНОВО ГОЛЯМО БЛАГОДАРЯ!
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

jet

  • Напреднали
  • *****
  • Публикации: 3472
  • Distribution: debian
  • Window Manager: kde
    • Профил
Във Видин на чаршията няма ли някакъв безплатен WiFi.
Нали сега се фукат, че с европейски кинти по центровете на градовете щяло да има безплатен интернет.
Слагаш едно Распбъри в раницата със списък на файловете за сваляне и докато изпиеш едно кафе си напълнил кошницата.
Активен

..⢀⣴⠾⠻⢶⣦⠀
  ⣾⠁⢠⠒⠀⣿⡁
  ⢿⡄⠘⠷⠚⠋
  ⠈⠳⣄⠀⠀⠀⠀  Debian, the universal operating system.

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Има то, нищо няма. Обичам да казвам, тоя град е останал в тринадесети век. В края на четиринадесети пада под турско. Значи два века преди това без четири години. А и Малинка е още нещо, което не мога да си позволя.

Не знам по америчките градове как е, ама тук има всеобща забрана за излизане за нещо различно от това да ходиш до магазина, аптеката и да си разходиш кучето. Аз куче нямам. А и градовете също са под обсада. Никой не може да ги посещава или напуска.

Макар, че сме в РБългария и карантината реално изтрая две седмици. Тази седмица хората си щъкат, закусвалните работят, много магазини също, полицията се е покрила и я няма никаква. Аз обаче си поддържам изолацията. И не щото ме е страх от зараза. Ако има да мра, тая зараза ще влезе през прозореца и пак ще ме убие. Просто това си ми е стила на живот. Страня от хората и си седя вкъщи. За мен нищо не се е променило.

Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Намерих време да направя дребните промени.
Всичко вече е в един loop, който на тридесет секунди поглежда в oti. Това време може да се промени разбира се. Най-накрая на скрипта е.
Търси и трие свалените файлове ( форматите, не готовия mkv ), ако youtube-dl не го е направил по някаква причина. Не търси за .part.
Променя датата на сваления файл според датата на качване в Youtube.

Сега се сещам, че се получава малко тъпо, понеже, ако трябва да се трие файл, трябва да се изтрие първо линка му в oti, щото иначе ще започна да го сваля отново.
Може да се добави опция --download-archive FILE към командата за сваляне, за да не сваля повтарящи се файлове, но ще се наложат и някои други промени.

Код:
#!/usr/bin/env python3
#
#

from collections import namedtuple
import concurrent.futures as cf
from datetime import datetime
from glob import glob
import json
import os
from pathlib import Path
import subprocess as sp
import sys
import time


def get_dw_link(oti_path):
    with open(oti_path) as oti:
        for line in oti:
            # Просто проверява, ако реда започва като линк за гледане на видео от Youtube
            # и игнорира всичко останало
            if line.startswith('https://www.youtube.com/watch?v='):
                yield line.split()[0]
               

def get_data(url):
    try:
        # Тук може да се сложи timeout като аргумент в секунди
        # Може да бъде и израз 10*60 става 10 минути. Или пък 10*60+15
       
        # Сваля данни за видеото в JSON формат
        resp = sp.run(f'youtube-dl.exe -j {url}'.split(), capture_output=True) # timeout=timeout
       
        if resp.returncode == 0:
            data = json.loads(resp.stdout)
            video_data = {'video_id': data['display_id'],
                        'filename': Path(data['_filename']).stem,
                        'upload_date': data['upload_date'],
                        'audio': dict(),
                        'video': dict()}
           
            audio = []
            video = []
            for media in data['formats']:
                _format = namedtuple('Format', ['format', 'ext', 'filesize',])

                if media['filesize'] and 'audio only' in media['format']:
                    audio.append(_format(media['format_id'], media['ext'], media['filesize']))
                elif media['filesize']:
                    video.append(_format(media['format_id'], media['ext'], media['filesize']))
               
               
            audio.sort(key=lambda data: data.filesize)
            video.sort(key=lambda data: data.filesize)
           
            video_data['audio'] = audio
            video_data['video'] = video
           
            video_data['audio_min'] = min(audio, key=lambda data: data.filesize)
            video_data['video_min'] = min(video, key=lambda data: data.filesize)
           
            return video_data
       
        else:
            msg = f'\nGetting video data FAILED! Skipped: "{url}". Return code: {resp.returncode}\n'
           
            for line in resp.stderr.decode().split('\n'):
                if line.startswith('ERROR: '):
                    msg = f'{msg}{line}\n'
           
            msgs.append(msg)
           
    except sp.TimeoutExpired:
        print(f'\nTimeout! Subprocess: {" ".join(resp.args)}. Skipped!\n')
       
                                     
def get_ids():
    all_data = []
   
    with open('oti2', 'w') as oti2:
        with cf.ThreadPoolExecutor() as executor:
            videos_data = [executor.submit(get_data, url) for url in get_dw_link('oti')]
           
            for result in cf.as_completed(videos_data):
                data = result.result()
               
                if data:
                    all_data.append(data)
                    oti2.write(f'{data["video_id"]}\n')
     
    return all_data


while True:
    try:
        ###
        msgs = []

        # Премахваме файла, ако преди това скрипта е прекъснал и не го е премахнал сам
        if os.path.exists('oti2'):
            os.remove('oti2')

        mt_oti = os.stat('oti').st_mtime # Съхраняваме mtime на oti

        # Ако не съществува или mtime му е различен от този на oti
        if not os.path.exists('oti2') or os.stat('oti2').st_mtime != mt_oti:
            videos = get_ids()
               
            at_oti2 = os.stat('oti2').st_atime
           
            # За да се промени mtime на файла трябва да се зададат и двете atime и mtime. Не питай защо. Не зная.
            os.utime('oti2', (at_oti2, mt_oti))

        # Сваляне на видеата от списъка в oti
        for video in videos:
            # Търсим, ако има файл, който завършва на {id}.mkv
            pattern = f'*{video["video_id"]}.mkv'
           
            if glob(pattern):
                pass
                # print(f'ID: {{video["video_id"]} - Matroska OK!')
           
            else:
                command = f'youtube-dl.exe -f {video["video_min"].format}+{video["audio_min"].format} -c {video["video_id"]}'.split()
               
                while not glob(pattern):
                    try:
                        proc = sp.run(command, check=True) # timeout=timeout
                       
                        # Променяне на датата на файла според датата на качване в Youtube
                        dt = datetime.strptime(video['upload_date'], '%Y%m%d')
                        unix_time = datetime.timestamp(dt)
                       
                        if os.path.exists(pattern): # още една проверка за всеки случай
                            os.utime(f'{video["filename"]}.mkv', (unix_time, unix_time))
                           
                        # Изтриване на свалените файлове, ако youtube-dl не ги е изтрил
                        dled_audio = f'*{video["video_id"]}.{video["audio_min"].ext}'
                        dled_video = f'*{video["video_id"]}.{video["video_min"].ext}'
                       
                        if os.path.exists(dled_audio):
                            os.remove(dled_audio)
                       
                        if os.path.exists(dled_video):
                            os.remove(dled_video)
                       
                        print(f'\n')

                        time.sleep(2) # Това по принцип не е необходимо
                       
                    except sp.CalledProcessError:
                       
                        if proc.returncode < 0:
                            sys.exit(f'Subprocess stoped by a signal!')
                        else:
                            continue
                       

        os.remove('oti2')

        for msg in msgs:
            print(msg)
           
        time.sleep(30) # чака секунди, преди да провери отново oti
        msgs = []
       
    except KeyboardInterrupt:
        print(f'\nKeyboard interrupt! Terminated by the user!\n')
        sys.exit()
« Последна редакция: Apr 05, 2020, 13:40 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
bash срипт за местене на файлове
Общ форум
nov_chovek 3 2089 Последна публикация Oct 27, 2009, 16:17
от radoulov
Bash - взимане на няколко реда от средата на текст файл
Общ форум
PhrozenCrew 7 2128 Последна публикация Dec 04, 2009, 15:35
от radoulov
bash проблемче
Общ форум
asp 3 2111 Последна публикация Jun 21, 2010, 19:13
от asp
Питанка за bash скрипт
Общ форум
p1k0 9 2706 Последна публикация Sep 05, 2010, 02:47
от neter
bash + php
Общ форум
mrowcp 5 2153 Последна публикация Sep 06, 2010, 17:23
от neter