影片下載、轉檔筆記 ( Youtube 、 Twitch 、 TwitCasting 、 Twitter Spaces 音訊空間 、 ffmpeg )

本文記述下載 Youtube 、 Twitch 、 TwitCasting 、 Twitter Spaces 音訊空間,和影片轉檔的幾個常用工具和指令

延伸閱讀
關於監控自動下載請見這篇
[Docker] 直播監控、自動影片下載筆記 ( Youtube 、 Twitch 、 TwitCasting 、 Twitter Spaces 音訊空間)

下載: yt-dlp

官方站: https://github.com/yt-dlp/yt-dlp
下載點: https://github.com/yt-dlp/yt-dlp/releases/latest

yt-dlp依賴於ffmpeg執行,請同時安裝ffmpeg

yt-dlp分家自youtube-dl,它涵蓋youtube-dl的所有功能,並且有著更多的功能,更多的patch,更活躍的開發社群。 除了Youtube外它也支援很多其它影片站,包括niconico、twitch、twitcasting、twitter、facebook,這裡是完整清單。 此處是完整的說明書輸出檔名說明格式指定說明

列出所有影片格式

這條並不會執行下載,它會印出能下載的所有格式後結束 (如同此文首圖)

yt-dlp -F [url]

下載指定的影片格式

如果你要下載最高畫質的格式,不要傳入此參數,預設已是最高畫質!
此預設值為bestvideo*+bestaudio/best

有關於bestvideo+bestaudiobest的解釋
best: 最好的格式
bestvideo+bestaudio: 最好的影片格式,最好的音訊格式,並在下載完合併為一檔案

Youtube對於影像音訊合一檔案,最高只提供到720p畫質,再往上皆是分離格式。
也就是說以best最多只能在Youtube下載到720p影片!
這也是為什麼各個瀏覧器擴充、下載網站不會給你高於720p的影片。
影片合併時會產生額外的主機開銷,而瀏覧器中無法進行合併作業。

以下範例為「下載影像137格式、音訊251格式後合併檔案」

yt-dlp -f 137+251 [url]

帶入cookie下載,以下載需要登入才能瀏覧的影片

對於需要登入後才能瀏覧的影片,像是會員限定影片、Facebook私密社團影片等,yt-dlp支援傳入cookies file過驗證。

取得cookies file的方法
  • 安裝瀏覧器擴充功能,以匯出Netscape HTTP Cookie File
  • 瀏覧至Youtube網頁,登入你的帳號
  • 以擴充功能匯出youtube.com網域的所有cookie
  • 將匯出之cookie檔案重命名為cookies.txt
注意
此cookies file包含了你的Youtube登入授權
任何人只要取得這個檔案,即可由你的身份登入Youtube
務必妥善保管,把它當成你的帳號密碼看待
yt-dlp --cookies "cookies.txt" [url]

在影片檔嵌入描述和影片縮圖

yt-dlp --embed-thumbnail --embed-metadata [url]

輸出檔名範本

參數清單在此: https://github.com/yt-dlp/yt-dlp#output-template

yt-dlp -o "%(upload_date)s %(title)s (%(id)s).%(ext)s" [url]

使用aria2c下載器平行下載

下載點: https://github.com/aria2/aria2/releases/latest

串流處理過的影片會切成數個小段落傳輸,或是允許客戶端請求指定的檔案片段,這正好適合使用aria2c平行下載。
下方的範例使用16條連線平行下載,它幾乎可以吃到我300M的網速上限

yt-dlp --external-downloader aria2c --external-downloader-args "-j 16 -s 16 -x 16 -k 1M --retry-wait 10 --max-tries 10" [url]

下載並封裝為mp4、mkv格式

必需注意編碼是否能封進對應的封裝格式,否則請不要給此參數,yt-dlp會自動選出合適的

yt-dlp --merge-output-format mp4 [url]
yt-dlp --merge-output-format mkv [url]

不下載dash檔案

dash在Youtube是直播中提供的格式,是轉檔前的格式
你可以用這個參數以避開它,yt-dlp會在只有dash格式時報錯退出

yt-dlp --youtube-skip-dash-manifes [url]

下載開源格式

這裡的格式是指Google自己的vp8、vp9格式webm。它的壓縮率(通常)較mp4好,但要等youtube轉檔完才有。 建議搭配merge-output-format封裝為mkv,這絕對無法封裝進mp4

yt-dlp --prefer-free-formats [url]

直播由起始下載

實際用上這個參數後我遇到了問題
現階段看來還不穩定,要「從頭錄直播」請先用回ytarchive
https://github.com/yt-dlp/yt-dlp/issues/2137
yt-dlp --live-from-start [url]

小結

把上面那串全部整理起來能得到下方兩個腳本

  • 一個載(通常壓縮率更好的)mkv
  • 一個載mp4
  • 另附上空的cookies file

下載: ytarchive

展開

官方站: https://github.com/Kethsar/ytarchive
下載點: https://github.com/Kethsar/ytarchive/releases

如果直播已開始,且你預測直播在結束後會直接砍檔,ytarchive就能派上用場了! yt-dlp在錄直播時是從現時點開始錄,你會失去已過去的直播部份,而ytarchive是由直播的開頭起始下載

