web-dev-qa-db-fra.com

Comment utilisez-vous youtube-dl pour télécharger des flux en direct (en direct)?

Je me demandais simplement si c'était possible ou non. Lorsque je copie l'URL de la vidéo sur YouTube-dl, il crache

[https @ 0x7fc351416080] inflate return value: -3, incorrect header check
Last message repeated 15 times

Après cela, il crache quelques lignes de texte rouge qui ne semblent pas vouloir être copiés correctement. J'ai donc pris un extrait.

Picture

Est-ce que quelqu'un sait si c'est possible?

28
user2824852

Je vais utiliser cet événement en direct comme exemple:

https://www.youtube.com/watch?v=6aXR-SL5L2o

Commencez par lister les formats de la vidéo:

$  ~ youtube-dl --list-formats https://www.youtube.com/watch\?v\=6aXR-SL5L2o
[youtube] 6aXR-SL5L2o: Downloading webpage
[youtube] 6aXR-SL5L2o: Downloading video info webpage
[youtube] 6aXR-SL5L2o: Extracting video information
[youtube] 6aXR-SL5L2o: Downloading formats manifest
[youtube] 6aXR-SL5L2o: Downloading MPD manifest
[info] Available formats for 6aXR-SL5L2o:
format code  extension  resolution note
91           mp4        144p       HLS , h264, aac  @ 48k
92           mp4        240p       HLS , h264, aac  @ 48k
93           mp4        360p       HLS , h264, aac  @128k
94           mp4        480p       HLS , h264, aac  @128k
95           mp4        720p       HLS , h264, aac  @256k (best)

Choisissez le format que vous souhaitez télécharger, puis récupérez l'URL HLS m3u8 de la vidéo dans le manifeste. Je vais utiliser 95 mp4 720p HLS , h264, aac @256k pour cet exemple:

➜  ~ youtube-dl -f 95 -g https://www.youtube.com/watch\?v\=6aXR-SL5L2o
https://manifest.googlevideo.com/api/manifest/hls_playlist/id/6aXR-SL5L2o.1/itag/95/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/cmbypass/yes/goi/160/sgoap/itag%3D140/sgovp/itag%3D136/hls_chunk_Host/r16---sn-ab5l6ne7.googlevideo.com/gcr/us/playlist_type/DVR/mm/32/mn/sn-ab5l6ne7/ms/lv/mv/u/pl/17/dover/3/fexp/9416126,9416891,9419451,9422596,9423554,9427790,9428193,9428398,9428974,9429011,9431012,9431164,9432683,9433096,9433946,9434343,9434833,9434847,9435186,9435741/upn/UNF1TiBtavY/sver/3/mt/1462544320/ip/64.125.177.124/ipbits/0/expire/1462565936/sparams/ip,ipbits,expire,id,itag,source,requiressl,ratebypass,live,cmbypass,goi,sgoap,sgovp,hls_chunk_Host,gcr,playlist_type,mm,mn,ms,mv,pl/signature/67EC57CB964D9D944DE2E1AB40F0E496DA2C73B4.8FBEF1974DF9DB1E614B9C96BA0FF8E52076B04F/key/dg_yt0/playlist/index.m3u8

Maintenant que vous avez la liste de lecture HLS, vous pouvez ouvrir cette URL dans VLC et la sauvegarder en utilisant "Enregistrer", ou écrire une petite commande ffmpeg:

ffmpeg -i \
https://manifest.googlevideo.com/api/manifest/hls_playlist/id/6aXR-SL5L2o.1/itag/95/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/cmbypass/yes/goi/160/sgoap/itag%3D140/sgovp/itag%3D136/hls_chunk_Host/r16---sn-ab5l6ne7.googlevideo.com/gcr/us/playlist_type/DVR/mm/32/mn/sn-ab5l6ne7/ms/lv/mv/u/pl/17/dover/3/fexp/9416126,9416891,9419451,9422596,9423554,9427790,9428193,9428398,9428974,9429011,9431012,9431164,9432683,9433096,9433946,9434343,9434833,9434847,9435186,9435741/upn/UNF1TiBtavY/sver/3/mt/1462544320/ip/64.125.177.124/ipbits/0/expire/1462565936/sparams/ip,ipbits,expire,id,itag,source,requiressl,ratebypass,live,cmbypass,goi,sgoap,sgovp,hls_chunk_Host,gcr,playlist_type,mm,mn,ms,mv,pl/signature/67EC57CB964D9D944DE2E1AB40F0E496DA2C73B4.8FBEF1974DF9DB1E614B9C96BA0FF8E52076B04F/key/dg_yt0/playlist/index.m3u8 \
-c copy output.ts
48
JAL

