.avimp4v-->.mp4一、編碼MJPG、后綴.aviMJPG是大寫!!!#coding=utf-8from__future__importabsolute_import,division,print_functionimportcv2importwarningsimportnumpyasnp" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python OpenCV 寫入視頻

系統(tǒng) 2056 0

其實OpenCV已經(jīng)提供了寫視頻的接口,但是編碼和文件后綴的對應(yīng)真是讓人頭疼,動不動就不支持。經(jīng)過嘗試,總結(jié)出目前兩種可以正常寫入視頻的對應(yīng)關(guān)系:

  1. MJPG --> .avi
  2. mp4v -->.mp4

一、編碼MJPG、后綴.avi

MJPG是大寫!!!

            
              
                # coding=utf-8
              
              
                from
              
               __future__ 
              
                import
              
               absolute_import
              
                ,
              
               division
              
                ,
              
               print_function

              
                import
              
               cv2

              
                import
              
               warnings

              
                import
              
               numpy 
              
                as
              
               np
warnings
              
                .
              
              simplefilter
              
                (
              
              
                "always"
              
              
                )
              
              
                class
              
              
                VideoWriter
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               name
              
                ,
              
               width
              
                ,
              
               height
              
                ,
              
               fps
              
                =
              
              
                25
              
              
                )
              
              
                :
              
              
                # type: (str, int, int, int) -> None
              
              
                if
              
              
                not
              
               name
              
                .
              
              endswith
              
                (
              
              
                '.avi'
              
              
                )
              
              
                :
              
              
                # 保證文件名的后綴是.avi
              
              
            name 
              
                +=
              
              
                '.avi'
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                'video name should ends with ".avi"'
              
              
                )
              
              
        self
              
                .
              
              __name 
              
                =
              
               name          
              
                # 文件名
              
              
        self
              
                .
              
              __height 
              
                =
              
               height      
              
                # 高
              
              
        self
              
                .
              
              __width 
              
                =
              
               width        
              
                # 寬
              
              
        fourcc 
              
                =
              
               cv2
              
                .
              
              VideoWriter_fourcc
              
                (
              
              
                *
              
              
                'MJPG'
              
              
                )
              
              
                # 如果是avi視頻,編碼需要為MJPG
              
              
        self
              
                .
              
              __writer 
              
                =
              
               cv2
              
                .
              
              VideoWriter
              
                (
              
              name
              
                ,
              
               fourcc
              
                ,
              
               fps
              
                ,
              
              
                (
              
              width
              
                ,
              
               height
              
                )
              
              
                )
              
              
                def
              
              
                write
              
              
                (
              
              self
              
                ,
              
               frame
              
                )
              
              
                :
              
              
                if
              
               frame
              
                .
              
              dtype 
              
                !=
              
               np
              
                .
              
              uint8
              
                :
              
              
                # 檢查frame的類型
              
              
                raise
              
               ValueError
              
                (
              
              
                'frame.dtype should be np.uint8'
              
              
                )
              
              
                # 檢查frame的大小
              
              
        row
              
                ,
              
               col
              
                ,
              
               _ 
              
                =
              
               frame
              
                .
              
              shape
        
              
                if
              
               row 
              
                !=
              
               self
              
                .
              
              __height 
              
                or
              
               col 
              
                !=
              
               self
              
                .
              
              __width
              
                :
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                '長和寬不等于創(chuàng)建視頻寫入時的設(shè)置,此frame不會被寫入視頻'
              
              
                )
              
              
                return
              
              
        self
              
                .
              
              __writer
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                def
              
              
                close
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        self
              
                .
              
              __writer
              
                .
              
              release
              
                (
              
              
                )
              
              
                def
              
              
                main
              
              
                (
              
              
                )
              
              
                :
              
              
    width 
              
                =
              
              
                512
              
              
    height 
              
                =
              
              
                256
              
              
    vw 
              
                =
              
               VideoWriter
              
                (
              
              
                'test.avi'
              
              
                ,
              
               width
              
                ,
              
               height
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                25
              
              
                *
              
              
                50
              
              
                )
              
              
                :
              
              
                # 隨機(jī)生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關(guān)閉
              
              
    vw
              
                .
              
              close
              
                (
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    main
              
                (
              
              
                )
              
            
          

二、編碼mp4v、后綴.mp4

mp4v是小寫!!!

            
              
                # coding=utf-8
              
              
                from
              
               __future__ 
              
                import
              
               absolute_import
              
                ,
              
               division
              
                ,
              
               print_function

              
                import
              
               cv2

              
                import
              
               warnings

              
                import
              
               numpy 
              
                as
              
               np
warnings
              
                .
              
              simplefilter
              
                (
              
              
                "always"
              
              
                )
              
              
                class
              
              
                VideoWriter
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               name
              
                ,
              
               width
              
                ,
              
               height
              
                ,
              
               fps
              
                =
              
              
                25
              
              
                )
              
              
                :
              
              
                # type: (str, int, int, int) -> None
              
              
                if
              
              
                not
              
               name
              
                .
              
              endswith
              
                (
              
              
                '.mp4'
              
              
                )
              
              
                :
              
              
                # 保證文件名的后綴是.mp4
              
              
            name 
              
                +=
              
              
                '.mp4'
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                'video name should ends with ".mp4"'
              
              
                )
              
              
        self
              
                .
              
              __name 
              
                =
              
               name          
              
                # 文件名
              
              
        self
              
                .
              
              __height 
              
                =
              
               height      
              
                # 高
              
              
        self
              
                .
              
              __width 
              
                =
              
               width        
              
                # 寬
              
              
        fourcc 
              
                =
              
               cv2
              
                .
              
              VideoWriter_fourcc
              
                (
              
              
                *
              
              
                'mp4v'
              
              
                )
              
              
                # 如果是mp4視頻,編碼需要為mp4v
              
              
        self
              
                .
              
              __writer 
              
                =
              
               cv2
              
                .
              
              VideoWriter
              
                (
              
              name
              
                ,
              
               fourcc
              
                ,
              
               fps
              
                ,
              
              
                (
              
              width
              
                ,
              
               height
              
                )
              
              
                )
              
              
                def
              
              
                write
              
              
                (
              
              self
              
                ,
              
               frame
              
                )
              
              
                :
              
              
                if
              
               frame
              
                .
              
              dtype 
              
                !=
              
               np
              
                .
              
              uint8
              
                :
              
              
                # 檢查frame的類型
              
              
                raise
              
               ValueError
              
                (
              
              
                'frame.dtype should be np.uint8'
              
              
                )
              
              
                # 檢查frame的大小
              
              
        row
              
                ,
              
               col
              
                ,
              
               _ 
              
                =
              
               frame
              
                .
              
              shape
        
              
                if
              
               row 
              
                !=
              
               self
              
                .
              
              __height 
              
                or
              
               col 
              
                !=
              
               self
              
                .
              
              __width
              
                :
              
              
            warnings
              
                .
              
              warn
              
                (
              
              
                '長和寬不等于創(chuàng)建視頻寫入時的設(shè)置,此frame不會被寫入視頻'
              
              
                )
              
              
                return
              
              
        self
              
                .
              
              __writer
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                def
              
              
                close
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        self
              
                .
              
              __writer
              
                .
              
              release
              
                (
              
              
                )
              
              
                def
              
              
                main
              
              
                (
              
              
                )
              
              
                :
              
              
    width 
              
                =
              
              
                512
              
              
    height 
              
                =
              
              
                256
              
              
    vw 
              
                =
              
               VideoWriter
              
                (
              
              
                'test.mp4'
              
              
                ,
              
               width
              
                ,
              
               height
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                25
              
              
                *
              
              
                50
              
              
                )
              
              
                :
              
              
                # 隨機(jī)生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關(guān)閉
              
              
    vw
              
                .
              
              close
              
                (
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    main
              
                (
              
              
                )
              
            
          

三、視頻寫入失敗的原因

  1. 不支持對應(yīng)的編碼和后綴。目前我知道支持的是:
    * mp4v–>.mp4
    * MJPG–>.avi
  2. frame的值類型不是uint8。
  3. frame的高或者寬和新建cv2.VideoWriter設(shè)置的高或?qū)挷粚?yīng)。

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产麻豆 | 国产三级做爰在线播放最爱 | 国产福利在线观看视频 | 亚洲国产男人本色在线观看的a站 | 欧美视频 亚洲视频 | 免费一级黄色录像 | 男人资源网站 | 欧美成人精品一区二三区在线观看 | 国产成 人 综合 亚洲网 | 无毒不卡在线观看 | 欧美性啪啪| 一区在线播放 | 超乳w真性中出し冲田杏梨101 | 国产色视频一区 | 狠狠干中文字幕 | 四虎影视在线观看 | 四虎影视成人永久在线观看 | 天天爱夜夜做 | 国产成人乱码一区二区三区 | 久久久久亚洲 | 亚洲精品一区二区三区五区 | 日韩欧美视频 | 日本一区视频在线 | 国产精品久久久久孕妇 | 末成年娇小性色xxxxx视频 | 国产偷视频 | 国产成人精品实拍在线 | 色悠久久久久综合网小说 | 国产亚洲欧洲国产综合一区 | 中文字幕最新在线 | 国产一区二区三区精品久久呦 | 99久久精品免费看国产情侣 | 日韩成人午夜 | 在线播放国产精品 | 91热久久免费频精品99欧美 | 久草在线视频首页 | 女bbbbxxxx另类亚洲 | 国产欧美另类久久久品 | 久久毛片免费 | 九九99九九精彩网站 | 97免费在线视频 |