Skip to content

Instantly share code, notes, and snippets.

@grwlf
Last active October 21, 2023 20:04
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save grwlf/e1876f5d78cb6e66791809771d7bf36b to your computer and use it in GitHub Desktop.
Save grwlf/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"
@mark99i
Copy link

mark99i commented Jan 20, 2020

работает...
ffmpeg -i $link -c copy output2.mp3
не работает, заикается. если выставить -loglevel debug, то будут ошибки

[mpegts @ 0x559a3140a940] Packet had TEI flag set; marking as corrupt
    Last message repeated 2 times
[mpegts @ 0x559a3140a940] Continuity check failed for pid 7493 expected 1 got 13
[mpegts @ 0x559a3140a940] Packet had TEI flag set; marking as corrupt
    Last message repeated 1 times

причем нормально без ошибок и заиканий скачивает старая версия
ffmpeg version N-59742-gd9481dc built on Jan 9 2014 22:01:53 with gcc 4.8.2 (GCC).

@mark99i
Copy link

mark99i commented Jan 21, 2020

после создания тикета на трекере ffmpeg, оказывается это баг ffmpeg и всю эту простыню можно заменить простым
ffmpeg -http_persistent false -i $link -c copy output.mp3
по желанию выставить битрейт
ffmpeg -http_persistent false -i $link -c copy -b:a 320k output.mp3

@homus32
Copy link

homus32 commented Dec 24, 2020

ffmpeg -http_persistent false -i $link -c copy output.mp3
@mark99i
ну уж слишком долго грузится у меня музыка....

@mark99i
Copy link

mark99i commented Dec 24, 2020

ffmpeg -http_persistent false -i $link -c copy output.mp3
@mark99i
ну уж слишком долго грузится у меня музыка....
@homus32

Попробуйте сменить версию ffmpeg, у меня качает где-то 10-30мбит/с

@homus32
Copy link

homus32 commented Dec 27, 2020

ffmpeg -http_persistent false -i $link -c copy output.mp3
@mark99i
ну уж слишком долго грузится у меня музыка....
@homus32

Попробуйте сменить версию ffmpeg, у меня качает где-то 10-30мбит/с

Я уже попробывал на других ссылках - там очень быстро, а на моей ссылке - очень плохо грузит

Попробуйте:
https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC

Команда полностью:
ffmpeg -http_persistent false -i "https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC" -c copy ipanema.mp3

Через расширение на браузер SaveFrom скачивается быстро, а через ffmpeg долго.... Подозрение не на сервера ВК а на ffmpeg

Скачивается со скорость 512 байт в секунду

@mark99i
Copy link

mark99i commented Dec 27, 2020

ffmpeg -http_persistent false -i $link -c copy output.mp3
@mark99i
ну уж слишком долго грузится у меня музыка....
@homus32

Попробуйте сменить версию ffmpeg, у меня качает где-то 10-30мбит/с

Я уже попробывал на других ссылках - там очень быстро, а на моей ссылке - очень плохо грузит

Попробуйте:
https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC

Команда полностью:
ffmpeg -http_persistent false -i "https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC" -c copy ipanema.mp3

Через расширение на браузер SaveFrom скачивается быстро, а через ffmpeg долго.... Подозрение не на сервера ВК а на ffmpeg

Скачивается со скорость 512 байт в секунду

Попробовал вашу ссылку, версией ffmpeg-2020-02-27 скачивается 6мбит/с, а по времени за 10 секунд примерно. Возможно у вас с интернетом конкретно до этого сервера что-то не так, savefrom ведь со своих серверов качает скорее всего.

@mark99i
Copy link

mark99i commented Dec 28, 2020

ffmpeg -http_persistent false -i $link -c copy output.mp3
@mark99i
ну уж слишком долго грузится у меня музыка....
@homus32

Попробуйте сменить версию ffmpeg, у меня качает где-то 10-30мбит/с

Я уже попробывал на других ссылках - там очень быстро, а на моей ссылке - очень плохо грузит

Попробуйте:
https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC

Команда полностью:
ffmpeg -http_persistent false -i "https://psv4.vkuseraudio.net/audio/ee/3t1Q1RCTNLLwtLw1RYfxY35HZsJ7ly0G82cAug/89MzAyMjE_PTIz/5bRn5dbVBBXGdQOGo/index.m3u8?extra=lAcshhqU3002_E4Q-jj9yF_Tw4s3KITcoaNwgzodovwof20NtQ8Ein7ffqADVUt0ZV7T2pl_BSABQBqHFHAW68nGR61vKf6LobkkX2hDR-z6ga3rEQ-uNFHBC1Z3DTmB8imheomqiOoLL3-X1H9K_XeauNmC" -c copy ipanema.mp3

Через расширение на браузер SaveFrom скачивается быстро, а через ffmpeg долго.... Подозрение не на сервера ВК а на ffmpeg

Скачивается со скорость 512 байт в секунду

и да, советую удалить savefrom
https://habr.com/ru/company/yandex/blog/534586/

@ShadowOfPhantom
Copy link

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

@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