我有一个本地视频文件(.avi,但可以转换),我想向客户展示(即它是私有的,不能发布到网络上),但我不知道如何在 IPython notebook 中播放。
经过一番谷歌搜索后,似乎 HTML5 视频标签可能是要走的路,但我不知道任何 html 并且无法播放。
关于如何嵌入它的任何想法?
我有一个本地视频文件(.avi,但可以转换),我想向客户展示(即它是私有的,不能发布到网络上),但我不知道如何在 IPython notebook 中播放。
经过一番谷歌搜索后,似乎 HTML5 视频标签可能是要走的路,但我不知道任何 html 并且无法播放。
关于如何嵌入它的任何想法?
(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>
更简单的方法:
from IPython.display import Video
Video("OUT.mp4")
@Atcold 的评论今天救了我;)所以我将其发布为更详细的答案。
我有一个带有视频捕获命令的单元格,如下所示:
!sudo ffmpeg -t 5 -s 320x240 -i /dev/video0 /home/jovyan/capture.mp4
捕获的文件保存在 git 存储库之外的位置以管理磁盘使用情况。
对于 jupyter notebook,文件需要与 .ipynb 文件位于同一目录中。
# run this before calling Video()
! ln -sf "/home/jovyan/capture.mp4" ./capture.mp4
from IPython.display import Video
Video("capture.mp4")
瞧!谢谢大家的精彩回答和评论。
看看这个链接,你会发现更多https://gist.github.com/christopherlovell/e3e70880c0b0ad666e7b5fe311320a62
从 IPython.display 导入 HTML
from IPython.display import HTML
HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/S_f2qV2_U00?rel=0&controls=0&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&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>')
据我所知,Ubuntu 系统在支持直接渲染 .mp4 等视频文件时存在一些问题。您将需要使用 jupyter notebook 进行一些编码/解码。例子:
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 'generating_bootstrap_replicates.mp4',以下函数将以完整单元格宽度在 HTML 播放器中加载视频,同时还断言视频实际上在本地可用。在 Jupyter Notebook 和 Jupyter Lab 中工作。使用 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')