下載直播

注意格式是放在url後面,它和yt-dlp的傳參數方式不相同

ytarchive -w [url] best

帶入cookie下載,以下載需要登入才能瀏覧的影片

對於需要登入後才能瀏覧的影片,像是會員限定影片、Facebook私密社團影片等,ytarchive支援傳入cookies file過驗證。 取得cookies file的詳細步驟和上述相同,請見這裡

ytarchive.exe -w -c cookies.txt [url] best

在影片檔嵌入描述和影片縮圖

ytarchive.exe -w --add-metadata -t [url] best

輸出檔名範本

參數清單和youtube-dl相同

ytarchive -w -o "%(upload_date)s %(title)s (%(id)s)" [url] best

下載: Streamlink

官方站: https://github.com/streamlink/streamlink
下載點: https://github.com/streamlink/streamlink/releases/latest

Streamlink是串流下載的專用工具,它是為twitch開發
它也能用在Youtube直播,但Youtube上更推薦用yt-dlp
反過來也是,yt-dlp在抓twitch時常遇到檔案損壞,twitch請愛用Streamlink

我很少載twitch,用不到複雜的選項,完整的說明書在此

streamlink --twitch-disable-ads [url] "best"

下載: twitcasting-recorder

網站: https://github.com/prinsss/twitcasting-recorder

這是twitcasting專用串流錄影工具
錄twitcasting這事我試了能我找到的所有工具,而這是唯一一個能運作的
安裝方式我不贅述,自行讀它的Readme

這是錄串流專用的,如果是下載既有影片請用Stream Recorder (Chrome 擴充功能)
不用yt-dlp的原因:
twitcasting在超過1hr後會把影片分段,而yt-dlp只能抓到第一個影片
https://github.com/yt-dlp/yt-dlp/issues/382
python main.py [url]

下載: twspace-dl

網站: https://github.com/Ryu1845/twspace-dl
下載: https://github.com/Ryu1845/twspace-dl/releases/latest

這是twitter space音訊空間專用下載工具
我參與了它的dockerize

下載「正在開的」音訊空間

twspace_dl -U [twitter account url]
下載完整存檔的方式
在開台時取得master url,並在關台後下載

取得「正在開的」音訊空間的master url

twspace_dl -U [twitter account url] -u -s

以master url下載完整的音訊檔案

twspace_dl -U [twitter account url] -f [master url]

下載: Stream Recorder (Chrome 擴充功能)

官方站: https://www.hlsloader.com/
下載點: https://chrome.google.com/webstore/detail/stream-recorder-download/iogidnfllpdhagebkblkgbfijkbkjdmm

此工具適合用來下載yt-dlp未支援的其它小站點。
它是抓取網頁頁面中的影片流,當其它工具失效時,此工具值得一試。

轉檔: ffmpeg

官方站: https://ffmpeg.org
下載點: https://ffmpeg.org/download.html

轉檔就用ffmpeg,沒有第二選擇。
下方列幾個我常用的指令,完整指令表見說明書

mp4轉mkv

封裝格式是以附檔名指定
mkv可以封裝所有mp4能裝的格式,所以可以加上-c copy使之複製內容,不重新編碼。
反過來mkv轉mp4時可能不行,要看編碼格式。如果裝不進去就去掉-c參數讓它自動轉檔。

ffmpeg -i in.mp4 -c copy out.mkv

加封面圖至mkv

這裡指的封面圖,是在檔案總管能讀出的縮圖

ffmpeg -i in.mkv -c copy -map 0 -dn -attach cover.png -metadata:s:t mimetype=image/png -metadata:s:t filename=cover.png out.mkv

加封面圖至mp4

這裡指的封面圖,是在檔案總管能讀出的縮圖

ffmpeg -i in.mp4 -i cover.png -map 1 -map 0 -c copy -disposition:0 attached_pic out.mp4

mp4 faststart

mp4檔案的moov atom (內包含了影片的索引) 預設是放在影片的最末尾。這不利於網路串流,你必需下載整個檔案後才能播放。使用-movflags faststart參數以把moov atom移至片頭以解決這個問題。

我個人會將上傳網路空間分享的mp4檔做這道轉檔,這能讓它的線上預覧正常串流。-movflags faststart參數可以和其它mp4轉檔指令合併使用。

原文說明: 出處
Run a second pass moving the index (moov atom) to the beginning of the file. This operation can take a while, and will not work in various situations such as fragmented output, thus it is not enabled by default.
ffmpeg -i in.mp4 -c copy -map 0 -movflags +faststart out.mp4

依時間剪切影片,不重新編碼

以下範例為剪出「由第1分鐘到第2分鐘」,時間格式為時:分:秒

ffmpeg -ss 00:01:00 -i in.mp4  -to 00:02:00 -c copy out.mp4

2 則留言:

  1. 你好
    Twspace-dl
    最近會出現
    RuntimeError: No guest token found after five retry

    回覆刪除
    回覆
    1. https://github.com/Ryu1845/twspace-dl/issues/28
      是closed issue,還未release
      但docker image有做CI,用docker的話pull image就行

      刪除

目錄