четверг, 2 апреля 2020 г.

Скачивание некоторых видео с яндекс-эфира

Примечание: экспериментировал на видосах, скорее всего, полученном яфиром с ютуба. На другом не сработало (не нашелся playlist).

Спасибо сотрудникам StackOverflow.com и Товарищам, которые там тусуются за то, что столкнулись с теми же вопросами, нашли на них ответы и поделились последними.

Используемые пакеты и утилиты: firefox, ex, ffmpeg.

Скачивание списка воспроизведения

Это очень просто: нужно найти в сетевом логе запрос списка воспроизведения. И скачать его.

Алгоритм действий следующий (в firefox).
  1. На странице яфира, на которой воспроизводится желаемый видосик, открываем developer tools.
  2. Переходим на вкладку Network.
  3. Выключаем фильтрацию по типу media (установкой all в списке доступных типов документов).
  4. Дальше - маневр: обновляем страницу.
  5. Смотрим на качество (шестеренка в окне видео). Если нужное (максимальное?), все нормально. Иначе - выбираем нужное.
  6. В поле фильтра запросов вводим тип списка воспроизведения: m3u8.
  7. Дальше - как видно на картинке - правый щелк по списку воспроизведения (может быть несколько, нужно выбрать тот, у которого нужное разрешение - его видно в URL при наведении на строку в колонке File сетевого лога).
  8. Copy > Copy URL (см. Картинку ниже).
  9. Теперь в буфере сидит ссылка на список воспроизведения. Открываем новую вкладку.
  10. В адресной строке новой вкладки делаем правый щелк, выбираем Paste & Go.
  11. Браузер покажет окно сохранения файла. Сохраняем в “какую-то-директорию” (у меня, для примера: ~/Downloads/streadmp/).
  12. Я еще переименовал файл, чтобы проще стало разбираться и он стал ~/Downloads/streadmp/pl (PLaylist).

Отлично, playlist скачан, можно качать и собирать фрагменты.

Преобразование playlist-а в список входных URL-ов

Я прекрасно понимаю, что действия, описанные ниже элементарно скриптуются (и я даже сделаю это и опубликую на гитхабе… хотя не, забанят…), но мне нужно было срочно сделать дамп алгоритма. При наличии последнего, написать скрипт не составит труда (а если его еще в компаньон оформить и браузерное расширение создать, то вообще красота получится). Поэтому ниже - тупо действия по конверсии, которые нужно сделать, но не оформленные в скрипт, а перечисленные. Для скриптинга можно использовать все, что работает с текстом: ed, ex, sed, awk.

Итак, мой алгоритм - для ex.

  1. Открываем эмулятор терминала (куда же без него?): любой
  2. Переходим в директорию, где будет производиться работа и куда уже сохранен playlist. В моем примере - команда: cd ~/Downloads/streadmp/
  3. Теперь открываем файл списка воспроизведения: ex pl
  4. Удаляем все системные теги M3U: 1,$g/^#/d
  5. Супер, меняем secure-протокол на обычный: 1,$s/^https:/http:
  6. Для ffmpeg нужно пометить, что это - файлы; за одно, поместим их в кавычки: 1,$s/^/file ‘
  7. Теперь закрывающие кавычки: 1,$s/$/’
  8. Сохраняемся, выходим: 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, который качает со скоростями примерно около ¼.