Примечание: экспериментировал на видосах, скорее всего, полученном яфиром с ютуба. На другом не сработало (не нашелся playlist).
Спасибо сотрудникам StackOverflow.com и Товарищам, которые там тусуются за то, что столкнулись с теми же вопросами, нашли на них ответы и поделились последними.
Используемые пакеты и утилиты: firefox, ex, ffmpeg.
Скачивание списка воспроизведения
Это очень просто: нужно найти в сетевом логе запрос списка воспроизведения. И скачать его.
Алгоритм действий следующий (в firefox).
- На странице яфира, на которой воспроизводится желаемый видосик, открываем developer tools.
- Переходим на вкладку Network.
- Выключаем фильтрацию по типу media (установкой all в списке доступных типов документов).
- Дальше - маневр: обновляем страницу.
- Смотрим на качество (шестеренка в окне видео). Если нужное (максимальное?), все нормально. Иначе - выбираем нужное.
- В поле фильтра запросов вводим тип списка воспроизведения: m3u8.
- Дальше - как видно на картинке - правый щелк по списку воспроизведения (может быть несколько, нужно выбрать тот, у которого нужное разрешение - его видно в URL при наведении на строку в колонке File сетевого лога).
- Copy > Copy URL (см. Картинку ниже).
- Теперь в буфере сидит ссылка на список воспроизведения. Открываем новую вкладку.
- В адресной строке новой вкладки делаем правый щелк, выбираем Paste & Go.
- Браузер покажет окно сохранения файла. Сохраняем в “какую-то-директорию” (у меня, для примера: ~/Downloads/streadmp/).
- Я еще переименовал файл, чтобы проще стало разбираться и он стал ~/Downloads/streadmp/pl (PLaylist).
Отлично, playlist скачан, можно качать и собирать фрагменты.
Преобразование playlist-а в список входных URL-ов
Я прекрасно понимаю, что действия, описанные ниже элементарно скриптуются (и я даже сделаю это и опубликую на гитхабе… хотя не, забанят…), но мне нужно было срочно сделать дамп алгоритма. При наличии последнего, написать скрипт не составит труда (а если его еще в компаньон оформить и браузерное расширение создать, то вообще красота получится). Поэтому ниже - тупо действия по конверсии, которые нужно сделать, но не оформленные в скрипт, а перечисленные. Для скриптинга можно использовать все, что работает с текстом: ed, ex, sed, awk.
Итак, мой алгоритм - для ex.
- Открываем эмулятор терминала (куда же без него?): любой
- Переходим в директорию, где будет производиться работа и куда уже сохранен playlist. В моем примере - команда: cd ~/Downloads/streadmp/
- Теперь открываем файл списка воспроизведения: ex pl
- Удаляем все системные теги M3U: 1,$g/^#/d
- Супер, меняем secure-протокол на обычный: 1,$s/^https:/http:
- Для ffmpeg нужно пометить, что это - файлы; за одно, поместим их в кавычки: 1,$s/^/file ‘
- Теперь закрывающие кавычки: 1,$s/$/’
- Сохраняемся, выходим: wq
Пример файла, который должен был получиться - далее.
file 'http://ext-strm-kivretn14.strm.yandex.net/vh-youtube-converted/vod-content/2277395201434660047_169_720p0.ts?lid=1514&no_cache=1&vsid=f71702081381f4195004d69dfd91f89839b1c675e411xWEBx3481x1585849614'
file 'http://ext-strm-kivretn14.strm.yandex.net/vh-youtube-converted/vod-content/2277395201434660047_169_720p1.ts?lid=1514&no_cache=1&vsid=f71702081381f4195004d69dfd91f89839b1c675e411xWEBx3481x1585849614'
file 'http://ext-strm-kivretn14.strm.yandex.net/vh-youtube-converted/vod-content/2277395201434660047_169_720p2.ts?lid=1514&no_cache=1&vsid=f71702081381f4195004d69dfd91f89839b1c675e411xWEBx3481x1585849614'
file 'http://ext-strm-kivretn14.strm.yandex.net/vh-youtube-converted/vod-content/2277395201434660047_169_720p3.ts?lid=1514&no_cache=1&vsid=f71702081381f4195004d69dfd91f89839b1c675e411xWEBx3481x1585849614'
file 'http://ext-strm-kivretn14.strm.yandex.net/vh-youtube-converted/vod-content/2277395201434660047_169_720p4.ts?lid=1514&no_cache=1&vsid=f71702081381f4195004d69dfd91f89839b1c675e411xWEBx3481x1585849614'
И так далее, таких строк на 5-минутное видео - 30. На час будет больше трех с половиной сотен.
Сборка и конвертация
Собственно, и сборку, и конвертацию за нас сделает ffmpeg. Одна команда и результат в файле allk.mkv.
ffmpeg -f concat -safe 0 -protocol_whitelist file,http,tcp -r 30 -i pl -c copy allk.mkv
Работает примерно с пятой скоростью (то есть, в пять раз быстрее, чем идет видео), что, кстати, чмырит по производительность Video Download Helper, который качает со скоростями примерно около ¼.