導航:首頁 > 編程語言 > python讀取視頻編碼

python讀取視頻編碼

發布時間:2023-03-11 16:17:58

python的opencv,如何用imread讀取視頻的每一幀

1:可以使用opencv讀取。
2:其代碼如下:

#includehighgui.h
#includecv.h
//從攝像頭中讀入數據
int main(int argc,char** argv)
{
cvNamedWindow(Example1,CV_WINDOW_AUTOSIZE);
CvCapture* capture; //初始化一個CvCapture結構的指針
if(argc==1)
{
capture=cvCaptureFromCAM(0);//如果參數為1,則從攝像頭中讀入數據,並返回一個CvCapture的指針
} //註:《學習OpenCV》中此處用cvCreateCameraCapture為錯
else
{
capture=cvCreateFileCapture(argv[1]);
}
assert(capture!=NULL); //斷言(assert)使用,檢查capture是否為空指針,為假時程序退出,並列印錯誤消息
IplImage* frame;
while(1)
{
frame=cvQueryFrame(capture);//用於將下一幀視頻文件載入內存(實際是填充和更新CvCapture結構中),返回一個對應當前幀的指針
if(!frame)
break;
cvShowImage(Example1,frame);
char c=cvWaitKey(33);
if(c==27) break; //出發ESC鍵退出循環,讀入數據停止
}
cvReleaseCapture(capture);//釋放內存
cvDestroyWindow(Example1);
}

⑵ python3讀文件編碼錯誤怎麼辦

在python3中系統默認編碼是unicode,讀取文件經常會編碼錯誤導致報錯。


  1. 首先先確認要讀取文件的編碼,可這樣操作:

記事本打開文本文件,點擊「文件」-「另存為」查看編碼:

importcodecs
f=codecs.open(r"test.txt","r","gbk")
print(f.read())
f.close()

(示例的文件是ANSI所以使用GBK讀取)

以上就可以正確讀取想要的文件了

⑶ python處理qlv

利用OpenCV庫。
程序效果是,讀取視頻文件,設定保存的幀速率和幀大小(即視頻寬高),控制保存的視頻時間節點,由i轉換為幀數來進行控制。中間還使用了resize函數,來進行圖像的縮放。若想放大視頻,直接更改resize函數中(1280,720)參數即可。同時,可以選擇圖像擴大時所採用的插值方式。
這個程序中,僅寫出了放大的函數,並未進行視頻圖像的放大。

⑷ python 有沒有與視頻編解碼相關的模塊

挺多的,以前過用ffmpeg的包,可以做視頻壓縮解壓,轉換。格式工廠用的包中就有它。PIL用於圖像處理。opencv用於視頻截圖還有其它的處理。

⑸ python 讀取文件時能指定編碼嗎

代碼如下:

import os
import codecs
filenames=os.listdir(os.getcwd())
out=file("name.txt","w")
for filename in filenames:
out.write(filename.decode("gb2312").encode("utf-8"))
out.close()

將執行文件的當前目錄及文件名寫入到name.txt文件中,以utf-8格式保存
如果採用ANSI編碼保存,用如下代碼寫入即可:

復制代碼代碼如下:

out.write(filename)

打開文件並寫入
引用codecs模塊,對該模塊目前不了解。在此記錄下方法,有空掌握該模塊功能及用法。

復制代碼代碼如下:

import codecs
file=codecs.open("lol.txt","w","utf-8")
file.write(u"我")
file.close()

讀取ANSI編碼的文本文件和utf-8編碼的文件
讀取ANSI編碼文件
建立一個文件test.txt,文件格式用ANSI,內容為:

復制代碼代碼如下:

abc中文

用python來讀取

復制代碼代碼如下:

# coding=gbk
print open("Test.txt").read()

結果:abc中文
讀取utf-8編碼文件(無BOM)
把文件格式改成UTF-8:

復制代碼代碼如下:

結果:abc涓 枃

顯然,這里需要解碼:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
import codecs
print open("Test.txt").read().decode("utf-8")

結果:abc中文
讀取utf-8編碼文件(有BOM)
某些軟體在保存一個以UTF-8編碼的文件時,默認會在文件開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM)。在有些軟體可以控制是否插入BOM。如果在有BOM的情況下,在讀取時需要自己去掉這些字元,python中的codecs mole定義了這個常量:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")

結果:abc中文
在看下面的例子:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
data = open("name_utf8.txt").read()
u=data.decode("utf-8")
print u[1:]

打開utf-8格式的文件並讀取utf-8字元串後,解碼變成unicode對象。但是會把附加的三個字元同樣進行轉換,變成一個unicode字元。該字元不能被列印。所以為了正常顯示,採用u[1:]的方式,過濾到第一個字元。
注意:在處理unicode中文字元串的時候,必須首先對它調用encode函數,轉換成其它編碼輸出。
設置python默認編碼
復制代碼代碼如下:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
print sys.getdefaultencoding()

