Какие кодеки OpenCV FOUR CC я должен использовать для моей программы Python? - PullRequest
1 голос
/ 17 марта 2020

Я реализовал скрипт Python, который отображает видео для пользователя и записывает его. Видео сохраняется в сжатом или несжатом виде.

В старой программе, которую я видел, использовались кодеки "DIVX" MPEG-4 и "IYUV". По какой-то причине они не работают на моем компьютере (OUTPUT_VIDEO - это MP4-файл).

OpenCV: FFMPEG: tag 0x58564944/'DIVX' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'

Код "MPJPG" c работает с файлами ".avi".

Поскольку я не уверен насчет кодеков, я хотел бы спросить, какие кодеки я должен использовать для своего сценария, чтобы выполнить следующие требования:

  • последовательность видео может быть сохраняется как .mp3 , .mp4 файл (оба сжатый) или как .avi файл (без сжатия).
  • Python скрипт должен работать на платформах Windows и Linux.

Это мой исходный код: main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import cv2
import platform

#=========== TO CHANGE ===========
INPUT_VIDEO = os.path.join("..", "resources", "video.mp4")
OUTPUT_VIDEO = os.path.join("..", "recorded", "recorded.avi")
compress = False
#=========== TO CHANGE ===========

WINDOW_NAME = "Video Recorder"

player = cv2.VideoCapture(INPUT_VIDEO)

# Get the frames per second (fps) of the video.
fps = player.get(cv2.CAP_PROP_FPS)

# Get width and height via the video capture property.
width = player.get(cv2.CAP_PROP_FRAME_WIDTH)
height = player.get(cv2.CAP_PROP_FRAME_HEIGHT)

# Define the codec and create VideoWriter object according to the used operating system.
four_cc = None
if platform.system() == "Windows":
    if compress:
        four_cc = cv2.VideoWriter_fourcc(*"MJPG")  # *"DIVX")  # DIVX MPEG-4 codec.
    else:
        four_cc = cv2.VideoWriter_fourcc(*"MJPG")  # *"IYUV")  # Uncompressed yuv420p in avi container.
elif platform.system() == "Linux":
    if compress:
        four_cc = cv2.VideoWriter_fourcc(*"DIVX")  # DIVX MPEG-4 codec.
    else:
        four_cc = cv2.VideoWriter_fourcc(*"IYUV")  # Uncompressed yuv420p in avi container.

recorder = cv2.VideoWriter(OUTPUT_VIDEO, four_cc, fps, (int(width), int(height)))

if player is None:
    quit()

while player.isOpened():
    ret, frame = player.read()

    if ret:
        cv2.imshow(WINDOW_NAME, frame)
        recorder.write(frame)
    else:
        break

    key_code = cv2.waitKey(1)

    # Closes the window if the ESC key was pressed.
    if key_code == 27:
        break

    # Closes the window if the X button of the window was clicked.
    if cv2.getWindowProperty(WINDOW_NAME, 1) == -1:
        break

player.release()
recorder.release()
cv2.destroyAllWindows()

Я использую * Компьютер 1033 * 7, с opencv-contrib- python 3.4.0.12 и Python 3.6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...