70

我有一个本地视频文件(.avi,但可以转换),我想向客户展示(即它是私有的,不能发布到网络上),但我不知道如何在 IPython notebook 中播放。

经过一番谷歌搜索后,似乎 HTML5 视频标签可能是要走的路,但我不知道任何 html 并且无法播放。

关于如何嵌入它的任何想法?

4

10 回答 10

92

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>
""")
于 2013-08-02T21:01:57.153 回答
37

将其作为 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>

在此处输入图像描述

于 2014-07-13T08:21:14.797 回答
24

使用降价单元格:

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

引文:Jupyter Notebook » 文档 » 示例 » Markdown 单元格

于 2017-07-09T18:53:50.630 回答
13

更简单的方法:

from IPython.display import Video
Video("OUT.mp4")
于 2019-02-21T04:07:19.237 回答
2

@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")

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

于 2019-12-06T11:49:25.297 回答
1

看看这个链接,你会发现更多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&amp;controls=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>')

于 2018-03-06T08:55:19.987 回答
0

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>')

于 2018-03-06T09:00:25.433 回答
0

据我所知,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)获得的,但它在其他存储库中经常使用

于 2021-07-06T17:20:18.317 回答
0

你也可以试试这个:

from ipywidgets import Video
Video.from_file("./play_video_test.mp4", width=320, height=320)
于 2021-07-15T06:26:02.823 回答
0

似乎一个常见的问题是没有将视频包含在与调用笔记本相同的目录中。给定与笔记本在同一目录中的 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')
于 2021-08-27T02:12:34.293 回答