LINUX.ORG.RU

Как работают regexp в yt-dlp?

 ,


0

2

Привет, ЛОР!

Я уже мозг сломал, почему оно не работает. Хочу скачать видео с ютуб-канала с коллекцией по плейлистам. Имена плейлистов на кириллице, содержат пробелы. Некоторые плейлисты надо исключить. Некоторые плейлисты могут иметь название на англ. и на кириллице и с пробелами. Если бы я мог писать регулярки с опорой на какой-то regex101 и yt-dlp работал бы ожидаемо, меня бы это устроило. Но оно не работает так, как я ожидаю.

Собсно вопрос в том, что я делаю не так, что регулярки не работают?

Для дебага залил некую (вроде под свободной лицензией) видюшку на свой канал, создал пачку разных плейлистов и пытаюсь разобраться как это работает.

Вот я показываю список плейлистов на канале, которые матчатся регулярке «testplaylist». По данным regex101 всё должно сматчится и хотя бы один плейлист с идентичным именем должен быть в выводе команды. Но у меня ничего не вывелось.

desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist=~testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
desktop:~$

Добавляю в фильтр отрицание ! всего условия матчинга и получаю результат. Т.е. как будто бы выражение валидное, но почему-то при инвертировании логики меняется и сама логика.

desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist!=~testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
тестовыйплейлист
тестовый плейлист
test playlist
testplaylist
desktop:~$

Все иные попытки запихать выражение в разные кавычки, слеши тоже не дают результата.

Доходит до смешного! Вот такое выражение с точным сравнением вывода и фильтра работает только в инвертированом виде. Тут мы не видим плейлиста с именем testplaylist

desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist!=testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
тестовыйплейлист
тестовый плейлист
test playlist
desktop:~$

Убираем отрицание и не видим ничего

deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist=testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
desktop:~$

Ну и напоследок весёлые факты из моего дебага — паттерн регулярки t.*

deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist~=t.*' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
test playlist
testplaylist
deskop:~$

Паттерн регулярки te.*

deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist~=te.*' https://www.youtube.com/@maxmuller8233/playlists --no-warning
deskop:~$

deskop:~$ python -V
Python 3.12.6
deskop:~$ ./bin/yt-dlp --version
2024.10.07
deskop:~$ bash --version
GNU bash, версия 5.2.26(1)-release (x86_64-redhat-linux-gnu)
★★★★