今天碰到了 python 編碼問題, 報錯信息如下

復制代碼代碼如下:

Traceback (most recent call last):
File "ntpath.pyc", line 108, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 36: ordinal not in range(128)

顯然是當前的編碼為ascii, 無法解析0xa1(十進制為161, 超過上限128). 進入python console後, 發現默認編碼確實是 ascii, 驗證過程為:
在python2.6中無法調用sys.setdefaultencoding()函數來修改默認編碼,因為python在啟動的時候會調用site.py文件,在這個文件中設置完默認編碼後會刪除sys的setdefaultencoding方法。不能再被調用了. 在確定sys已經導入的情況下, 可以reload sys這個模塊之後, 再 sys.setdefaultencoding('utf8')
復制代碼代碼如下:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
print sys.getdefaultencoding()

確實有效, 根據 limodou 講解, site.py 是 python 解釋器啟動後, 默認載入的一個腳本. 如果使用 python -S 啟動的話, 將不會自動載入 site.py.
上面寫的挺啰嗦的.
==================================
如何永久地將默認編碼設置為utf-8呢? 有2種方法:
==================================
第一個方法<不推薦>: 編輯site.py, 修改setencoding()函數, 強制設置為 utf-8
第二個方法<推薦>: 增加一個名為 sitecustomize.py, 推薦存放的路徑為 site-packages 目錄下
sitecustomize.py 是在 site.py 被import 執行的, 因為 sys.setdefaultencoding() 是在 site.py 的最後刪除的, 所以, 可以在 sitecustomize.py 使用 sys.setdefaultencoding().

復制代碼代碼如下:

import sys
sys.setdefaultencoding('utf-8')

既然 sitecustomize.py 能被自動載入, 所以除了設置編碼外, 也可以設置一些其他的東西
字元串的編碼

復制代碼代碼如下:

s1='中文'

像上面那樣直接輸入的字元串是按照代碼文件的編碼來處理的,如果是unicode編碼,有以下三種方式:

復制代碼代碼如下:

1 s1 = u'中文'
2 s2 = unicode('中文','gbk')
3 s3 = s1.decode('gbk')

unicode是一個內置函數,第二個參數指示源字元串的編碼格式。
decode是任何字元串具有的方法,將字元串轉換成unicode格式,參數指示源字元串的編碼格式。
encode也是任何字元串具有的方法,將字元串轉換成參數指定的格式。

⑹ 【MMD】用python解析VMD格式讀取

  MikuMikuDance(簡稱MMD)是一款動畫軟體,早期視為Vocaload角色製作動畫的軟體,現在還經常能在B站等視頻網站,或一些動畫網站(某I站)看到MMD作品。
  我在高中也簡單學過操作這款軟體以及PE、水杉等軟體,學會了簡單k幀、套動作、調渲染、加後期、壓縮等技術,這與我學習計算機專業有很大的關系(雖然學校學的和這個八竿子打不著,或許我應該學美術去),現在已經分不清很多東西了,封面靜畫就是雜七雜八過氣MME一鍋扔的成果,得益於G渲的強大,還能看出一點效果。
  現在我想學一些3D的開發,包括用程序讀取模型、動作等,很快我就想到之前用過的MMD。
  一些3D姿勢估計(3D pose estimate)或許能得到骨骼位置以及PAF(骨骼間關系),但我需要知道3D動畫是如何儲存動作數據的,才能想到怎樣將姿勢估計得到的數據轉化為動作數據。
  因此我找了一些資料解析MMD的動作數據VMD(Vocaload Mation Data)文件,並寫下這篇記錄。

  本文會用python解析vmd文件,並糾正上述文章的一點錯誤。
  根據MMD的規矩,上借物表:

