2011-09-19 50 views
5

如何將視頻文件(例如mpeg)轉換爲圖像集合?如何將視頻文件(例如mpeg)轉換爲圖像集合?

理想的答案將覆蓋使用可用庫的C++和Java,以及如何針對某些常見視頻格式手動去除視頻文件中的單個幀。

+0

Don Reba現在的答案很好,我會接受它,除非有人提供更徹底的答案。很明顯,我可以看看ffmpeg的源代碼來查看細節,但是如果有一個參考比原始代碼更容易閱讀,那麼將會被讚賞。另外,Java中有沒有這樣的庫? –

回答

6

無損地提取所有幀,使用

ffmpeg -i "$input_file" -f image2 "outdir/%05d.png" 

如果你喜歡一個不同的輸出格式,只是改變.png;默認ffmpeg將從該擴展中推斷文件類型。

選項-f image2告訴ffmpeg寫入一系列圖像。 "outdir/%05d.png"給出了一個文件名模式,在這種情況下「5-digit frame number.png」。

如果您只想提取每秒n幀,請在"$input_file"之後添加選項-r n。 (我認爲ň可以浮點)。

在您的影片的Motion JPEG(MJPEG)的情況下,改用:

ffmpeg -i "$input_file" -vcodec copy -f image2 "outdir/%05d.jpg" 

這直接從視頻流解壓縮幀,這是更快,顯然使用更少的磁盤空間。

欲瞭解更多信息,請參閱手冊頁或the documentation(搜索image2)。

+0

這是一個更好的答案。 –

3

您可以使用ffmpeg-vcodec png來完成此操作。例如,這將轉化成my_video.avi幀,五位數字:

的ffmpeg -i my_video.avi -vcodec PNG幀%05d.png

您還可以根據需要指定所需幀率和分辨率。您可以運行ffmpeg -codecs查看所有可用的格式。

+0

謝謝!我很高興這很容易。 –

+0

你有沒有試過,你確定它有效?它支持jpg,gif,bmp嗎? –

+0

我試過了。您可以運行'ffmpeg -codecs'來查看支持的內容。 Gif和bmp似乎在那裏;不確定關於JPG。 –

0

也許你可以在ffmpeg的libavcodec庫中使用apiexample.c,它可以讓你看到如何獲取一個幀緩衝區,以便輕鬆地在MPEG流中進行編碼。

或者,您可以使用Gstreamer這是一個更加整潔的框架。

對於Java,請嘗試使用Java Media Framework

相關問題