我的目標是將影像 .jpg 轉換為 .mp4 視頻,然后在創建的視頻上添加 .gif 疊加層。問題是創建的視頻上的 GIF 覆寫沒有播放/回圈。
這是 image -> video 的命令:
"-framerate 1/10 -i image.jpg -vf scale=720:1280 -t 10 -pix_fmt yuv420p -c:v libx264 -movflags faststart output.mp4"
這成功地從我的影像中創建了一個 10 秒的視頻。
這是將 gif 應用為覆寫的命令:
-i video.mp4 -ignore_loop 0 -i animated.gif -filter_complex '[1:v]scale=321.0:-1[ovrl0];[0:v][ovrl0]overlay=160.5:487.28:shortest=1' -codec:a copy -codec:v libx264 -preset ultrafast output.mp4
覆寫已正確應用,但根本沒有播放或回圈播放。
我不知道我做錯了什么,因為最后一個命令(覆寫)在從經典視頻檔案(例如從錄制的相機或其他東西)觸發時運行良好 - > gif 按預期回圈。
所以我假設真正的問題來自我從影像創建的視頻,但我得到的結果似乎很好,所以找不到創建的影像或視頻有什么問題。
有人可以幫我解決它并理解這個案例嗎?
uj5u.com熱心網友回復:
您的 (image->video) 在 10 秒內只有一幀。我相信默認情況下,輸出流配置是從第一個輸入中提取的,因此它的幀速率設定為 0.1 fps。(不是 100% 確定誰實際設定了什么,但這應該是預期的行為)。因此,輸出視頻也只有一幀,因此,它不會顯示任何 gif 影片。您需要使用更高的幀率。
video.mp4假設 gif 幀速率為 25 fps的簡單解決方案:
-i video.mp4 -ignore_loop 0 -i animated.gif \
-filter_complex '[1:v]scale=321.0:-1[ovrl0];\
[0:v]fps=25[main0];\
[ovrl0]overlay=160.5:487.28:shortest=1' \
-codec:a copy -codec:v libx264 -preset ultrafast output.mp4
如果您想要盡可能低的幀率,請更改fps=25為實際的 gif 幀率。
或者,您可以在一個命令中完成整個操作:
-ignore_loop 0 -i animated.gif \
-loop 1 -i image.jpg \
-filter_complex '[0:v]scale=321.0:-1[ovrl0];\
[1:v]scale=720:1280[main0];\
[main0][ovrl0]overlay=160.5:487.28' \
-t 10 -pix_fmt yuv420p -c:v libx264 -movflags faststart output.mp4
我認為這應該使輸出的幀率與 gif 的幀率相匹配。如果沒有,請插入-r xx上面的輸出選項。
我在您的第二個命令中看到音頻流設定為復制。如果您在 2 個命令之間添加了音頻,您也可以將其添加到此統一命令中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514725.html
