質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

連番BMPをPythonのOpenCVを使用し、非圧縮AVIで出力したいです。

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,723

score 4

前提・実現したいこと

連番BMPをPythonのOpenCVを使用し、非圧縮AVIを出力するツールを作成しております。
出力された動画は、Adobe After Effectsに読込める必要があります。

該当のソースコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import glob
import cv2
import numpy as np

path = "test\\*.bmp"
files = glob.glob(path)

fourcc = cv2.VideoWriter_fourcc("D","I","B"," ")
video  = cv2.VideoWriter("test.avi", fourcc, 30.00, (640,480), True)

for img_file in files :
    img = cv2.imread(img_file,cv2.IMREAD_UNCHANGED)
    video.write(img)

video.release()

発生している問題・エラーメッセージ

上記のコードを実行すると動画は出力されますが、サイズは0です。
また、下記のエラーメッセージが表示されます。

OpenCV: FFMPEG: tag 0x20424944/'DIB ' is not found (format 'avi / AVI (Audio Video Interleaved)')'


MJPGなどコーデックを指定し出力した動画は、プレーヤーでの再生やAfter Effectsの読込みはできます。

試したこと 1

video  = cv2.VideoWriter("test.avi", fourcc, 30.00, (640,480), True) を
video  = cv2.VideoWriter("test.avi", 0, 30.00, (640,480), True) に書き換えて実行。

データサイズのある動画が出力され、プレーヤーでの再生は可能でした。
ただ、After Effectsに読込むと、正常に再生できませんでした(真っ黒または、2フレームほどバッグっている絵になる)。

試したこと 2

cv2.VideoWriter_fourcc("D","I","B"," ") を cv2.VideoWriter_fourcc("R","A","W"," ") に書き換えて実行。
下記のエラーメッセージが表示されます。

OpenCV: FFMPEG: tag 0x20574152/'RAW ' is not supported with codec id 13 and format 'avi / AVI (Audio Video Interleaved)'
[avi @ 000002dac7fa2cc0] yuv420p rawvideo cannot be written to avi, output file will be unreadable


データサイズのある動画が出力されますが、プレイヤーやAdobe After Effectsに読込んでも、再生できませんでした。

試したこと 3

Adobe After Effects で連番BMPを非圧縮AVIとして出力した動画のfourccを確認しました。

import struct
import cv2

inputVideo = cv2.VideoCapture("AE_test.avi")
fourcc = int(inputVideo.get(6))
print (fourcc)
print (struct.pack("<I", fourcc))

# 出力結果
# 1987535218
# b'rawv'


cv2.VideoWriter_fourcc("D","I","B"," ") を
上記の出力結果の値を代入し、cv2.VideoWriter_fourcc("R","A","W","V") に書き換えて実行。
下記のエラーメッセージが表示されます。

OpenCV: FFMPEG: tag 0x20424944/'RAWV' is not found (format 'avi / AVI (Audio Video Interleaved)')'

補足情報

windows 10
python 3.7
openCV 4.1.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

あまり詳しくないならが少し調べてみました。

OpenCVはffmpegを使っているのでffmpegがサポートしているfourccを指定する必要があると思います。

ffmpegがエンコードでサポートしているfourccはffmpegのソースコード:riff.cから確認できます。
"DIB "も"rawv"もないみたいです。
このリストに記載されているfourccから選ぶ必要があると思います。

ffmpegがデコードでサポートしているfourccはffmpegのソースコード:isom.cで確認できます。
"rawv"のデコードにはサポートしているみたいですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/18 22:07

    調べて頂いた結果を教えて頂きありがとうございます。
    教えて頂きた、ffmpegのソースコードを参照しながら非圧縮が可能なエンコードを探したいと思います。

    キャンセル

  • 2019/10/23 09:29

    "AV_CODEC_ID_RAWVIDEO"をすべて試しましたが、ダメでした・・・

    キャンセル

0

http://www.fourcc.org/codecs.phpを参照しました。
HDYCではだめでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/08 21:39

    ご回答ありがとうございます。
    早速試してみました。
    残念ながらサイズのあるデータにはなりましたが、動画を再生することができませんでした。

    キャンセル

  • 2020/07/09 13:01

    早速の確認ありがとうございます。
    この質問を私もrawのavi取得のため参考にさせていただきましたので、何かお力になれればと思い、コメントさせていただきました。
    参考までに私の場合はfijiというソフトに取り込むためrawaviが必要でした。しかし別の圧縮ファイル形式yuv422という形式でもOKだとfijiのマニュアルで判明したので、ひとまずそちらの型でデータを読み込ませることにしました。
    aftereffectsも他の読み込み対応ファイル形式で読み込ませることができたらいいんですけどね。。

    この度は突然失礼しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る