Я не люблю дивитись фільми в онлайні на пога

Мені не подобається ідея дивитись фільми в онайлні з поганим інтернет з'єднанням по причині лагів. Історія така, що я знайшов більш менш нормальний сайт з фільмами в українському дубляжі. Дослідив як працює плеєр і написав простий скрипт для завантаження відео.

Для порівнянння звичайний фільм з ДВД якістю важить 1.5Гіб на торрентах, а тут 500Мб і якість норм. Це влаштовує!

Алгоритм сервісу складається з декількох етапів: iframe лінка, плеєр всередині, кілька m3u файлів-плейлистів з різними параметрами якості компрессії відео і фінальний плейлист зі списком фрагментів відеофайлів.
Спочатку я робив все власноруч і потім за допомогою wget зробив простий bash loop який вантажив файли. І клеїв це добро через інший скрипт. Трохи згодом дізнався про функцію в ffmpeg по завантажені плейлиста і склейці відео автоматично! Простіше простого!

Наша задача заключається у пошуку кінцевого лінка на завантаження фрагментів. По-перше, ми маємо дістати URL атрибут з тегу IFRAME. Це можна досягти за допомогою команд hxnormalize, hxselect та hxwls з пакету html-xml-utils.

$ sudo apt install html-xml-utils

Блок div з iframe має наступний вигляд:

<div class="video-player-wrapper">
    <iframe id="video-player" width="720" height="400" src="https://somewhere.web/1234" frameborder="0" allowfullscreen></iframe>
</div>

створимо функцію щоб дістати посилання:

get_iframe_video_url() {
    echo $1 |
    wget -O- -i- --no-verbose | 
    hxnormalize -x | 
    hxselect -i "div.video-player-wrapper iframe" |
    hxwls
}

Опісля ми маємо дістати URI плейлиста з сегментами. Він у js скрипті.

get_video_uri() {
    echo $1 |
    wget -O- -i- --no-verbose | 
    grep -E -o 'file:"(.*)m3u8' | 
    sed -n 's/file:"//p' |
    sed -n 's/index.m3u8//p'
}

і останнє це склеїти всі сегменти за допомогою ffmpeg:

PLAYLIST="$VIDEO_URI/$QUALITY/index.m3u8"
ffmpeg -i $PLAYLIST -c copy -bsf:a aac_adtstoasc "$DIRECTORY.mp4" -y

І'мя фінального файлу це остання частина посилання без розширення.
Приклад: 
https://somewhere-onilne.web/movie/best-movie.html becomes best-movie.

get_directory_from_url() {
    echo $1 | sed 's#.*/##'
}
DIRECTORY=$(get_directory_from_url $URL);
DIRECTORY="${DIRECTORY%.*}"

А ось перша ревізія скрипту і функція для створення списків на завантаження через wget і склейку через ffmpeg:

create_segments_file() {
    if test -f "$FILE_FFMPEG_LIST"; then
       rm $FILE_FFMPEG_LIST
    fi
    if test -f "$FILE_FFMPEG_LIST"; then
       rm $FILE_WGET_LIST
    fi
    # download movie playlist
    wget $VIDEO_URI/$QUALITY/index.m3u8 --output-document=pls.file --no-verbose
    LIST=$(grep segment pls.file)
    rm pls.file
    for f in $LIST;
    do
        echo "file '$DIRECTORY/$f'" >> $FILE_FFMPEG_LIST
        echo "$VIDEO_URI$QUALITY/$f" >> $FILE_WGET_LIST
    done
    echo "Saving files done."
}

Тут gist: https://gist.github.com/onesixromcom/649a2b7ff95a78a5125b3994fbaec7aa

Коментувати

Вміст цього поля є приватним і не буде доступний широкому загалу.
  • Не дозволено жодних HTML теґів.
 ooooooooo.    ooo        ooooo              ooooooo  ooooo    .o         .o   
`888 `Y88. `88. .888' `8888 d8' o888 .d88
888 .d88' 888b d'888 oo.ooooo. Y888..8P 888 .d'888
888ooo88P' 8 Y88. .P 888 888' `88b `8888' 888 .d' 888
888 8 `888' 888 888 888 .8PY888. 888 88ooo888oo
888 8 Y 888 888 888 d8' `888b 888 888
o888o o8o o888o 888bod8P' o888o o88888o o888o o888o
888
o888o
Уведіть код, зображений у стилі Ascii-Арт.