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

时间:2013-08-02 14:30:01

标签: html5-video ipython ipython-notebook

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

经过一番谷歌搜索后,似乎HTML5视频标签可能就行了,但我不知道任何HTML,也无法让它发挥。

有关如何嵌入此内容的任何想法?

9 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:23)

您必须将视频读入内存并对其进行base64编码,因为IPython Notebook不是静态文件服务器:

import io
import base64
from IPython.display import HTML

video = io.open('test.mp4', 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''<video alt="test" controls>
                <source src="data:video/mp4;base64,{0}" type="video/mp4" />
             </video>'''.format(encoded.decode('ascii')))

答案 2 :(得分:13)

使用降价单元格:

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

引文:Jupyter Notebook » Docs » Examples » Markdown Cells

答案 3 :(得分:2)

一种更简单的方法:

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

答案 4 :(得分: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>')

答案 5 :(得分:1)

&#13;
&#13;
@Configuration
@EnableJpaRepositories(basePackages = {"xxx.xxx.xxx.core.dao"})
@EnableTransactionManagement
public class Repository {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/xxxx");
        dataSource.setUsername("xxxx");
        dataSource.setPassword("xxxx");

        return dataSource;
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("xx.xxxx.xxxx.xxxx.domain");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();
        return factory.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory());
        return txManager;
    }
&#13;
&#13;
&#13;

答案 6 :(得分:0)

@Atcold的评论今天救了我;),所以我将其发布为更详细的答案。

我有一个带有视频捕获命令的单元格,如下所示:

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

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

对于jupyter笔记本,文件必须与.ipynb文件位于同一目录。

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

Video("capture.mp4")

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

答案 7 :(得分: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
           )   
    )

snipet 是从 (https://github.com/facebookresearch/AugLy/blob/main/examples/AugLy_video.ipynb) 获得的,但它在其他存储库中经常使用

答案 8 :(得分:0)

你也可以试试这个:

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