jupyter notebook에서 비디오를 임베딩하기
공부는 할 수록 늘어갑니다.
- 제가 왜 이지경에 이르렀는지를 다시 한번 확인해봅니다.
- reinforcement learning 학습 중에
open AI gym
의 렌더링 부분이 쥬피터 노트북에서 잘 되지 않는 것을 확인 - 왜 안될까를 고민하다가, 이미지나 비디오를 쥬피터 노트북에서 띄우는 방법을 고민 및 공부
- 이제 matplotlib와 cv2로 비디오는 만들었고(약간의 문제는 발생함)
- 이제
IPython.display.HTML
을 사용해서 쥬피터 노트북에 비디오를 띄우면 될것 같은데, 잘 안됨.
- reinforcement learning 학습 중에
- 후. 그래서, HTML에서 비디오를 표현하는 방법에 대해서 정리하는게 좋을 것 같다, 라는 생각을 했어요.
- 제 짧은 기억이 맞다면, HTML5와 HTML4에서 비디오를 표현하는 방법이 다른다, 뭐 그런 이야기는 들었던 것 같거든요.
- 뭐 그외에도 제가 추가로 공부해야 할 것들은 다음과 같은 것들이 있습니다.
- 파이썬에서 비디오 저장시 코덱 으로 인한 재생 불가 문제
- 비디오 파일 포맷(mp4, mov, avi 등)의 차이
jupyter notebook에 비디오 담기
- 사실 매우 간단합니다. 더 복잡하게 정리할 수 도 있는데, 일단은 사용가능한 방법으로 가장 심플한 형태로 담았습니다.
IPython.display
에서 HTML을 담을 수 있는 방식을 제공합니다. 따라서 저는 HTML 구문을IPython.display.HTML
에 담아주면 되는 것이구요.- 그래서, 간단하게 HTML 코드를 넣어줍니다. 저렇게 넣어주면 쥬피터 노트북에서 알아서 이미지가 잘 뜹니다.
def show_video_in_jupyter_nb(width, height, video_url):
from IPython.display import HTML
return HTML("""<video width="{}" height="{}" controls>
<source src={} type="video/mp4">
</video>""".format(width, height, video_url))
video_url = '../../assets/images/markdown_img/180628_test_video.mp4'
show_video_in_jupyter_nb(200, 300,video_url)
- 마크다운에서도 잘 되는지 확인해봅니다.
- 안됩니다. 그냥 안할게요……이제 더이상은 안할거야…
- 쥬피터 노트북에서는 잘 됩니다….쭈굴…. ```html
<video width="200" height="300" controls>
<source src=/assets/images/markdown_img/180628_test_video.mp4 type="video/mp4">
</video>
- 기타로 아래와 같이 표현하는 경우도 있더군요. 혹시나 위의 코드에 문제가 있을 때, 사용하려고 옮겨두었습니다.
```python
import io
import base64
from IPython.display import HTML
video = io.open('../../assets/images/markdown_img/180628_test_video.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')))
""""""
wrap-up
- 파일 형식에 따라서 다른 경우들이 많습니다. 저는 일단
.mp4
로 해보니까 별 문제가 없어서, 일단 이 아이를 사용하고 있기는 한데, 이후에 문제가 발생하면, 파일 형식, 인코딩 디코딩에 대해서도 정리하는 것이 필요할 것 같아요.
댓글남기기