2017-01-31 35 views
0

我正在嘗試使用OpenCV(C++)讀取視頻文件,將濾鏡應用於每個幀並將新的修改後的幀寫入輸出文件。 代碼的關鍵部分是這些:OpenCV(C++):寫入與輸入相比生成大文件

int out_format = CV_FOURCC('M','P','4','2'); // can be another one 
double fps = media.get(CV_CAP_PROP_FPS), 
     width = media.get(CV_CAP_PROP_FRAME_WIDTH), 
     height = media.get(CV_CAP_PROP_FRAME_HEIGHT); 

// On Linux FFMPEG is used to write videos 
VideoWriter writer("./" + outputname + ".mkv", out_format, fps, Size(width, height)); 
....... 
....... 
writer.write(newFrame); // Mat newFrame 

事實是,我與編解碼器和視頻輸出格式不精通,所以我想知道爲什麼一個文件,該文件是大約280 MB產生的輸出2 GB。

這是一個編解碼器的問題?我曾嘗試DIVX,MPEG和其他。此外,一些輸出格式必須與特定的編解碼器一起使用。

+0

你能檢查輸入視頻的編碼格式和比特率是什麼嗎? – Steeve

+0

比特率看起來是23.67,輸入的四位數是AVC1 – diningphil

+0

你可以嘗試調用'writer.set(VIDEOWRITER_PROP_QUALITY,0.1);'在寫入之前?根據[this],默認設置似乎爲100%質量(http://docs.opencv.org/trunk/d4/d15/group__videoio__flags__base.html#gga41c5cfa7859ae542b71b1d33bbd4d2b4a1cc2ab47f60a115ff9624ff71715b93b)。 – Steeve

回答

0

嘗試使用 'M', 'P', '4', 'V' 具有的.mp4容器的編解碼器,即,設置擴展到您的文件名作爲something.mp4

對於MP4容器,你也可以試試MPEG,MJPG,FMP4