2016-05-05 1520 views
17

只是想知道如果這是可能的,或者不可─當我複製視頻網址到YouTube的-DL它吐出如何使用youtube-dl下載直播視頻(即現場直播)?

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

,它吐出的紅色文字的幾行之後,似乎並不想複製在適當的,所以我把一個片段

Picture

有誰知道這是可能的嗎?

回答

31

我將使用這個現場活動爲例:

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

首先,列出的視頻格式:

➜ youtube_live_test 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) 

選擇要下載的格式,從清單中獲取視頻的HLS m3u8 URL。我將使用95 mp4 720p HLS , h264, aac @256k這個例子:

➜ youtube_live_test 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 

現在,你有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 
+2

如果您選擇了您喜歡的格式,而不是複製並粘貼,您可以使用'$()'(bash命令替換):'ffmpeg -i $(youtube-dl -f 22 -g https:// www .youtube.com/watch \?v \ = 6aXR-SL5L2o)-c copy omg1.ts' – fbehrens

2

有沒有必要傳遞任何東西到ffmpeg你可以只抓取所需的格式,在這個例子中,它是「95」格式。

所以一旦你知道那是95,你只需要輸入:

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

也就是說

它將開始在工作目錄生成一個..part這是部分下載的文件,讓它去,只需按停止捕獲。

該文件仍然會。部分命名,重命名爲.MP4​​它就在那裏......

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

也爲我工作,但聲音和視頻成爲了不同步,儘管使用了ffmpeg,但只使用youtube-dl似乎會產生更好的結果。

這種方法的不足之處在於,您無法在下載時觀看視頻,還可以打開另一個FF或Chrome,但似乎mplayer無法處理de視頻輸出,直到youtube-dl/ffmpeg正在運行。