YouBit 允许你在 YouTube 上托管任何类型的文件。
它通过创建一个视频来实现该功能,其中每个像素代表原始文件的一个或多个 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 种状态,1 和 0,开和关,白色和黑色。这意味着我们的灰度像素的值为 255(白色)或 0(黑色)。在解码过程中,YouBit 将任何 128 或更大的值视为 1,将低于 128 的所有值视为 0。这意味着 YouTube 的压缩需要将像素的值更改至少 127 才能使其损坏。
现在考虑 bpp 为 2。两位有 4 种可能的状态 (00,01,10,11)。所以为了表示 2 位,我们的像素也需要有 4 种可能的状态。类似于 (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 更高的分辨率并没有真正的优势。
为什么我不能使用分辨率 x?
从技术上讲,YouBit 可以处理任何分辨率的视频,但是不支持低于 1920x1080 的分辨率,因为 YouTube 分配给它们的比特率并不总是适合我们的用例。它还引入了不一致,因为 YouTube 可能会根据分辨率使用不同的、性能较低的编解码器。支持高于 1080p 的分辨率,但通常不应使用。
我的文件可以有多大?
YouBit 以块的形式对你的文件进行编码,因此我们不受内存限制,但我们受到 YouTube 最大视频长度的限制。YouTube 视频最长允许 12 小时或 128GB。如果违反其中任何一个,YouBit 将在编码过程中引发异常。如果你使用的 YouTube 帐户未经过验证,则限制为 15 分钟。请务必验证你的帐户。
为什么不上传无损视频?
如果我们希望我们的数据保持完整,那么在本地压缩视频(在 YouTube 再次压缩之前)似乎是一个非常糟糕的主意。但是,文件大小的差异非常大。一旦编码过程相当有效,将视频上传到 YouTube 所需的时间就成为迄今为止最大的瓶颈。如果我们仔细控制我们在本地进行的压缩量,可以使我们的视频更小(上传速度更快),而不会影响数据完整性。
Git 仓库:https://github.com/MeViMo/youbit。