2016-01-20 30 views
1

我想從mp4視頻文件生成gif。我想縮放它並在生成時裁剪它。從Mp4直接生成GIF - ffmpeg

我實現了從MP4(裁剪&縮放)到MP4與下面的線,(這樣我就可以與ffmpeg的提取PNG格式,並使用Imagick使動畫GIF),但我相信這是實現一個更好的方法純粹與ffmpeg。

ffmpeg -i in.mp4 -filter:v "scale=300:ih*300/iw, crop=200:500:50:80" -c:a copy out.mp4

我的問題是如何實現這個代碼在做同樣的,而是從MP4直接生成GIF。


然後我開始用MP4到GIF轉換調整,但是當調色板進來,我也不能完全理解這是怎麼回事。

我發現this answer,我做了它的工作,但我不明白如何適應縮放&裁剪。

$ ffmpeg -y -ss 30 -t 3 -i in.mp4 \ -vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png

$ ffmpeg -ss 30 -t 3 -i in.flv -i palette.png -filter_complex \ "fps=10,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" out.gif

餘部分地明白這一點確實-y -ss 30 -t 3 -i in.mp4(獲得第一個30秒,併產生3秒的gif出它)。但對於接下來的幾行,我完全失去了它實際正在做的事情。

如果有人能夠解釋每個命令的作用,或者參考解釋該主題的鏈接,那將是驚人的。

回答

1

在你的第一個命令,

ffmpeg -y -ss 30 -t 3 -i in.mp4 \ 
-vf fps=10,scale=320:-1:flags=lanczos,palettegen palette.png 

-y導致ffmpeg的覆蓋,如果輸出文件已經存在,所以沒有及時進行確認。

-vf,別名爲-filter:v,是一個視頻過濾鏈,它接受一個視頻輸入並連續處理每個指定的過濾器。因此,輸入 - >濾波器1 - >濾波器2 ... - >濾波器n - >濾波器輸出

fps=10通過根據需要刪除或複製幀來將源轉換爲此幀率,不執行插值。如果您的數據來源是20 fps,則會丟棄每隔一幀。如果它是5 fps,它會複製每一幀一次。

scale=320:-1:flags=lanczos將視頻大小調整爲320像素的寬度,將高度調整爲長度,以便保持原始寬高比。如果你想調整到320x300,你可以用300替換-1。 Lanczos是使用的縮放算法。見清單here。 Lanczos很好。

palettegen生成整個輸入流的256色調色板。通常與paletteuse一起使用。

第二個命令中的-filter_complex是當您必須將過濾器應用於多個輸入和/或需要生成多個輸出時。在這裏總結一下,詳見here

+0

非常感謝,清除了很多! – senty