Skip to content

Instantly share code, notes, and snippets.

@sergei-mironov
Last active October 21, 2023 20:04
Show Gist options
  • Save sergei-mironov/e1876f5d78cb6e66791809771d7bf36b to your computer and use it in GitHub Desktop.
Save sergei-mironov/e1876f5d78cb6e66791809771d7bf36b to your computer and use it in GitHub Desktop.
vkontakte_m3u8_downloader.sh
#!/bin/sh
# VKontakte *m3u8 downloader
# Worked at the time of writing
mkdir /tmp/m3u8
set -e -x
cd /tmp/m3u8
rm *
# Download m3u8.
url=$1
urldir=`dirname $url`
wget $url -O index.m3u8
# Download first key into 'key.pub'. We expect it is the only key used.
keyurl=`sed -n 's@.*\(https.*key.pub\).*@\1@ p' index.m3u8 | head -n 1`
wget $keyurl
# Replace http urls with local file names
# Download ts segments
cat index.m3u8 | \
sed 's@"https.*pub?.*"@key.pub@g' | \
sed 's@ts?.*@ts@g' >index_local.m3u8
for line in `cat index_local.m3u8 | grep -v '^#'` ; do
wget `dirname $url`/$line
done
# Concat and decrypt ts-segments with ffmpeg, which understands local filesystem paths
ffmpeg -allowed_extensions 'ALL' -protocol_whitelist 'crypto,file' -i index_local.m3u8 -c copy out.ts
# Go grab the output
echo "`pwd`/out.ts"
@homus32
Copy link

homus32 commented Oct 1, 2021

Ребят, есть какой-нибудь апдейт? Реально качает очень медленно, похоже любая версия ffmpeg :)

да оно везде так. Вк ограничевает скорость.

@vladislav805
Copy link

vladislav805 commented Oct 6, 2021

Не вижу ограничения скорости, 14 МБ (6.5 минут) качается за 3.5 секунды

real	0m3.583s
user	0m0.253s
sys	0m0.047s

@homus32, спасибо за гист!

@evil26r
Copy link

evil26r commented Dec 2, 2021

Получилось сделать без ffmpg, уже работает в тг боте @MusicRightBot

@mark99i
Copy link

mark99i commented Dec 2, 2021

@evil26r а можно детали реализации)

@evil26r
Copy link

evil26r commented Dec 2, 2021

@mark99i алгоритм примерно следующий:

  1. Получить все .ts из m3u8
  2. вычлинить все байты из пейлоадов каждой части(part) .ts (в каждом part'е 8 байт заголовков)
  3. склеенные байты пейлоада и будет mp3

работает тоже медленно, но хотя бы все работает в памяти без io

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment