728x90

개발환경

-fast api

-docker

-python3.9

-postgres

 

를 사용하였습니다. 참고하시길 바랍니다.

 

이글을 쓰게된 이유는 python에서 openvcv 를 사용해 영상을 N x M 으로 자른뒤 각각의 html5 video 태그에 뿌려주는 걸 개발하다가 생긴 문제에 대해서 해결과정을 적으려고 합니다.

 

html5 video 태그의 표준 코덱은 H 2 6 4 코덱입니다. 

 

cv2.VideoWriter_fourcc(*"H264")

 

하지만 docker build 이후 영상을 자르면 다음과 같은 에러를 내뱉으며 영상을 자를수 없다고 합니다.

 

https://stackoverflow.com/questions/33134985/cv2-videowriter-will-not-write-file-using-fourcc-h-264-with-logitech-c920-pyth/38053575

 

cv2.VideoWriter will not write file using fourcc h.264 (with logitech c920, python 2.7, windows 8)

I am new to python (2.7) and opencv (3.0) (and video streaming/writing in general) so forgive this. I am using the logitech c920 as my webcam and it can stream video compressed in h264 format so I...

stackoverflow.com

 

그래서 ubuntu 에서 ffmpeg 를 사용하기 위해 다음과 같이 dockerfile 을 작성합니다.

 

FROM python:3.9-slim

WORKDIR  /workspace

COPY requirements.txt .

EXPOSE 80

RUN pip install -r requirements.txt &&\
    apt-get update &&\
    apt-get install libgl1-mesa-glx -y &&\
    apt-get install libglib2.0-0 -y &&\
    apt-get install ffmpeg x264 libx264-dev -y&&\
    apt-get install watch -y

COPY . /workspace/

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

 

docker-compose.yml

version: "3.7"
services:
  video_api:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"

 

cv2.VideoWriter_fourcc(*"mp4v")

코덱 세팅은 mp4v 비디오의 확장자는 mp4 로 정한다음

 

 os.system(f"ffmpeg -i {video_name} -vcodec libx264 {over_write_video}")

원본 비디오를 ffmpeg 로 코덱을 변경하여 새로운 비디오를 하나더 만들어냅니다.

 

이렇게하면 h264 코덱으로 만들어진 mp4 파일을 사용할수 있습니다.

 

728x90

'Python > python - opencv' 카테고리의 다른 글

적응형 이진화  (0) 2020.11.12
opencv 전역 임계값 사용  (0) 2020.11.10
opencv 이미지 채널 분리 및 합치기  (0) 2020.11.10
opencv 픽셀에 접근하기  (0) 2020.11.10