我正在嘗試在 Ubuntu Linux 上的 bash 腳本中使用帶有 ffmpeg 的 mininterpolate 過濾器的兩幀(png 影像)制作一個快速簡單的變形視頻。目的是稍后在不同的視頻編輯器中使用變形作為相似視頻之間的過渡。
它將適用于 3 幀/影像,但僅使用 2 幀/影像會失敗。
首先是有效的代碼:3幀
這是使用三個 1080p png 檔案:
test01_01.png
test01_02.png
test01_03.png
input01="test01_d.png"
ffmpeg -y -fflags genpts -r 30 -i $input01 -vf "setpts=100*PTS,minterpolate=fps=24:scd=none" -pix_fmt yuv420p "test01.mp4"
這需要一些處理時間,然后創建一個 414kb、大約三秒的變形 mp4 視頻,從第一幀開始,變形到第二幀,然后變形到第三幀。
失敗的代碼:2幀
這僅使用了兩個相同的 1080p png 檔案:
test02_01.png
test02_02.png
input01="test02_d.png"
ffmpeg -y -fflags genpts -r 30 -i $input01 -vf "setpts=100*PTS,minterpolate=fps=24:scd=none" -pix_fmt yuv420p "test02.mp4"
這幾乎立即創建了一個 262位元組損壞的 mp4 檔案。除了幀數之外沒有任何區別。
我嘗試過的事情:
我已經嘗試過使用 Ubuntu 默認 repo 版本的 ffmpeg,以及靜態 64 位 5.0 和 git-20220108-amd64 版本,結果都相同。
我還嘗試使用 2 幀 mp4 檔案作為輸入,結果相同。
想法?
這是ffmpeg中的錯誤還是我做錯了什么?
我也愿意接受任何關于使用其他 Linux 兼容軟體創建這樣的變形的建議。
感謝您的任何見解!
uj5u.com熱心網友回復:
它沒有記錄,但看起來minterpolate過濾器至少需要 3 個輸入幀。
我們可以使用 5 個輸入幀創建更長的視頻,并保留相關部分。
為了獲得與僅使用兩個輸入影像應用 Minterpolate 濾波器相同的輸出,我們可以使用以下解決方案:
- 定義兩個輸入流:
設定test02_01.png為第一個輸入和test02_02.png第二個輸入。 -stream_loop
使用(test02_01.png重復兩次并test02_02.png重復 3 次)將每個影像至少回圈兩次。- 將輸入幀速率設定為 0.3 fps(相當于
-r 30和setpts=100*PTS)。
輸入引數如下:-r 0.3 -stream_loop 1 -i test02_01.png -r 0.3 -stream_loop 2 -i test02_02.png. concat使用過濾器連接兩個輸入流。- 將
minterpolatefiler 應用于級聯輸出。
上述階段的輸出是一個開頭冗余秒數很少,結尾冗余秒數很少的視頻。 - 應用
trim過濾器以保留相關部分。在末尾
添加(如使用修剪過濾器時推薦的那樣)。setpts=PTS-STARTPTS
建議的命令:
ffmpeg -y -r 0.3 -stream_loop 1 -i test02_01.png -r 0.3 -stream_loop 2 -i test02_02.png -filter_complex "[0][1]concat=n=2:v=1:a=0[v];[v]minterpolate=fps=24:scd=none,trim=3:7,setpts=PTS-STARTPTS" -pix_fmt yuv420p test02.mp4
示例輸出(作為影片 GIF):

test02_01.png:

test02_02.png:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/431843.html
上一篇:FasterRCNN邊界框坐標
下一篇:條件遞增不正確
