.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條評論
主站蜘蛛池模板: 免费观看欧美精品成人毛片 | 波多野结衣 久久 | 国产在线19禁免费观看 | www.淫| 久久精品一区二区影院 | 亚洲国产欧洲 | 露脸真实国产精品自在 | 日韩有码第一页 | 免费播放欧美毛片欧美a | 99久久综合精品免费 | 青青草一区二区免费精品 | 天天夜天干天天爽 | 狠狠综合视频精品播放 | 国产精品成人观看视频国产奇米 | 亚洲欧美中文字幕专区 | 欧美一区二区在线观看视频 | 亚洲国产婷婷香蕉久久久久久 | 欧美高清69hd | 久久精品国产99久久99久久久 | 天天干网站| h视频网站在线观看 | 亚洲xoxo| 大尺度视频网站久久久久久久久 | 在线 | 一区二区三区四区 | 国产成人综合精品一区 | 国产成人咱精品视频免费网站 | 亚洲欧美国产18 | 依人成人综合网 | 亚洲欧洲一区二区三区久久 | 成人一级免费视频 | 狠狠干天天| 日本高清中文字幕一区二区三区a | 99免费在线观看视频 | 日本一级毛片中文字幕 | 九九九九精品视频在线播放 | 成人免费看毛片 | 五月开心婷婷 | 97在线成人免费视频观看 | 亚洲欧美日韩高清在线看 | 99热最新网址 | 日日噜噜噜夜夜爽爽狠狠图片 |