Как я могу воспроизвести локальное видео в своем ноутбуке IPython?

У меня есть локальный видеофайл (.avi, но его можно преобразовать), который я хотел бы показать клиенту (т.е. он является частным и не может быть опубликован в Интернете), но я не могу понять, как чтобы воспроизвести его в ноутбуке IPython.

После небольшого поиска в Google кажется, что, возможно, видеотег HTML5 - это то, что нужно, но я не знаю никакого html и не могу заставить его воспроизводиться.

Любые мысли о том, как я могу встроить это?


person Chris    schedule 02.08.2013    source источник


Ответы (8)


(обновлено в 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>
""")
person Viktor Kerkez    schedule 02.08.2013
comment
Вам не нужен модуль «io». Вы можете прочитать видеофайл просто следующим образом: video = open('test.m4v', "rb").read() - person Apostolos; 07.04.2019
comment
Этот ответ следует игнорировать в 2019 году и выше. Это требует огромного количества времени и дает такой же результат, как у Зияда. - person Raskell; 25.07.2019
comment
Обновил ответ более современным методом. - person waterproof; 20.11.2019
comment
Пожалуйста, включите удаленный метод в этот ответ. Хотя этот метод является дорогостоящим, это единственный метод, который не позволяет браузерам загружать кэшированный видеофайл, если исходное видео изменено. Некоторые браузеры игнорируют даже строку запроса с меткой времени. - person Akash Karnatak; 14.07.2020
comment
@Apostolos Как вы воспроизводите видео, открытое таким образом? - person Austin; 30.08.2020
comment
@Austin, строка кода, о которой я упоминал, является частью файла .ipynb, который я использую для тестирования видео. Полный код выглядит следующим образом: from IPython.display import HTML / from base64 import b64encode / video = open(file, "rb").read() / video_encoded = b64encode(video).decode('ascii') / video_tag = '<video controls alt="test" src="data:video/x-'+vtype+';base64, {0}">'.format(video_encoded) / HTML(data=video_tag) /// Обратите внимание, что хотя он принимает все стандартные форматы видео, единственный видеоформат, который он может воспроизводить, — это M4V! /// Извините за форматирование текста - лучше комментария не придумаешь! - person Apostolos; 31.08.2020
comment
@Viktor, а откуда модуль "Видео"? Это что-то дополнительно нужно установить? - person Apostolos; 31.08.2020
comment
@Apostolos Это из пакета IPython. ipython.readthedocs.io/en/stable/api/generated/ - person Viktor Kerkez; 01.09.2020
comment
@Виктор, спасибо. Я использовал PY2, и этот модуль не был частью пакета «Jupyter» (IPython). Затем я установил и использовал «Jupyter» в своей системе PY3, и это сработало. (Как видите, я не фанат JNB! :)) - person Apostolos; 03.09.2020

Воспроизвести как видео 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>

введите описание изображения здесь

person Aziz Alto    schedule 13.07.2014
comment
Это действительно не работает для меня. У меня черный видео-превью и все. Возможно, отсутствует кодировка base64? - person Atcold; 09.02.2017
comment
Это MP4. Ничего фантастического. - person Atcold; 09.02.2017
comment
да, к сожалению, без понятия. - person Aziz Alto; 10.02.2017
comment
Хм... Я только что попробовал это в файле HTML, и он отлично работает в Chrome (в Linux). Тем не менее, если я скопирую и вставлю его содержимое в ячейку кода блокнота Jupyter, он просто отобразит видеоплеер с пустым черным содержимым и отключенной кнопкой воспроизведения. :/ - person Atcold; 10.02.2017
comment
Хорошо, я думаю, что это ошибка Jupyter (ref.). - person Atcold; 10.02.2017
comment
Ха-ха, разобрался. Нельзя использовать абсолютные пути, поэтому я создал символическую ссылку на файл. Теперь все работает отлично. Спасибо. - person Atcold; 10.02.2017
comment
О, отлично, сработало :-) Раньше с такой проблемой не сталкивался. Спасибо, что разобрались и поделились решением здесь. - person Aziz Alto; 10.02.2017

Используйте ячейку уценки:

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

Ссылка: Jupyter Notebook » Документы » Примеры » Ячейки уценки

person Kent Horvath    schedule 09.07.2017

Более простой способ:

from IPython.display import Video
Video("OUT.mp4")
person Ziyad Moraished    schedule 21.02.2019
comment
Очень хорошо, к сожалению, сейчас он не работает с Google Colab (еще одно отличие от настоящего Jupyter). - person Tomasz Gandor; 29.05.2020

Комментарий @ 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")

вуаля! Спасибо всем за прекрасные ответы и комментарии.

person taiyodayo    schedule 06.12.2019


Насколько мне известно, в системах Ubuntu есть некоторые проблемы с поддержкой прямого рендеринга видеофайлов, таких как .mp4. Вам нужно будет выполнить кодирование/декодирование с помощью ноутбука Jupyter. Пример:

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), но довольно часто используется в других репозиториях

person Konstantinos Roditakis    schedule 06.07.2021

Вы также можете попробовать это:

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