Il n'est pas nécessaire de passer quoi que ce soit à ffmpeg vous pouvez simplement saisir le format souhaité. Dans cet exemple, il s'agissait du format "95".

Donc, une fois que vous savez que c'est le 95, vous tapez simplement:

youtube-dl -f 95  https://www.youtube.com/watch\?v\=6aXR-SL5L2o

c'est-à-dire:

youtube-dl -f <format number> <url>

Il commencera à générer sur le répertoire de travail un <somename>.<probably mp4>.part qui est le fichier partiellement téléchargé, laissez-le aller et appuyez simplement sur <Ctrl-C> pour arrêter la capture.

Le fichier sera toujours nommé <something>.part, renommez-le <whatever>.mp4 et le voilà ...

Le code ffmpeg:

ffmpeg -i $(youtube-dl -f <format number> -g <url>) -copy <file_name>.ts

a également fonctionné pour moi, mais le son et la vidéo ne sont plus synchronisés, avec seulement youtube-dl semblait donner un meilleur résultat bien qu'il utilise aussi ffmpeg.

L'inconvénient de cette approche est que vous ne pouvez pas regarder la vidéo pendant le téléchargement. Vous pouvez également ouvrir un autre fichier FF ou Chrome, mais il semble que mplayer ne puisse pas traiter la sortie vidéo tant que youtube-dl/ffmpeg sont en cours d'exécution.

12
Andrés Cancer

Vous pouvez aussi taper ceci:

URL=https://www.youtube.com/watch?v=6aXR-SL5L2o
youtube-dl -f 95 --hls-prefer-native $URL

Pour certains autres sites Web avec du contenu en streaming m3u où cela ne fonctionne pas, vous pouvez essayer quelque chose comme ceci:

$ youtube-dl -F https://www.arte.tv/fr/videos/078132-001-A/cosmos-une-odyssee-a-travers-l-univers/ | grep m3u
HLS_XQ_2     m3u8       1280x720   VA-STA, Allemand 2200k 
HLS_XQ_1     m3u8       1280x720   VF-STF, Français 2200k 
$ youtube-dl -gf HLS_XQ_1 --get-filename https://www.arte.tv/fr/videos/078132-001-A/cosmos-une-odyssee-a-travers-l-univers/
https://arteptweb-vh.akamaihd.net/i/am/ptweb/078000/078100/078132-001-A_0_VF-STF_AMM-PTWEB_XQ.1AhsDgVG20.smil/master.m3u8
Cosmos_une_odyssee_a_travers_l_univers__HLS_XQ_1__078132-001-A.m3u8
$ youtube-dl -F https://arteptweb-vh.akamaihd.net/i/am/ptweb/078000/078100/078132-001-A_0_VF-STF_AMM-PTWEB_XQ.1AhsDgVG20.smil/master.m3u8
[generic] master: Requesting header
[generic] master: Downloading webpage
[generic] master: Downloading m3u8 information
[info] Available formats for master:
format code  extension  resolution note
61           mp4        audio only   61k , mp4a.40.2
419          mp4        384x216     419k , avc1.66.30, mp4a.40.2
923          mp4        640x360     923k , avc1.77.30, mp4a.40.2
1737         mp4        720x406    1737k , avc1.77.30, mp4a.40.2
2521         mp4        1280x720   2521k , avc1.77.30, mp4a.40.2 (best)
$ youtube-dl --hls-prefer-native -f 1737 https://arteptweb-vh.akamaihd.net/i/am/ptweb/078000/078100/078132-001-A_0_VF-STF_AMM-PTWEB_XQ.1AhsDgVG20.smil/master.m3u8 -o Cosmos_une_odyssee_a_travers_l_univers__HLS_XQ_1__078132-001-A.mp4
[generic] master: Requesting header
[generic] master: Downloading webpage
[generic] master: Downloading m3u8 information
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 257
[download] Destination: Cosmos_une_odyssee_a_travers_l_univers__HLS_XQ_1__078132-001-A.mp4
[download]   0.9% of ~731.27MiB at 624.95KiB/s ETA 13:13
....

BTW: j'ai ajouté --hls-prefer-native dans mon ~/.config/youtube-dl.conf donc je n'ai pas à le taper à chaque fois :)

0
SebMa