簡體   English   中英

直接從Mp4生成Gif-ffmpeg

[英]Generating Gif from Mp4 directly - ffmpeg

我正在嘗試從mp4視頻文件生成gif。 我想縮放並在生成時對其進行裁剪。

我通過下面的代碼實現了從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的轉換,但是當調色板出現時,我無法完全了解發生了什么。

我找到了這個答案 ,並使之起作用,但是我不明白如何適應縮放和裁剪。

$ 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秒並-y -ss 30 -t 3 -i in.mp4生成3秒gif)。 但是對於接下來的幾行,我完全迷失了它的實際作用。

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

在你的第一個命令,

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 ,是視頻filterchain,這需要一個視頻輸入並連續地處理每個指定的過濾器。 所以輸入 - >濾波器1 - >過濾器2 ... - >過濾器N - >濾波器輸出

fps=10通過丟棄或重復幀作為所需的源到這個幀率轉換,無插補進行。 如果你的來源是20幀,這將下降每隔一幀。 如果是5個FPS,它會復制每幀一次。

scale=320:-1:flags=lanczos使原來的寬高比保持不變調整視頻到的320個像素的寬度和高度來的長度。 如果你想調整到320x300,你將取代-1300 Lanczos是使用的縮放算法。 在這里查看清單。 蘭克澤斯是好的。

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

-filter_complex在你的第二個命令時,你必須使用過濾器,多個輸入和/或需要生成多個輸出。 這里要總結一點點,請看這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM