在 google colab 中显示大型视频文件

displaying large video files in google colab

在 google colab 中显示视频的常见方式是这样的:

from IPython.display import HTML
from base64 import b64encode
with open('video.mp4', 'rb') as f:
   display(HTML('<video><source src="data:video/mp4;base64,%s" type="video/mp4"></video>'%b64encode(f.read()).decode()))

但是对于中等大小的视频文件,比如说几十MB,这会导致colab断开连接(只显示“runtime disconnected”)并且视频不会显示。事实上,尝试将这么长的字符串写入 HTML 似乎并不明智。什么是最简单的修复?请注意,由于 CORS,HTML 无法访问本地文件系统。

这个问题已经存在了几年,我知道唯一可行的解​​决方案是使用 kora Python 包。它所做的是给定一个 public 视频文件 URL,它将视频上传到 Google 驱动器并将其设置为 public,然后使用返回的 link 来显示视频。

这是一个使用大型视频文件的示例,使用您之前提到的众所周知的方法通常会产生运行时错误。

!wget http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/VolkswagenGTIReview.mp4
!mv VolkswagenGTIReview.mp4 video.mp4

!pip install -U kora

from IPython.display import HTML
from kora.drive import upload_public

url = upload_public('video.mp4')
HTML(f"""<video src={url} width=500 controls/>""")

在现场演示的情况下,唯一的缺点可能是必须进行 Google 帐户身份验证才能使 API 正常工作,但您可以通过事先处理好这部分来解决这个问题到你的示范。

不需要base64编码。您可以使用普通的 <video> 标签来嵌入。

这是一个完整的例子: https://colab.research.google.com/drive/1GqZvHmOwGpo9QsrxeEpH93kswgVliQQl

在此处复制代码:

# Download a video file to be served locally.
!wget https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4

# Start a webserver in the background, running on port 8000.
%%script bash --bg
python3 -m http.server 8000

# Embed the video file.
%%html
<video controls autoplay><source src="http://localhost:8000/flower.mp4" type="video/mp4"></video>

结果是一个典型的视频嵌入:

Colab 会自动将对 locahost 的 HTTP 请求从 Javascript 代理到后端虚拟机。此处的文档中描述了有关此工作原理的更多详细信息: https://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo=R8ZvCXC5A0wT