FFMPEG - 將 png 轉換為視訊文件

FFMPEG - 將 png 轉換為視訊文件

我有大約 10k 個 PNG 文件,我想將它們轉換成影片。

環顧網路我遇到了 ffmpeg 並選擇執行以下命令:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4

首先,運行此命令會​​產生提示File 'img/00001.png' already exists. Overwrite ? [y/N],這對我來說似乎有點奇怪,因為據我了解,該命令不應該修改圖像本身,而應創建一個新video.mp4文件?

無論如何,我不想按y10k次,所以我備份了我的映像並修改了命令:

ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4

現在,程式對於 254 個圖像似乎運作良好,但隨後拋出錯誤:

[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

如果它有用,我添加了完整日誌檔在這裡。而且,為了更好地衡量,這是圖像中的範例我想轉換。也,這是臭名昭著的幀 255,程式崩潰。

答案1

ffmpeg 要求每個輸入檔案都有自己的-i參數,因此當您執行時-i img/*,您的 shell 會將通配符擴展為一系列影像,而 ffmpeg 將依次讀取這些影像輸入影像,但輸出影像為 10k(減一)。換句話說,ffmpeg 將看到:

ffmpeg … -i img/00000.png img/00001.png …

這告訴它用作00000.png輸入和00001.png輸出。事實上,您將 使用 的內容00001.png覆蓋所有文件。所以我希望你有這些的備份。00254.png00000.png

恢復原始輸入檔後,請再次檢查您的命令。您尚未使用%d通配符來指定圖像編號(在連結的答案中顯示)。所以,使用:

ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4

欲了解更多信息,請查看幻燈片指南。在那裡您還將找到用於指定輸入檔案清單的不同選項(例如透過 glob 模式,類似於您嘗試執行的操作)。

答案2

也使用星號通配符,但需要引用文件列表以防止按照答案擴展@slhck,並且您需要一個額外的選項pattern_type來告訴它使用通配符。

ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4

相關內容