如何在 IPython 笔记本中播放本地视频?

我有一个本地的视频文件(一个。Avi,但可以转换) ,我想显示一个客户端(即它是私有的,不能发布到网络) ,但我不知道如何发挥它在 IPython 笔记本。

在谷歌了一下之后,似乎 HTML5 video 标签是一个不错的选择,但是我不知道任何 html,也不能让它播放。

有什么办法可以嵌入这个吗?

88451 次浏览

(更新2019年,删除不必要的昂贵的方法)

只要做:

from IPython.display import Video


Video("test.mp4")

如果得到一个错误 No video with supported format or MIME type found,只需将 embed=True传递给函数: Video("test.mp4", embed=True)

或者如果您想使用 HTML元素:

from IPython.display import HTML


HTML("""
<video alt="test" controls>
<source src="test.mp4" type="video/mp4">
</video>
""")

将其作为 HTML5视频播放: ]

from IPython.display import HTML

HTML("""
<video width="320" height="240" controls>
<source src="path/to/your.mp4" type="video/mp4">
</video>
""")

更新

此外,使用魔法细胞:

%%HTML
<video width="320" height="240" controls>
<source src="path/to/your.mp4" type="video/mp4">
</video>

音频也是如此

%%HTML
<audio controls>
<source src="AUDIO-FILE.mp3">
</audio>

enter image description here

使用减价单元格:

<video controls src="path/to/video.mp4" />

引用: 朱庇特笔记本“文件”示例“减价单元”

看看这个链接,你会发现更多的 https://gist.github.com/christopherlovell/e3e70880c0b0ad666e7b5fe311320a62

显示导入 HTML

from IPython.display import HTML


HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/S_f2qV2_U00?rel=0&amp;controls=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>')

from IPython.display import HTML


# Youtube
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/S_f2qV2_U00?rel=0&amp;controls=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>')

更简单的方法:

from IPython.display import Video
Video("OUT.mp4")

@ Atcold 的评论今天救了我一命;)所以我把这个作为一个更详细的回答贴出来。

我有一个手机,上面有这样的视频捕捉命令:

!sudo ffmpeg -t 5 -s 320x240 -i /dev/video0 /home/jovyan/capture.mp4

捕获的文件保存在 git 存储库之外的一个位置,以便管理磁盘使用。

木星笔记本 文件需要与.ipynb 文件位于同一目录。

# run this before calling Video()
! ln -sf "/home/jovyan/capture.mp4" ./capture.mp4
from IPython.display import Video


Video("capture.mp4")

瞧! 谢谢大家的精彩回答和评论。

据我所知,Ubuntu 系统有一些支持的问题 直接渲染视频文件,如.mp4。 您将需要使用木星笔记本进行一些编码/解码。 例如:

mp4 = open(path,'rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()

这个片段可以解决这个问题。

from IPython.display import display, HTML from base64 import b64encode


def display_video(path):
mp4 = open(path,'rb').read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
display(
HTML(
"""
<video width=400 controls>
<source src="%s" type="video/mp4">
</video>
""" % data_url
)
)

代码片段来自(https://github.com/facebookresearch/AugLy/blob/main/examples/AugLy_video.ipynb) ,但是在其他存储库中经常使用它

你也可以试试这个:

from ipywidgets import Video
Video.from_file("./play_video_test.mp4", width=320, height=320)

似乎一个常见的问题是不包括视频在同一目录作为调用笔记本电脑。假设在笔记本电脑的同一目录中有一个 MP4“ ogenesis _ bootstrap _ plicates.MP4”,下面的函数将在 HTML 播放器中以全单元格宽度加载视频,同时断言视频实际上是本地可用的。在木星笔记本和木星实验室工作。使用 Python v3.8内核进行测试。

#!/usr/bin/env python3




def video_player(video, mtype="video/mp4"):
""" Displays mp4 video in Jupyter cell. Jupyter requires video
in the same directory as the calling notebook. An assertion error
will be thrown if this is not true.
    

Parameters
----------
video (str): the filename of the video. Example: "generating_bootstrap_replicates.mp4"
mtype (str): the mime type of the video. Example: "video/mp4"
    

"""
    

from pathlib import Path
from IPython.display import HTML, display
    

cwd = Path.cwd()
    

assert video in [file.name for file in list(cwd.glob('*'))], \
f'{video} must be in local directory: {cwd}'
        

call = """
<video width=100% controls>
<source src="{}" type="{}">
</video>""".format(video, mtype)
    

display(HTML(call))
    



video_player('generating_bootstrap_replicates.mp4')