<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          OpenCV保存H264視頻的問(wèn)題

          共 3741字,需瀏覽 8分鐘

           ·

          2021-08-25 13:26

          環(huán)境

          • windows 10 64bit
          • opencv 4.5.3

          前言

          看到有小伙伴在聊,如何將目標(biāo)檢測(cè)的結(jié)果保存成視頻的相關(guān)問(wèn)題?本篇我們就來(lái)看看。

          opencv保存視頻

          在絕大多數(shù)的目標(biāo)檢測(cè)項(xiàng)目中,都是使用opencv這個(gè)開源的計(jì)算機(jī)視覺(jué)庫(kù)來(lái)進(jìn)行圖片、視頻或者攝像頭的讀寫。

          關(guān)于視頻保存,來(lái)看下面的代碼示例

          import cv2

          cap = cv2.VideoCapture('test.mp4')

          width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
          height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
          fps = cap.get(cv2.CAP_PROP_FPS)
          fourcc = int(cv2.VideoWriter_fourcc(*'MJPG'))

          out = cv2.VideoWriter('output.avi', fourcc, fps, (width,  height))

          while cap.isOpened():
              ret, frame = cap.read()
              if not ret:
                  break

              out.write(frame)
              cv2.imshow('frame', frame)
              if cv2.waitKey(1) == ord('q'):
                  break

          cap.release()
          out.release()
          cv2.destroyAllWindows()

          主要是VideoWriter對(duì)象,這里需要幾個(gè)重要參數(shù),輸出文件名、寬width、高height、幀率fpsfourcc。除了fourcc,其它幾項(xiàng)都很好理解。

          FourCC是一個(gè)4字節(jié)碼,用來(lái)表示視頻編碼器,網(wǎng)站 fourcc.org 列出了所有可用的編碼器。在VideoWriter中既可以寫成*'MJPG',也可以寫成'M', 'J', 'P', 'G'。但是并不是說(shuō),所有的編碼器都可以使用。

          使用H264編碼器

          在上面代碼的基礎(chǔ)上我們修改一下,使用h264編碼器

          import cv2

          cap = cv2.VideoCapture('test.mp4')

          width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
          height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
          fps = cap.get(cv2.CAP_PROP_FPS)
          fourcc = int(cv2.VideoWriter_fourcc(*'H264'))

          out = cv2.VideoWriter('output.mp4', fourcc, fps, (width,  height))

          # 后面代碼省略了

          執(zhí)行代碼后,報(bào)錯(cuò)了

          OpenCV: FFMPEG: tag 0x34363248/'H264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)'
          OpenCV: FFMPEG: fallback to use tag 0x31637661/'avc1'

          Failed to load OpenH264 library: openh264-1.8.0-win64.dll
                  Please check environment and/or download library: https://github.com/cisco/openh264/releases

          [libopenh264 @ 000001fe3bfcb240] Incorrect library version loaded
          [ERROR:0] global /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2774) open Could not open codec libopenh264, error: Unspecified error
          [ERROR:0] global /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2791) open VIDEOIO/FFMPEG: Failed to initialize VideoWriter

          從錯(cuò)誤信息中可以看到,H264字節(jié)碼并不被支持,自動(dòng)幫你替換成了avc1opencv默認(rèn)使用ffmpeg框架來(lái)處理視頻,但是ffmpeg并沒(méi)有h264解碼器。報(bào)錯(cuò)之外,還提供了一個(gè)解決方案,那就是去使用cisco開源的openh264。

          接下來(lái)去站點(diǎn) https://github.com/cisco/openh264/releases 下載1.8.0版本的dll文件,并和源碼文件放在同一級(jí)目錄,然后將fourcc也改為avc1,執(zhí)行代碼

          opencv videowriter h264

          看到,報(bào)錯(cuò)信息不見(jiàn)了,針對(duì)生成的mp4文件,使用ffmpeg命令查看其信息

          Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1440x1080, 538 kb/s, 29.92 fps, 29.92 tbr, 29917 tbn, 59834 tbc (default)

          可以看到,視頻編碼確實(shí)是h264。

          為什么不內(nèi)置h264

          這主要是許可證的問(wèn)題,libx264是基于GPL的,而ffmpeg要使用libx264的話,必須--enable-gpl,而opencv則用的是MIT許可。具體的,可以看看這個(gè)鏈接 https://github.com/opencv/opencv-python/issues/299


          努力分享優(yōu)質(zhì)的計(jì)算機(jī)視覺(jué)相關(guān)內(nèi)容,歡迎關(guān)注:

          個(gè)人微信(如果沒(méi)有備注不拉群!
          請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會(huì)分享


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風(fēng)格指南


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!



          下載3 CVPR2021

          AI算法與圖像處公眾號(hào)后臺(tái)回復(fù):CVPR,即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

          點(diǎn)亮 ,告訴大家你也在看




          瀏覽 305
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩老熟| 天天操天天操天天逼天天逼天天日天天逼 | 久久香蕉网| 疼啊……草啊……视频 | 成人娱乐网|