在 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
在 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