2011-10-04 71 views
1

是否有任何簡單的小型庫或代碼示例在C++中編寫未壓縮的avi視頻文件?
我找到的每一個資源都使用視頻窗口,我需要這是可移植的。編寫未壓縮的AVI視頻

我試過看AVI容器的文檔,但它看起來非常麻煩。

回答

0

我自己沒有做過,但我建議使用libavformat,部分ffmpeg(LGPLv2.1/GPLv2 +)。

0

如果你想要的東西,是超級容易,然後編寫BMP的磁盤作爲一個編號序列,然後通過system()或類似這樣的東西調用ffmpeg

ffmpeg -i picture_%04d.bmp -r 15 -vcodec rawvideo -y output.avi 

注:-r參數指示框架你想要最終的電影的速度。

通過調用ffmpeg所基於的libavformat/libavcodec庫,可以獲得相同的結果,但這可能不符合您的「小」和「簡單」要求。

+0

由於不得不讀取/寫入文件,性能方面會造成巨大損失。在典型的應用程序中,文件I/O大於任何算法處理的成本。 –

0

總是有OpenCV,它是多平臺的,並且相對容易將數據推入。

或者 - 您總是可以將視頻數據傳輸到另一個可執行文件。

例如,在UNIX中,你可以這樣做:

在你的程序:

char myimage[640*480*4]; 
// read data into myimage 
fputs(myimage,1,640*480*4,stdout); 

而且在腳本運行您的程序:

./myprogram | \ 
mencoder /dev/stdin -demuxer rawvideo -rawvideo w=640:h=480:fps=30:format=rgba \ 
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=9000000 \ 
-oac copy -o output.avi 

(請注意,這不壓縮視頻 - 未壓縮僅僅是改變mencoder命令行的問題)

I bel即使你也可以用這種方式使用ffmpeg,或者x264。你也可以從你的程序中啓動編碼器,並寫入管道(如果你使用庫,使整個過程很簡單) - 這應該在Windows,Linux或Mac上工作(對mencoder命令進行微小的修改)線)。

顯然沒有許可證的問題是(除了mencoder的可執行文件的分佈),因爲你不鏈接到任何代碼或編譯的東西。

雖然不太你想要什麼,但它確實有優勢第二個處理器將自動用於編碼。