2012-08-10 284 views
5

有沒有什麼辦法(通過腳本或最好是一些參數在調用ffmpeg,我錯過了)從avi文件提取幀和忽略順序重複幀,因此只能查看增量/變化,能夠瀏覽圖片嗎?FFMPEG - 如何提取幀作爲圖像,同時刪除順序重複幀

我經常需要在工作和很多時間記錄會議,我在看的客戶端屏幕在我們通過電話交談時沒有改變。會議結束後,我需要將這些圖像作爲我們文檔和規範收集的一部分。

我知道我可以輸出每一幀,並通過任何給定的重複文件移除工具運行它們,但是這會刪除所有重複的幀。所以,如果提取的幀如下所示:

A,A,A,B,B,B,B,C,C,A,A,C,C,C,B,B,B ......

通過一個典型的重複文件卸妝運行它們,我會得到:A,B,C

我想的是:A,B,C,A,C,B

的我目前用來提取圖像的命令是:

ffmpeg.exe -i file.avi -ss 0 -sameq -f image2 -r 1 im年齡%5d.png

我事先收到了每一幀(從上面刪除了-r 1),但是這產生了太多需要處理的幀,因爲這些在線會議可能需要幾個小時,所以現在,我從文件中獲得每秒一幀。

基於Windows的解決方案會更好,但是,我相信其他人會對其他平臺上的解決方案感興趣(如果有的話)。

任何解決方案或點在正確的方向非常讚賞。

+0

你有沒有找到一個解決這個?我正在尋找幾乎相同的東西。 – 2012-12-12 09:24:07

回答

7

你試過-vsync 0選項嗎?

+0

接近,但是當我嘗試它時,'fdupes'仍然發現更多連續相同的幀來剔除。 – 2013-10-23 21:40:45

+1

+1在我的情況(低幀率)我有每個幀重複50次。使用此選項,每1000個非重複幀只有1個重複幀。 – user2518618 2015-02-26 14:36:36

+0

爲我輸入完全的輸入幀數。也許有一些所有黑色過渡框架都是作爲其他評論者的副本彈出的? – 2017-03-04 18:20:21

0

您可能會通過mpdecimate視頻過濾器達到它(其次是setpts過濾器爲正確的時間)。
使用此選項:

-vf mpdecimate,setpts=N/FRAME_RATE/TB 

也許它不會與你原來的命令工作,你需要用它來你的原始視頻首先轉換爲視頻,而無需重複幀:

ffmpeg.exe -i file.avi -vf mpdecimate,setpts=N/FRAME_RATE/TB outfile.avi 

,然後用用於產生圖像序列的outfile.avi

(在必要的情況下,過濾器mpdecimate可通過其選項hilofrac但默認值做工精細調整。)