Google Colaboratory에서 동영상 재생
10421 단어 googlecolaboratory
Google Colaboratory에서 동영상 재생
첫째, 필요한 라이브러리
import cv2
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
from IPython.display import HTML
from IPython.display import IFrame
from IPython.display import display
!pip install youtube_dl
import youtube_dl
1. Youtube 동영상의 내장 재생
HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/GrkyTO9uu-c" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')
또는
IFrame(src="https://www.youtube.com/embed/GrkyTO9uu-c",width=560,height=315)
전자는 최근 파이썬에서 실행할 때 IFrame ()을 사용하라는 경고를받습니다.
둘 다 셀의 맨 끝이 아니면 동영상이 표시되지 않습니다.
동영상을 연속해서 표시하고 싶으면 display()로 둘러싸면 된다. 예를 들어,
print("IPython.display.HTML() による youtube 動画の表示")
display(HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/GrkyTO9uu-c" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'))
print("IPython.display.IFrame() による youtube 動画の表示")
display(IFrame(src="https://www.youtube.com/embed/GrkyTO9uu-c",width=560,height=315))
다음으로 로컬에서 가지고있는 동영상 파일을 표시하는 방법을 설명하고 싶습니다.
스틸 이미지 목록에서 IPython으로 볼 수 있는 애니메이션을 만들고 재생하는 함수
opencv를 사용하면 동영상을 정지 영상으로 분해하는 것이 쉽기 때문에 정지 영상 목록을 인수로 사용하여 동영상으로 재생하는 프로그램을 만들 수 있습니다.
def makeAnimation(frames):
plt.figure(figsize=(frames[0].shape[1]/72.0, frames[0].shape[0]/72.0), dpi=72)
patch = plt.imshow(frames[0])
plt.axis('off')
def animate(i):
patch.set_data(frames[i])
anim = FuncAnimation(plt.gcf(), animate, frames=len(frames), interval=1000/30.0)
display(HTML(anim.to_jshtml()))
실행 예
가정으로, 처리 대상 동영상을 Youtube 동영상에서 잘라내고, 그것을 notebook 내에서 표시한다는 상황을 생각해 보자.
실험용 동영상을 Youtube 동영상에서 가져와서 30프레임 꺼내 로컬로 저장하고 그것을 notebook에서 재생하는 프로그램을 만들어 보자.
Youtube 동영상을 일시적으로 저장
# 動画を一時的に tmpv.mp4 という名前で作業フォルダに保存
# Youtube動画には著作権がある.くれぐれも悪用しないように
url = 'https://youtu.be/GrkyTO9uu-c'
vname = 'tmpv.mp4'
ydl = youtube_dl.YoutubeDL({'outtmpl': vname,'format':'18'}) # 640x360 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'133'}) # 426x230 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'135'}) # 854x480 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'136'}) # 1280x720 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'137'}) # 1920x1080 mp4
# meta = ydl.extract_info(url, download=False)
# print(meta['format'])with ydl:
result = ydl.extract_info(url,download=True)
위의 프로그램은 Youtube에 업로드 된 동영상을 640x360 해상도로 다운로드하고 "tmpv.mp4"라는 이름으로 저장합니다.
위 프로그램에 저장된 tmpv.mp4의 처음 30 프레임을 표시하는 프로그램.
movie = "tmpv.mp4"
cap = cv2.VideoCapture(movie)
# 最初の30フレームを取り出す
ret, frame = cap.read()
imgs = [frame] # 最初のフレーム
for i in range(29):
ret, frame = cap.read()
imgs.append(frame)
makeAnimation(frames=imgs)
동영상 만 표시하고 싶지만 동영상 뒤에 첫 프레임이 정지 영상으로 표시됩니다.
import cv2
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
from IPython.display import HTML
from IPython.display import IFrame
from IPython.display import display
!pip install youtube_dl
import youtube_dl
HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/GrkyTO9uu-c" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>')
IFrame(src="https://www.youtube.com/embed/GrkyTO9uu-c",width=560,height=315)
print("IPython.display.HTML() による youtube 動画の表示")
display(HTML(r'<iframe width="560" height="315" src="https://www.youtube.com/embed/GrkyTO9uu-c" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'))
print("IPython.display.IFrame() による youtube 動画の表示")
display(IFrame(src="https://www.youtube.com/embed/GrkyTO9uu-c",width=560,height=315))
def makeAnimation(frames):
plt.figure(figsize=(frames[0].shape[1]/72.0, frames[0].shape[0]/72.0), dpi=72)
patch = plt.imshow(frames[0])
plt.axis('off')
def animate(i):
patch.set_data(frames[i])
anim = FuncAnimation(plt.gcf(), animate, frames=len(frames), interval=1000/30.0)
display(HTML(anim.to_jshtml()))
# 動画を一時的に tmpv.mp4 という名前で作業フォルダに保存
# Youtube動画には著作権がある.くれぐれも悪用しないように
url = 'https://youtu.be/GrkyTO9uu-c'
vname = 'tmpv.mp4'
ydl = youtube_dl.YoutubeDL({'outtmpl': vname,'format':'18'}) # 640x360 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'133'}) # 426x230 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'135'}) # 854x480 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'136'}) # 1280x720 mp4
# ydl = youtube_dl.YoutubeDL({'outtmpl': 'test.%(ext)s','format':'137'}) # 1920x1080 mp4
# meta = ydl.extract_info(url, download=False)
# print(meta['format'])with ydl:
result = ydl.extract_info(url,download=True)
movie = "tmpv.mp4"
cap = cv2.VideoCapture(movie)
# 最初の30フレームを取り出す
ret, frame = cap.read()
imgs = [frame] # 最初のフレーム
for i in range(29):
ret, frame = cap.read()
imgs.append(frame)
makeAnimation(frames=imgs)
Reference
이 문제에 관하여(Google Colaboratory에서 동영상 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aquapathos/items/199a33d58cfc4bb3d139텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)