你如何使用youtube-dl下载直播(现场直播)?

use*_*852 33 youtube youtube-dl youtube-livestreaming-api

只是想知道是否可能 - 当我将视频网址复制到YouTube-dl时,它会吐出来

[https @ 0x7fc351416080] inflate return value: -3, incorrect header check
Last message repeated 15 times
Run Code Online (Sandbox Code Playgroud)

在那之后,它吐出了几行似乎不想正确复制的红色文本,所以我拿了一个片段

图片

有谁知道这是否可能?

JAL*_*JAL 52

我将以此直播活动为例:

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

首先,列出视频的格式:

$  ~ 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)
Run Code Online (Sandbox Code Playgroud)

选择您要下载的格式,然后从清单中获取视频的HLS m3u8 URL.我将95 mp4 720p HLS , h264, aac @256k用于这个例子:

?  ~ 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
Run Code Online (Sandbox Code Playgroud)

现在,你有HLS播放列表,您可以在VLC打开这个网址,并使用"记录"保存它,或者写一个小的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
Run Code Online (Sandbox Code Playgroud)

  • 如果您选择了您喜欢的格式,而不是复制和粘贴,您可以使用'$()'(bash命令替换):`ffmpeg -i $(youtube-dl -f 22 -g https://www.youtube. com/watch \?v\= 6aXR-SL5L2o)-c copy omg1.ts` (7认同)
  • 也许您想在这里使用 NASA TV 的直播作为示例,因为过去 19 个月一直在不间断直播,因此链接将在很长一段时间内保持不变。 (4认同)

小智 14

没有必要传递任何东西ffmpeg你可以只获取所需的格式,在这个例子中,它是"95"格式.

所以一旦你知道它是95,你只需输入:

youtube-dl -f 95  https://www.youtube.com/watch\?v\=6aXR-SL5L2o
Run Code Online (Sandbox Code Playgroud)

也就是说:

youtube-dl -f <format number> <url>
Run Code Online (Sandbox Code Playgroud)

它将开始在工作目录上生成一个<somename>.<probably mp4>.part部分下载的文件,让它去,然后按下<Ctrl-C>以停止捕获.

该文件仍将被命名<something>.part,重命名<whatever>.mp4为... 它在那里...

ffmpeg代码:

ffmpeg -i $(youtube-dl -f <format number> -g <url>) -copy <file_name>.ts
Run Code Online (Sandbox Code Playgroud)

也适合我,但声音和视频不同步,使用youtube-dl似乎只会产生更好的结果,虽然它也使用ffmpeg.

这种方法的缺点是你在下载时无法观看视频,你可以打开另一个FF或Chrome,但似乎mplayer无法处理视频输出直到youtube-dl/ ffmpeg正在运行.


Seb*_*bMa 6

一些带有 m3u 流媒体的网站无法youtube-dl一步下载,您可以尝试这样的操作:

$ URL=https://www.arte.tv/fr/videos/078132-001-A/cosmos-une-odyssee-a-travers-l-univers/
$ youtube-dl -F $URL | grep m3u
HLS_XQ_2     m3u8       1280x720   VA-STA, Allemand 2200k 
HLS_XQ_1     m3u8       1280x720   VF-STF, Français 2200k 
$ CHOSEN_FORMAT=HLS_XQ_1
$ youtube-dl -F "$(youtube-dl -gf $CHOSEN_FORMAT)"
[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 "$(youtube-dl -gf $CHOSEN_FORMAT $URL)" -o "$(youtube-dl -f $CHOSEN_FORMAT --get-filename $URL)"
[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
....
Run Code Online (Sandbox Code Playgroud)

  • 命令 `youtube-dl --hls-prefer-native your_m3u8_file_url.m3u8` 似乎最适合我。它将视频直接下载为 mp4 格式。 (4认同)