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

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python OpenCV 寫入視頻

系統 2124 0

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

  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
              
                (
              
              
                '長和寬不等于創建視頻寫入時的設置,此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
              
              
                )
              
              
                :
              
              
                # 隨機生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關閉
              
              
    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
              
                (
              
              
                '長和寬不等于創建視頻寫入時的設置,此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
              
              
                )
              
              
                :
              
              
                # 隨機生成一幅圖像
              
              
        frame 
              
                =
              
               np
              
                .
              
              random
              
                .
              
              randint
              
                (
              
              
                0
              
              
                ,
              
              
                255
              
              
                ,
              
              
                (
              
              height
              
                ,
              
               width
              
                ,
              
              
                3
              
              
                )
              
              
                ,
              
               dtype
              
                =
              
              np
              
                .
              
              uint8
              
                )
              
              
                # 寫入圖像
              
              
        vw
              
                .
              
              write
              
                (
              
              frame
              
                )
              
              
                # 關閉
              
              
    vw
              
                .
              
              close
              
                (
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    main
              
                (
              
              
                )
              
            
          

三、視頻寫入失敗的原因

  1. 不支持對應的編碼和后綴。目前我知道支持的是:
    * mp4v–>.mp4
    * MJPG–>.avi
  2. frame的值類型不是uint8。
  3. frame的高或者寬和新建cv2.VideoWriter設置的高或寬不對應。

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品道一区二区三区 | 高清不卡一区二区 | 免费黄色av| 这里只有精品视频 | 在线国产一区 | 久久久久欧美精品网站 | 这里只有精品99re | 成人免费激情视频 | 国产精品爱久久久久久久电影 | 亚洲午夜网站 | 嫩草91| 成人免播放器午夜视频 | 久草免费福利资源站 | 国产在线91精品入口首页 | 亚洲国产精品91 | 成人午夜在线 | 亚洲午夜成激人情在线影院 | 国产精品v欧美精品v日韩精品 | 麻豆av免费观看 | 欧美精品一区二区三区久久 | 亚洲精品视频在线 | 精品中文字幕一区二区 | 成人国产精品一区 | 黄色一级小视频 | 99久久婷婷 | 欧美一级毛片在线播放 | 中文乱码一二三四有限公司 | 日韩黄色影视 | 毛片a | 被摁着灌浓精囚禁高h1v1 | 99久久精品免费观看国产 | www.精品| 亚洲欧美一区二区三区综合 | 亚洲一区二区三区四区在线观看 | 成人精品一区 | 国产极品福利视频在线观看 | 天天透天天干 | 奇米中文字幕 | 欧美日韩国产一区二区三区 | 山岸逢花在线观看无删减 | 国产精品成人一区二区1 |