Google Colaboratory로 동영상 처리 (초급편)
ffmpeg
, PIL(Pillow)
, Google Drive의 기능을 이용할 수 있으므로 연구용 동영상 해석/편집을 간단하게 실행할 수 있다. 로컬 머신의 머신 파워를 소비하는 일도 없고, 다른 사람과 공동 작업하거나 출력 결과를 공유하는 것도 가능해, 꽤 좋다.사전 준비
동영상 파일을 Google 드라이브에 업로드
동영상 파일을 Google Drive에 업로드합니다. 이번에는 '내 드라이브/videoexp/SampleVideo_1280x720_5mb.mp4'라는 파일명으로 업로드했다.
이번 동영상 파일은 Sample Videos 에서 빌렸다.
Google 드라이브 마운트
from google.colab import drive
drive.mount('/content/gdrive')
ffmpeg를 사용하여 이미지로 변환
ffmpeg를 사용하여 동영상 파일에서 이미지를 추출합니다. 추출 시에는 프레임 레이트(fps)를 지정한다. fps는 목적에 따라 조정한다. 여기에서는 1fps(1초에 1프레임)를 지정하고 있다. fps가 커질수록 출력 결과는 부드럽게 되지만, 그만큼 처리의 시간과 파일 사이즈가 증대한다.
import os
src_img_dir = "/content/gdrive/My Drive/videoexp/src"
if not os.path.exists(src_img_dir):
os.makedirs(src_img_dir)
!ffmpeg -i "/content/gdrive/My Drive/videoexp/SampleVideo_1280x720_5mb.mp4" -vf fps=1 "$src_img_dir/%04d.jpg"
추출된 이미지를 src
디렉터리에 저장합니다. Google Drive에서 src 디렉토리를 열면 추출된 이미지의 내용을 확인할 수 있다.
추출된 이미지 목록 얻기
import glob
src_files = glob.glob("{}/*.jpg".format(src_img_dir))
src_files.sort()
print(len(src_files), "image files")
한 장씩 이미지 처리
얻어진 각 프레임의 화상에 대하여, 1매씩 처리를 행한다.
여기에서는 PIL을 사용해 「화상의 오른쪽 상단에 프레임 번호를 쓴다」라고 하는 처리를 실행하고 있다.
from PIL import Image
from PIL import ImageDraw
dst_img_dir = "/content/gdrive/My Drive/videoexp/dst"
if not os.path.exists(dst_img_dir):
os.makedirs(dst_img_dir)
for i, file in enumerate(src_files):
im = Image.open(file)
draw = ImageDraw.Draw(im)
draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_dir,index=i)
im.save(dst_file)
처리 후의 화상은 dst 디렉토리에 출력된다. 동영상으로 변환하기 전에 여기에서 처리 내용을 확인할 수 있다.
처리 후 이미지에서 동영상 만들기
마지막으로 처리 후의 이미지를 동영상으로 되돌립니다.
ffmpeg를 사용하여 처리 된 이미지가 저장되는 디렉토리 (dst)에있는 이미지에서 동영상 파일 (out.mp4)을 만듭니다.
이 때의 프레임 레이트는 동화상으로부터 화상을 추출 할 때 사용한 프레임 레이트와 일치 할 필요가있다.
!ffmpeg -framerate 1 -i "$dst_img_dir/%04d.jpg" "/content/gdrive/My Drive/videoexp/out.mp4"
Reference
이 문제에 관하여(Google Colaboratory로 동영상 처리 (초급편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/croquette0212/items/8ff251d5da77e803c253
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from google.colab import drive
drive.mount('/content/gdrive')
ffmpeg를 사용하여 이미지로 변환
ffmpeg를 사용하여 동영상 파일에서 이미지를 추출합니다. 추출 시에는 프레임 레이트(fps)를 지정한다. fps는 목적에 따라 조정한다. 여기에서는 1fps(1초에 1프레임)를 지정하고 있다. fps가 커질수록 출력 결과는 부드럽게 되지만, 그만큼 처리의 시간과 파일 사이즈가 증대한다.
import os
src_img_dir = "/content/gdrive/My Drive/videoexp/src"
if not os.path.exists(src_img_dir):
os.makedirs(src_img_dir)
!ffmpeg -i "/content/gdrive/My Drive/videoexp/SampleVideo_1280x720_5mb.mp4" -vf fps=1 "$src_img_dir/%04d.jpg"
추출된 이미지를 src
디렉터리에 저장합니다. Google Drive에서 src 디렉토리를 열면 추출된 이미지의 내용을 확인할 수 있다.
추출된 이미지 목록 얻기
import glob
src_files = glob.glob("{}/*.jpg".format(src_img_dir))
src_files.sort()
print(len(src_files), "image files")
한 장씩 이미지 처리
얻어진 각 프레임의 화상에 대하여, 1매씩 처리를 행한다.
여기에서는 PIL을 사용해 「화상의 오른쪽 상단에 프레임 번호를 쓴다」라고 하는 처리를 실행하고 있다.
from PIL import Image
from PIL import ImageDraw
dst_img_dir = "/content/gdrive/My Drive/videoexp/dst"
if not os.path.exists(dst_img_dir):
os.makedirs(dst_img_dir)
for i, file in enumerate(src_files):
im = Image.open(file)
draw = ImageDraw.Draw(im)
draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_dir,index=i)
im.save(dst_file)
처리 후의 화상은 dst 디렉토리에 출력된다. 동영상으로 변환하기 전에 여기에서 처리 내용을 확인할 수 있다.
처리 후 이미지에서 동영상 만들기
마지막으로 처리 후의 이미지를 동영상으로 되돌립니다.
ffmpeg를 사용하여 처리 된 이미지가 저장되는 디렉토리 (dst)에있는 이미지에서 동영상 파일 (out.mp4)을 만듭니다.
이 때의 프레임 레이트는 동화상으로부터 화상을 추출 할 때 사용한 프레임 레이트와 일치 할 필요가있다.
!ffmpeg -framerate 1 -i "$dst_img_dir/%04d.jpg" "/content/gdrive/My Drive/videoexp/out.mp4"
Reference
이 문제에 관하여(Google Colaboratory로 동영상 처리 (초급편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/croquette0212/items/8ff251d5da77e803c253
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import os
src_img_dir = "/content/gdrive/My Drive/videoexp/src"
if not os.path.exists(src_img_dir):
os.makedirs(src_img_dir)
!ffmpeg -i "/content/gdrive/My Drive/videoexp/SampleVideo_1280x720_5mb.mp4" -vf fps=1 "$src_img_dir/%04d.jpg"
import glob
src_files = glob.glob("{}/*.jpg".format(src_img_dir))
src_files.sort()
print(len(src_files), "image files")
한 장씩 이미지 처리
얻어진 각 프레임의 화상에 대하여, 1매씩 처리를 행한다.
여기에서는 PIL을 사용해 「화상의 오른쪽 상단에 프레임 번호를 쓴다」라고 하는 처리를 실행하고 있다.
from PIL import Image
from PIL import ImageDraw
dst_img_dir = "/content/gdrive/My Drive/videoexp/dst"
if not os.path.exists(dst_img_dir):
os.makedirs(dst_img_dir)
for i, file in enumerate(src_files):
im = Image.open(file)
draw = ImageDraw.Draw(im)
draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_dir,index=i)
im.save(dst_file)
처리 후의 화상은 dst 디렉토리에 출력된다. 동영상으로 변환하기 전에 여기에서 처리 내용을 확인할 수 있다.
처리 후 이미지에서 동영상 만들기
마지막으로 처리 후의 이미지를 동영상으로 되돌립니다.
ffmpeg를 사용하여 처리 된 이미지가 저장되는 디렉토리 (dst)에있는 이미지에서 동영상 파일 (out.mp4)을 만듭니다.
이 때의 프레임 레이트는 동화상으로부터 화상을 추출 할 때 사용한 프레임 레이트와 일치 할 필요가있다.
!ffmpeg -framerate 1 -i "$dst_img_dir/%04d.jpg" "/content/gdrive/My Drive/videoexp/out.mp4"
Reference
이 문제에 관하여(Google Colaboratory로 동영상 처리 (초급편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/croquette0212/items/8ff251d5da77e803c253
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from PIL import Image
from PIL import ImageDraw
dst_img_dir = "/content/gdrive/My Drive/videoexp/dst"
if not os.path.exists(dst_img_dir):
os.makedirs(dst_img_dir)
for i, file in enumerate(src_files):
im = Image.open(file)
draw = ImageDraw.Draw(im)
draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_dir,index=i)
im.save(dst_file)
마지막으로 처리 후의 이미지를 동영상으로 되돌립니다.
ffmpeg를 사용하여 처리 된 이미지가 저장되는 디렉토리 (dst)에있는 이미지에서 동영상 파일 (out.mp4)을 만듭니다.
이 때의 프레임 레이트는 동화상으로부터 화상을 추출 할 때 사용한 프레임 레이트와 일치 할 필요가있다.
!ffmpeg -framerate 1 -i "$dst_img_dir/%04d.jpg" "/content/gdrive/My Drive/videoexp/out.mp4"
Reference
이 문제에 관하여(Google Colaboratory로 동영상 처리 (초급편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/croquette0212/items/8ff251d5da77e803c253텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)