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.
Est-ce que quelqu'un sait si c'est possible?
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
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.
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 :)