1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Сграбить видеотрансляцию сайта МатчТВ. Linux only.

Тема в разделе "Софт", создана пользователем 027, 17.01.21.

  1. 027

    027 Активный участник

    9.037
    2.880
    Накостылял тут для себя грабилку. Надо кому?

    ЛИКБЕЗ
    ------

    Интернет-трансляции передаются браузеру чанками (кусками, chunk). Скрипт плеера отслеживает обновления плейлиста и скачивает очередной чанк для показа в браузере.
    Утилита youtube-dl (в отличие от сервисов типа savefrom.net) умеет собирать чанки, а не только работать с полными файлами для скачивания. Она прекрасна.
    Однако с трансляцией Матч ТВ: смотреть игры в прямом эфире бесплатно | Прямые спортивные трансляции онлайн не справляется, несмотря на присутствие в списке заявленных. Автор на просьбы забил и разговаривать не хочет.

    Пришлось накостылить собственную грабилку. Поскольку я в этих ваших интернет-протоколах ни в зуб ногой, воспользовался браузером типа Chrome (у него кэш хранится в виде отдельных файлов, а не запихнут в базу, как у файрфокса).


    ПРИНЦИП РАБОТЫ
    --------------

    В бесконечном цикле запускается утилита inotifywait — следилка за записью файлов в каталоге кэша браузера.
    Если она обнаруживает достойного кандидата, копирует этот чанк во временный каталог.
    Когда пользователь нажмет Ctrl+C в консоли, где запущен скрипт, цикл захвата прерывается, а из захваченных кусков собирается полное видео.


    КАК ГРАБИТЬ
    -----------

    Настроить пути в скрипте.
    Запустить трансляцию в хромиуме (хроме, хромоклонах).
    Выбрать в настройках желаемое качество видео.
    Запустить скрипт.
    Нажать Ctrl+C для остановки захвата чанков.
    Дождаться сборки видеофайла.
    ???
    PROFIT!


    НАСТРОЙКИ
    ---------

    TARGET_DIR — куда писать финальное видео.
    CACHE_PATH — путь к кэшу хрома на вашем компе. Для убунты, стандартно, $HOME/.cache/chromium/Default/Cache


    ПРИМЕЧАНИЯ
    ----------

    Нажатие Ctrl+C перехватывается командой trap. Завершается не весь скрипт, а бесконечный цикл захвата чанков. После этого из чанков собирается полное видео, а временныйе файлы удаляются. Если долго нет реакции (больше минуты) нажмите еще раз (но вроде этот глюк я победил).
    Код:
    #!/bin/bash
    
    # настройки
    TARGET_DIR="/mnt/tirobaitneg/Загрузки/sport"
    CACHE_PATH="/mnt/tirobaitneg/.home/.cache/chromium/Default/Cache"
    
    
    # подготовительные операции
    TEMP_DIR=$TARGET_DIR/video-grabber
    ACCUM_DIR=$TARGET_DIR/video-grabber/chunks
    CHUNK_LIST=$TARGET_DIR/video-grabber/list.txt
    # удаляем старый (потерянный) временный каталог
    if [[ -d $TEMP_DIR ]]; then
      rm -rf $TEMP_DIR
    fi
    # создаем структуру временных каталогов
    mkdir -p $ACCUM_DIR
    
    
    # цикл захвата чанков из кэша хромиума, прерываем по Ctrl+C
    STOP_CAPTURE=
    trap "STOP_CAPTURE=1" SIGINT
    while true; do
    
      # ловим создание файла в кэше
      # FNAME=`inotifywait -q -e create --format %f $CACHE_PATH`
    
      # следим за ним, когда он закроется на запись
      FNAME=`inotifywait -q -e close_write --format %f $CACHE_PATH`
    
      # отбрасываем заведомо неподходящие по размеру файлы
      FILE="$CACHE_PATH/$FNAME"
      FSIZE=`stat --format=%s $FILE`
    
      if [ "$FSIZE" -gt "300000" ]; then
        # копируем чанк в накопительную директорию
        cp -p --reflink=auto $FILE /$ACCUM_DIR/
        # печатаем инфо в консоль
        FSIZE=$(( FSIZE / 1024 ))
        echo "Чанк $FNAME, размер $FSIZE кБ"
      fi
      # проверяем команду завершения захвата
      if [ -n "$STOP_CAPTURE" ]; then
        echo
        echo "Остановка захвата чанков"
        break
      fi
    done
    
    
    # создаем список захваченных чанков,упорядоченных по времени создания
    i=1
    STORE_IFS=$IFS
    IFS=$'\n'
    TEMP_LIST=`ls -1tr $ACCUM_DIR`
    IFS=$STORE_IFS
    
    echo "Создаю список чанков"
    for TEMP_NAME in $TEMP_LIST; do
      FILE="$ACCUM_DIR/$TEMP_NAME"
      # проверяем, что это потоковый чанк
      MINFO=`mediainfo --Inform="General;%Format%" $FILE`
      if [ -n "$MINFO" ]; then
        echo "file $ACCUM_DIR/$TEMP_NAME" >> $CHUNK_LIST
      fi
    done
    
    # склеиваем захваченные чанки
    echo "Собираю видео в файл $TARGET_DIR/video.ts"
    ffmpeg -hide_banner -loglevel 8 -y -f concat -safe 0 -i $CHUNK_LIST -c copy $TARGET_DIR/video.ts
    
    # удаляем временный каталог
    rm -rf $TEMP_DIR
    
    

    Максимальное качество 1080p 25fps. Жмакать тут:

    Снимок экрана от 2021-01-17 01-21-55.png

    Элементы управления на записи не появляются. Можно выключить и снова включить звук, на записи не отразится.
     
    Последнее редактирование: 17.01.21
    AlexLM нравится это.
  2. Deceiver

    Deceiver Активный участник

    24.011
    7.091
    под винду бы чего похожего ...
     
  3. kajuga

    kajuga Активный участник

    8.679
    3.951
    под убунту есть замечательная SimpleScreenRecorder - грабит как весь экран, так выделенную область, вкладку
    + настройки сжатия, частоты кадров, кодеки и все такое, удобная
    2021-01-1709:04.png
     
  4. 027

    027 Активный участник

    9.037
    2.880
    Вот только жрет, как не в себя. У меня проц дохловат для этой цели. Я, правда не эту пробовал, а OBS Studio. Даже 720р записывается с низким fps, на глаз меньше 20.

    Тогда я вспомнил, что много лет назад была какая-то прожка, которая сохраняла мультимедию из кэша файрфокса. Но у нынешнего файлфокса кэш запихнут в SQLite. Тогда я глянул в кэш хромиума, увидел там чанки в формате TS, убедился, что ffmpeg их отлично склеивает, хоть и ругается сильно, а наговнокодить скриптик уже дело техники.

    Звиняте, дядьку, к виндам уже лет семь не прикасался.

    P.S. @kajuga, глянул ваш ролик — та же фигня с низким fps. Я такое не могу смотреть, глаза начинают болеть сразу. Я и честные 25 fps на спортивных динамических сценах с трудом перевариваю. Хоккей и баскетбол хуже всего, я там и на 50 fps рывки вижу, но хотя бы глаза не вытекают.

    Найти бы трансляцию Матч ТВ хотя бы 720i 25 fps, т.е. 50 полукадров в секунду... В интернетах пишут, что Матч был даже 60 fps на OttClub, но сейчас там только «Матч! Боец».
     
    Последнее редактирование: 18.01.21
  5. RubiN

    RubiN Активный участник

    6.629
    425
    Open Broadcaster Software, бесплатная, хочешь в файл пиши, хочешь в ютуп или твич транслируй