是否可以使用 youtube-dl 从.m3u8
流文件或其他直播格式下载视频?
当我将视频 URL 复制到 YouTube-dl 时,它会吐出:
[https @ 0x7fc351416080] inflate return value: -3, incorrect header check
Last message repeated 15 times
之后它吐出几行似乎不想正确复制的红色文本,所以我摘录了一个片段:
有谁知道这是否可能?
是否可以使用 youtube-dl 从.m3u8
流文件或其他直播格式下载视频?
当我将视频 URL 复制到 YouTube-dl 时,它会吐出:
[https @ 0x7fc351416080] inflate return value: -3, incorrect header check
Last message repeated 15 times
之后它吐出几行似乎不想正确复制的红色文本,所以我摘录了一个片段:
有谁知道这是否可能?
我将使用来自 NASA TV 的直播活动作为示例:
https://www.youtube.com/watch?v=21X5lGlDOfg
首先,列出视频的格式:
youtube-dl --list-formats https://www.youtube.com/watch\?v\=21X5lGlDOfg
[youtube] 21X5lGlDOfg: Downloading webpage
[youtube] 21X5lGlDOfg: Downloading m3u8 information
[youtube] 21X5lGlDOfg: Downloading MPD manifest
[info] Available formats for 21X5lGlDOfg:
format code extension resolution note
91 mp4 256x144 HLS 197k , avc1.42c00b, 30.0fps, mp4a.40.5@ 48k
92 mp4 426x240 HLS 338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k
93 mp4 640x360 HLS 829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k
94 mp4 854x480 HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
300 mp4 1280x720 3806k , avc1.4d4020, 60.0fps, mp4a.40.2 (best)
选择您要下载的格式,然后从清单中获取视频的 HLS m3u8 URL。我将94 mp4 854x480 HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
用于此示例:
youtube-dl -f 94 -g https://www.youtube.com/watch\?v\=21X5lGlDOfg
https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1592099895/ei/1y_lXuLOEsnXyQWYs4GABw/ip/81.190.155.248/id/21X5lGlDOfg.3/itag/94/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/goi/160/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D135/hls_chunk_host/r5---sn-h0auphxqp5-f5fs.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/8270/mh/N8/mm/44/mn/sn-h0auphxqp5-f5fs/ms/lva/mv/m/mvi/4/pl/16/dover/11/keepalive/yes/beids/9466586/mt/1592078245/disable_polymer/true/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,goi,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRgIhAM2dGSece2shUTgS73Qa3KseLqnf85ca_9u7Laz7IDfSAiEAj8KHw_9xXVS_PV3ODLlwDD-xfN6rSOcLVNBpxKgkRLI%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAJCO6kSwn7PivqMW7sZaiYFvrultXl6Qmu9wppjCvImzAiA7vkub9JaanJPGjmB4qhLVpHJOb9fZyhMEeh1EUCd-3Q%3D%3D/playlist/index.m3u8
请注意,链接可能不同,它包含过期时间戳,在本例中为 1592099895(约 6 小时)。
现在你有了 HLS 播放列表,你可以在 VLC 中打开这个 URL 并使用“记录”保存它,或者编写一个小的 ffmpeg 命令:
ffmpeg -i \
https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1592099895/ei/1y_lXuLOEsnXyQWYs4GABw/ip/81.190.155.248/id/21X5lGlDOfg.3/itag/94/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/goi/160/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D135/hls_chunk_host/r5---sn-h0auphxqp5-f5fs.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/8270/mh/N8/mm/44/mn/sn-h0auphxqp5-f5fs/ms/lva/mv/m/mvi/4/pl/16/dover/11/keepalive/yes/beids/9466586/mt/1592078245/disable_polymer/true/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,goi,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRgIhAM2dGSece2shUTgS73Qa3KseLqnf85ca_9u7Laz7IDfSAiEAj8KHw_9xXVS_PV3ODLlwDD-xfN6rSOcLVNBpxKgkRLI%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAJCO6kSwn7PivqMW7sZaiYFvrultXl6Qmu9wppjCvImzAiA7vkub9JaanJPGjmB4qhLVpHJOb9fZyhMEeh1EUCd-3Q%3D%3D/playlist/index.m3u8 \
-c copy output.ts
无需向ffmpeg
您传递任何内容,只需获取所需的格式即可,在此示例中,它是“95”格式。
因此,一旦您知道它是95,您只需输入:
youtube-dl -f 95 https://www.youtube.com/watch\?v\=6aXR-SL5L2o
也就是说:
youtube-dl -f <format number> <url>
它将开始在工作目录 a 上生成,<somename>.<probably mp4>.part
这是部分下载的文件,放开它,只需按下<Ctrl-C>
即可停止捕获。
该文件仍将被命名<something>.part
,将其重命名<whatever>.mp4
为...
ffmpeg
代码:
ffmpeg -i $(youtube-dl -f <format number> -g <url>) -copy <file_name>.ts
也为我工作,但声音和视频不同步,使用youtube-dl
似乎产生了更好的结果,虽然它也使用ffmpeg
.
这种方法的缺点是您在下载时无法观看视频,您可以打开另一个 FF 或 Chrome,但似乎mplayer
无法处理视频输出直到youtube-dl
/ffmpeg
正在运行。
某些带有 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
....
我编写了一个小脚本来下载实时 youtube 视频,您也可以将其用作单个命令。可以简单地调用它的脚本,
~/ytdl_lv.sh <URL> <output file name>
例如
~/ytdl_lv.sh https://www.youtube.com/watch?v=nX0sg1Gp-1 myfile.mp4
脚本如下所示,
#!/bin/bash
# ytdl_lv.sh
# Author Prashant
#
URL=$1
OUTNAME=$2
streamlink --hls-live-restart -o ${OUTNAME} ${URL} best
这里最好的是流质量,也可以是 144p(最差)、240p、360p、480p、720p(最好)
我把这个答案放在这里是因为我遇到了ERROR: VUhQ6zEky0o: YouTube said: Invalid parameters.
错误youtube-dl
并且它对我不起作用。还有其他人收到此错误消息吗?我的方法显然不是下载流,而是记录屏幕上显示的内容,但这就是重点。对于那些遇到问题的人来说,这是一种解决方法youtube-dl
。
这个问题是Google 搜索“linux download youtube live stream”的第一名,所以即使 youtube-dl 对我来说失败,我也会在这里回答。
我真的不在乎我使用什么工具。我只是想让它工作。
youtube-dl
对我来说失败了我尝试了#1 答案,但它失败了。示例直播链接:https ://www.youtube.com/watch?v=VUhQ6zEky0o 。我的尝试和失败消息:
$ youtube-dl --list-formats https://www.youtube.com/watch?v=VUhQ6zEky0o
[youtube] VUhQ6zEky0o: Downloading webpage
[youtube] VUhQ6zEky0o: Downloading video info webpage
ERROR: VUhQ6zEky0o: YouTube said: Invalid parameters.
同样,这是上面的错误:
错误:VUhQ6zEky0o:YouTube 说:参数无效。
我在直播时尝试了带有多个直播链接的 youtube-dl。这对他们中的任何一个都不起作用。我收到了上面的错误消息。
(这里是 OBS Studio 的一般安装和设置说明,包括配置视频和音频源以及进行屏幕录制和音频捕获)
所以,我使用了OBS Studio,它就像一个魅力!方法如下:
sudo apt install ffmpeg
sudo apt install v4l2loopback-dkms
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt update
sudo apt install obs-studio
home/USERNAME/Videos/OBS