What?居然可以將 YouTube 用作免費文件托管服務!
YouBit 允許你在 YouTube 上托管任何類型的文件。
它通過創(chuàng)建一個視頻來實現該功能,其中每個像素代表原始文件的一個或多個 bits。從 YouTube 下載視頻后,可以從該視頻解碼回原始文件。而且 YouTube 對你可以上傳的視頻數量是沒有限制。
這其實并不是一個新穎的想法,其他項目也曾探索過,如 YouTubeDrive 和 fvid 。在這些項目的基礎上,YouBit 添加了一些新的功能和想法,同時也提高了一些性能。
注意:如果你使用 ?YouBit,顯然 Google 是不會喜歡的,他們可能會懲罰你的帳戶,所以使用風險自負!
安裝
安裝非常簡單,直接使用 pip 一鍵安裝即可:
pip install youbit
注意: 如果你的平臺沒有 wheel,在安裝之前需要安裝一個 C 語言編譯器。
用法:命令行
編碼并上傳文件:
python -m youbit upload C:/myfile.txt firefox
當然首先需要先安裝上 youbit,上面命令中的 firefox 參數表示 YouBit 應該從哪個瀏覽器中提取 cookie 信息來向 YouTube 進行身份驗證。我們這里使用的就是 Firefox 中登錄的賬號,該參數可選的值包括 'firefox'、'chrome'、'edge'、'brave'、'opera'、'chromium',在使用之前要確保你已經登錄過了 YouTube。
下載并解碼 YouBit 視頻:
python -m youbit download https://youtu.be/dQw4w9WgXcQ
除非另有說明,否則輸出始終保存在當前工作目錄中。
解碼本地視頻:
python -m youbit decode C:/myvideo.mp4
注意該視頻需要已從 YouTube 下載,你不能對文件進行編碼,然后立即解碼以對其進行測試。
編碼文件而不上傳:
python -m youbit encode C:/myfile.txt
用法:Python API
除了使用上面的命令行之前,我們也可以直接使用 Python API 來操作 YouBit。
from youbit import Encoder
with Encoder('C:/myfile.txt') as encoder:
encoder.encode()
url = encoder.upload(browser='opera') # Extract cookies from Opera browser
print(url)
from youbit import Decoder
with Decoder('https://youtu.be/dQw4w9WgXcQ') as decoder:
decoder.download()
path = decoder.decode('C:/mydirectory/') # Save output in 'C:/mydirectory'. Defaults to current working directory.
print(path)
編碼不上傳:
from youbit import Encoder
with Encoder('C:/myfile.txt') as encoder:
path = encoder.encode('C:/mydirectory/') # Saves output in 'C:/mydirectory'. Defaults to current working directory.
print(path)
使用不同的設置:
from youbit import Encoder
with Encoder('C:/myfile.txt') as encoder:
encoder.encode(ecc=32, bpp=2, zero_frame=True, res='hd', 'crf'=18)
url = encoder.upload(browser='chrome')
print(url)
解碼本地文件:
from youbit import Decoder
with Decoder('C:/myvideo.mp4') as decoder:
path = decoder.decode(
'C:/mydirectory/', # Save output in 'C:/mydirectory'. Defaults to current working directory.
ecc = 32, # The 'ecc' value that was used during encoding.
bpp = 1, # The 'bpp' value that was used during encoding.
zero_frame = False # Whether or not 'zero frames' were used during encoding.
)
print(path)
注意 ecc、bpp 和 zero_frame 是解碼 YouBit 視頻需要知道的 3 條元數據。當 YouBit 處理下載時,它會自動從視頻評論中提取此元數據。
常見問題
是否意味著無限的免費云存儲?
不。
- 它非常慢:編碼和解碼需要時間。上傳到 YouTube 的文件比原始文件大得多。YouTube 需要處理視頻。
- 你不能信任它:如果 YouTube 明天修改了一些算法,你的視頻就有可能無法再被解碼了。
這只是一個非常有趣的探索概念:)
為什么沒有顏色?
因為色度二次采樣會以極端的壓縮掉顏色信息。因此,我們只將所有信息保存在亮度通道中。這會產生灰度視頻,并且效果更好。巧合的是,它也使編碼和解碼過程變得不那么復雜。
什么是'bpp'?
它代表“每像素位數”,正如你可能已經猜到的那樣,它決定了在單個視頻像素中保存了多少位信息。更高的 bpp 允許更高的信息密度 - 與原始文件相比,輸出視頻更小。但是,它也引入了更多損壞的像素。
bpp 為 1 意味著每個像素只有 2 種狀態(tài),1 和 0,開和關,白色和黑色。這意味著我們的灰度像素的值為 255(白色)或 0(黑色)。在解碼過程中,YouBit 將任何 128 或更大的值視為 1,將低于 128 的所有值視為 0。這意味著 YouTube 的壓縮需要將像素的值更改至少 127 才能使其損壞。
現在考慮 bpp 為 2。兩位有 4 種可能的狀態(tài) (00,01,10,11)。所以為了表示 2 位,我們的像素也需要有 4 種可能的狀態(tài)。類似于 (0,85,170,255)。它們之間的距離現在更小了:現在只需更改 43 即可破壞像素。我們的視頻將縮小一半,但在上傳過程中 YouTube 對其重新編碼時更容易損壞。
為什么幀率為 1?
我不確切 YouTube 如何決定分配給流的比特率,但它似乎粗暴地遵循他們推薦的視頻比特率。在其他條件相同的情況下,幀速率為 1 的視頻將獲得與幀速率為 30 的視頻相同的比特率??纯次业哪繕耸鞘裁矗棵繋行У膸?,更少的壓縮。
其次,在編碼過程中使用 1 的幀率允許我們在解碼過程中只讀取關鍵幀。這個非常重要。測試顯示關鍵幀與 B 或 P 幀之間的損壞存在巨大差異。許多關鍵幀將完全沒有任何錯誤,而 GOP 末尾的一些 B 幀幾乎完全無法使用。
如果我們使用 1 的幀率,YouTube 會將其重新編碼為幀率為 6 的視頻。這似乎是 YouTube 上的最小值。在分析了這些 6fps 視頻的 GOP 結構后,很明顯在解碼過程中跳過任何非關鍵幀是不夠的。我們會看到分散的重復關鍵幀。幸運的是,這些重復的關鍵幀是可預測的。YouBit 在解碼過程中丟棄它知道的重復關鍵幀。
這確實意味著無法解碼未通過 YouTube 播放的 YouBit 視頻。
為什么不使用 YouTube API 進行上傳?
有 2 個原因。一方面,未經驗證的 API 項目只能上傳私有視頻。這些視頻被鎖定為私密,無法更改。這意味著 YouBit 鏈接將無法在用戶之間共享。
其次,YouTube 數據 API v3 使用配額系統:與 API 的所有交互都有相關的成本。在每天補充的 10,000 點中,上傳視頻需要花費驚人的 1600 點,這將限制用戶每天上傳 6 次。
相反,YouBit 從選擇的瀏覽器中提取 cookie,以驗證上傳過程自動化的 Selenium 無頭瀏覽器實例。這很 hacky,增加了很多開銷,并且對 YouTube DOM 的更改非常敏感,但它是我們所擁有的最好的。
上傳后,我需要等多長時間才能下載 YouBit 視頻?
這很棘手,因為 YouTube 可能需要很長時間才能完全完成視頻處理。如果視頻因為仍在處理中而不可用,YouBit 將拋出異常。如果視頻在技術上可用,但在編碼過程中指定的分辨率尚不可用,YouBit 也將拋出異常。
因此,建議等待足夠的時間。使用 CLI 可以最輕松地檢查任何上傳的 YouBit 視頻的最高可用視頻比特率 (VBR):
py -m youbit test vbr https://www.youtube.com/watch?v=SLP9mbCuhJc
解碼過程可能仍然適用于較低的 VBR,這完全取決于所使用的設置。使用比默認的 1080p 更高的分辨率并沒有真正的優(yōu)勢。
為什么我不能使用分辨率 x?
從技術上講,YouBit 可以處理任何分辨率的視頻,但是不支持低于 1920x1080 的分辨率,因為 YouTube 分配給它們的比特率并不總是適合我們的用例。它還引入了不一致,因為 YouTube 可能會根據分辨率使用不同的、性能較低的編解碼器。支持高于 1080p 的分辨率,但通常不應使用。
我的文件可以有多大?
YouBit 以塊的形式對你的文件進行編碼,因此我們不受內存限制,但我們受到 YouTube 最大視頻長度的限制。YouTube 視頻最長允許 12 小時或 128GB。如果違反其中任何一個,YouBit 將在編碼過程中引發(fā)異常。如果你使用的 YouTube 帳戶未經過驗證,則限制為 15 分鐘。請務必驗證你的帳戶。
為什么不上傳無損視頻?
如果我們希望我們的數據保持完整,那么在本地壓縮視頻(在 YouTube 再次壓縮之前)似乎是一個非常糟糕的主意。但是,文件大小的差異非常大。一旦編碼過程相當有效,將視頻上傳到 YouTube 所需的時間就成為迄今為止最大的瓶頸。如果我們仔細控制我們在本地進行的壓縮量,可以使我們的視頻更?。ㄉ蟼魉俣雀欤?,而不會影響數據完整性。
Git 倉庫:https://github.com/MeViMo/youbit。