2017-01-11 69 views
2

要從視頻中獲得200x100縮略圖,我需要ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg。但是,如果源視頻與200x100的縱橫比不同,則縮略圖會變形(水平或垂直拉伸或擠壓),看起來很糟糕。使用ffmpeg生成沒有任何失真的視頻縮略圖

有沒有一種方式,ffmpeg可以找出例如,一個500x200視頻100px太寬,並從左側,取出從右邊50px50px,使得視頻400x200?並且由於400x200200x100具有相同的寬高比,所以縮略圖不會失真。

我知道還有其他工具可以對ffmpeg生成的縮略圖執行此操作,但我更願意在ffmpeg之內執行此操作,而不必再次處理縮略圖。

+0

這可能幫助:https://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio –

回答

2

您可以使用scale過濾器中的force_original_aspect_ratio選項。

ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -q:v 2 -vf "scale=200:100:force_original_aspect_ratio=increase,crop=200:100" image.jpg 
+0

當視頻比想要的縮略圖的高寬比更高或更寬時,這種工作方式是否相同?如果例如視頻寬高比爲100px,它會從左側和右側刪除相等的部分(每個都爲50px)? – user779159

+0

@LordNeckbeard - 縮放器在輸出中保留SAR,而第三方應用程序不遵守。 Photoshop,例如尊重特區對JPG而不是PNG。 Firefox對這兩種格式都表示讚賞。 – Mulvya

+0

@ user779159如果它太寬或太高,它會裁剪額外的東西。裁剪將自動居中。如果要調整裁剪座標,請參閱[裁剪過濾器文檔](https://ffmpeg.org/ffmpeg-filters.html#crop)。 – LordNeckbeard

4

如果您的縮略圖大小爲200x100固定,然後運行

ffmpeg -ss 100 -i /tmp/video.mp4 -vf "scale='if(gt(dar,200/100),100*dar,200)':'if(gt(dar,200/100),100,200/dar)',setsar=1,crop=200:100" -frames:v 1 image.jpg 

規模過濾器檢查源和比例的縱橫比,使得一名維適合黑白200x100畫布和其他過沖,除非它是一個完美比賽。然後,農作物過濾器從中心將其收穫到200x100,從而照顧出界區域。

+0

這可能導致輸出小於一個所要求的尺寸,將導致作物失敗(例如使用115:87 SAR的輸入)。 – LordNeckbeard

+0

是的,'-1'不包含SAR。糾正。 – Mulvya

相關問題