2009-08-19 82 views
4

我目前正在編寫一個應用程序,從相機讀取幀,修改它們,並將它們保存到視頻文件中。我打算用ffmpeg來做。很少有關於ffmpeg的文檔。我找不到方法。有沒有人知道如何去做?如何將幀寫入視頻文件?

我需要它在unix和C或C++上完成。有沒有人可以提供一些指導?

謝謝。

編輯:

對不起,我沒有寫清楚。我想要一些開發人員API將幀寫入視頻文件。我打開相機流,我得到每一幀,然後我將它們保存到一個視頻文件與ffmpeg的公共apis中可用的API。所以使用命令行工具實際上並不能幫助我。我在ffmpeg src文件夾下看到了output_example.c。非常好,我可以直接複製代碼的某些部分而不用更改。而且我仍在尋找更簡單的方法。

此外,我正在考慮將我的應用程序移植到iPhone,據我所知,只有ffmpeg已經移植到iPhone上。 GStreamer基於glib,它都是GNU的東西。我不確定我是否可以在iPhone上使用它。所以ffmpeg現在仍然是最好的選擇。

任何意見表示讚賞。

回答

4

這可能有助於開始 - 文檔可用,但更新的功能往往記錄在ffmpeg的手冊頁中。

這些幀需要按順序編號。

ffmpeg -f image2 -r 25 -i frame_%d.jpg -vcodec libx264 -vpre hq -crf 22 video.mp4 
  • -f定義格式
  • -r定義幀速率
  • -i定義了輸入文件/秒... %d指定編號的文件..添加0的 指定填充
  • -vcodec選擇視頻編解碼器
  • -vpre指定使用壓力等叫HQ
  • -crf指定速率控制方法,用於定義X264流是如何 編碼
  • video.mp4是輸出文件
0

如果除ffmpeg之外的其他解決方案對您而言可行,您可能需要查看GStreamer。我認爲這可能對你的情況來說是正確的,並且有很多文件。

0

你可以做你需要什麼,而無需使用庫,如UNIX可以管RGBA數據到一個程序,所以你可以做:

在你的程序:

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 

我相信你也可以使用的ffmpeg這種方式,或X264。您也可以從程序中啓動編碼器,並寫入管道(如果使用庫,則整個過程很簡單)。

雖然不是你想要的,並且不適合iPhone開發,但它具有Unix自動使用第二個處理器進行編碼的優點。

相關問題