封面靜畫:

  首先,vmd文件本身是一個二進制文件,裡面裝著類型不同的數據:uint8、uint32_t、float,甚至還有不同編碼的字元串,因此我們需要二進制流讀入這個文件。
  vmd格式很像計算機網路的協議格式,某某位是什麼含義,區別是,vmd文件的長度 理論 上是無限的,讓我們來看看。
  vmd的大致格式如下:

  最開始的就是 頭部(header) ,看到這就有十分強烈的既視感:

  其中, 版本信息(VersionInformation) 長度為30,是ascii編碼的字元串,翻譯過來有兩種,一為「Vocaloid Motion Data file」,二為「Vocaloid Motion Data 0002」,長度不足30後用(或者說b'x00')填充。這是由於vmd版本有兩種,大概是為了解決模型名稱長度不足,因此後續隻影響模型名稱的佔用長度。
   模型名稱(ModelName) ,是動作數據保存時用的模型的模型名,通過這個我們可以獲取到那個名稱,我們知道,一個動作數據想要運作起來,只要套用模型的骨骼名稱是標準的模板就可以,因此我想像不出這個名稱有何用處,或許某些模型帶有特殊骨骼,例如翅膀之類的,這樣能方便回溯?模型名稱的長度根據版本而決定,version1為10,version長度為20。編碼原文寫的是shift-JIS,是日語編碼,這樣想沒錯,然而我試驗後發現並非如此,例如經常改模型的大神 神帝宇 的模型,他的模型名稱用shift-JIS為亂碼,用gb2312竟然能正常讀出來;還有 機動牛肉 大神的模型,他的模型名稱用gb2312無法解碼,用shift-JIS解碼竟然是正常的簡體中文???怎麼做到的?

  骨骼關鍵幀,分為兩部分:骨骼關鍵幀數、骨骼關鍵幀記錄:

  我們可以查一下,每個骨骼關鍵幀的數量為111位元組。

  一開始還沒發現,旋轉坐標竟然有四個,分別為x, y, z, w,急的我去MMD里查看一下,發現和我印象中沒有什麼差別

  為何補間曲線的類型不確定呢?上面csdn博客的教程說 「uint8_t那裡有冗餘,每四個只讀第一個就行」 。說的沒有問題,首先我們要清楚這個補間曲線坐標的含義。
  我們打開MMD,讀入模型,隨意改變一個骨骼點,記錄幀,就會發現左下角會出現補間曲線。

  後面的格式與這個格式大同小異。

  表情關鍵幀分為:表情關鍵幀數、表情關鍵幀記錄:

  鏡頭關鍵幀分為:鏡頭關鍵幀數、鏡頭關鍵幀記錄:

  距離是我們鏡頭與中心紅點的距離,在MMD中,我們可以通過滑輪改變

  Orthographic似乎是一種特殊的相機,沒有近大遠小的透視關系(不確定),不過在我的實驗中,它一直取值為0。和上面的已透視沒有關系,當取消已透視時,透視值會強制為1。
  下面的骨骼追蹤似乎沒有記錄,可能是強制轉換成骨骼所在的坐標了。
  後面的格式與這個格式大同小異。

  表情關鍵幀分為:光線關鍵幀數、光線關鍵幀記錄:

  rgb顏色空間之[0, 1]之間的數,類似html的RGB(50%, 20%, 30%)這種表示方法,轉換方式就是把RGB值分別除以256。
  光線投射方向是[-1, 1]之間的小數。正所對的投射方向是坐標軸的負方向,例如將Y拉到1, 光線會從上向下投影。

  我依舊會使用面向對象的方式構建VMD類,不過構造方法無力,屬性太多,我選擇用靜態方法添加屬性的方式構建對象

  隨意掰彎一些關節並注冊、使用:

output:

  因為前面提到的編碼模式,我選擇用gb2312解碼,在很多(也許是大部分)動作數據都會報錯,可以去掉編碼方式:

  我們沒有移動方塊骨骼,因此位置信息都是0。
  不喜歡看歐拉角的話,可以寫一個轉換方法:

  這樣只要調用:

即可得到轉換成歐拉角的結果,同樣的方式還可以編寫轉換RGB、弧度、角度等
  python內置的json包可以很方便得將字典轉換成json格式文檔儲存。
  我們也可以試著寫一些將VMD轉換成vmd文件的方法。

  通過學習VMD的文件結構,大致了解了儲存動作數據的格式和一些方法,或許可以類比到一些主流的商業3D軟體上。
  讀取程序並不難,我寫程序的很多時間都是查二進制操作消耗的,通過這個程序,還鞏固了二進制操作的知識。
  我在google上找到了一個包 saba ,專門用於操控MMD的文件,包括模型、動作數據等

  現在學一下圖形學,等學有所得再做出更多東西。

閱讀全文

與python讀取視頻編碼相關的資料

熱點內容
linuxgo開發環境 瀏覽:922
海康攝像螢石雲伺服器 瀏覽:814
安卓手機怎麼改安卓版名 瀏覽:147
雅思聽力807詞彙pdf 瀏覽:897
黃豆私人加密 瀏覽:192
java分鍾轉換小時 瀏覽:245
易語言伺服器如何提高 瀏覽:591
網站主機伺服器地址查看 瀏覽:859
演算法學不會能當程序員嗎 瀏覽:119
程序員技術交流研究 瀏覽:814
javaresponse文件 瀏覽:734
linuxrar壓縮文件夾 瀏覽:218
魅藍手機連接不上伺服器怎麼回事 瀏覽:379
工行app怎麼改已綁定銀行卡 瀏覽:533
oppo晶元程序員 瀏覽:602
oppok3應用怎麼加密 瀏覽:327
電腦軟盤怎麼加密碼 瀏覽:815
伺服器光交換機有什麼用 瀏覽:708
app上怎麼拍蛙小俠 瀏覽:217
志高聊天app怎麼下載 瀏覽:635