9

我試圖獲取視頻的代表性幀,以便去除可能出現在視頻中的冗餘幀。這是我用來獲取幀的。從視頻中使用ffmpeg場景變化/鏡頭檢測/圖像提取

./ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png

我也曾嘗試

./ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr thumb%04d.png

在這樣做的主要問題是模糊的。如果我只是每5秒採樣一次幀,我沒有看到任何模糊,但是使用上面的兩個命令我得到了很多模糊。

視頻可以在這裏找到,http://www.cs.umd.edu/~bharat/video.mp4

爲了採樣視頻每隔10秒,我使用下面的:

./ffmpeg -i video.mp4 -r 1/10 filename%03d.jpg

輸出使用正常取樣: sampling output

使用select的輸出: select output

但是,正常採樣可能對某些視頻不利,並且可能會產生冗餘幀。有沒有一種方法可以在ffmpeg中使用某些選項並獲取沒有此模糊的幀?如果正常採樣可以得到好的幀,那麼在附近應該有幀而不模糊。我在ffmpeg中查看了諸如scenecut之類的選項,但我並不熟悉將它們用於此應用程序。

+0

此結果預期與定期幀採樣。它是否一定需要'ffmpeg'?有很多免費的鏡頭檢測實現。 – bjou

+0

不一定,任何事情都會做,我只需要擺脫模糊的幀 – Bharat

回答

2

我建議也看看其他免費提供的鏡頭檢測實現。例如,47與約翰·馬特的Shotdetect一個自定義的閾值會產生以下結果(每一個鏡頭的第一幀): Shot Detection with jmathe's Shotdetect

但是,您的問題似乎與視頻穩定的問題要處理更多比它的場景更改或鏡頭檢測。您在上面看到的以及在OP中的模糊是視頻固有的「人工製品」,並非由於用於剪切或採樣視頻的算法。如果你想減少運動量,你應該看看this post以及看看OpenCV's Video Stabilization模塊。還有很多研究解決了這個挑戰,包括thisthis

+0

感謝您的鏈接,我明白,視頻中存在固有的模糊,什麼是令人驚訝的ffmpeg只有當您使用時選擇模糊的幀選擇選項,你的結果似乎更好,可能是由ffmpeg選擇的幀有最大的變化。 – Bharat

+0

我不確定「最大變化」是什麼意思,但您可能還想試驗一下您選擇的框架。您提供的命令選擇了I-Frame,但您也可以選擇以下任一項:'I,P,B,S,SI,SP,BI'。 – bjou

+0

我的意思是太模糊的框架看起來與普通框架不同,ffmpeg可能會將其視爲鏡頭的變化,看到P,B框架會給出什麼感覺很有趣,再次感謝,我不知道我們也可以選擇其他框架。如果我沒有記錯,應該有許多P,B幀,它如何知道選擇哪個P/B幀 – Bharat