# [FFmpeg] 將圖片轉換成影片 ## 讀取輸入圖片 如果只有一張輸入圖片,則必須使用 `-loop 1` 重複讀取輸入。當啟用 loop 選項時,你必須限制輸出長度,否則 ffmpeg 將無限編碼視訊輸出。你可以使用 `-t`/`-to`/`-shortest`... 等選項來限制輸出視訊長度,方法如下。 在達到指定時間長度(1分30秒)時完成輸出: ```powershell ffmpeg -loop 1 -i image.jpg -r 30 -t 00:01:30 output.mp4 ``` 在音訊結束後完成輸出檔案: ```powershell ffmpeg -loop 1 -i image.jpg -r 30 -i song.flac -shortest output.mp4 ``` ### 讀取連續輸入圖片 你可以必須使用 `%d` 或 `%0Nd` 來編號,`0` 代表往前補 0,可省略,`%0Nd` 與 `%Nd` 結果相同,`N` 為數字位數,例如 `%03d` 為 000, 001, 002, 003 ......。 在 CMD/BAT 中,由於 `%` 已既有特殊用途,若要表示 `%` 則必須寫為 `%%`。 `-i "foo-%03d.jpg"` 將會依序讀取輸入 foo-000.jpg, foo-001.jpg, foo-002.jpg, foo-003.jpg ...... `-i "foo-*.jpg"` 此代表檔名為 "foo-" 開頭的 JPG 檔,並依檔名排序讀取 將連續圖片轉為視訊,輸出影片 30 fps,每張圖片轉為1影格(顯示 1/30 秒): ```powershell ffmpeg -i foo-%03d.jpg -r 30 output.mp4 ``` 將輸入 FPS 設為 1/10,輸出影片 30 fps,讓每張圖片轉為連續 300 影格(顯示 10 秒): ```powershell ffmpeg -r 1/10 -i foo-%03d.jpg -r 30 output.mp4 ``` 從管道中讀取輸入: ```powershell type "foo-*.jpg" | ffmpeg -f image2pipe -r 1/10 -i pipe:.jpg -r 30 output.mp4 ``` ### 循環讀取連續輸入圖片 假設你有一組圖片: foo-00.jpg, foo-01.jpg, foo-02.jpg, foo-03.jpg ...... foo-15.jpg (最後一張) `-loop 1` 循環讀取: foo-00.jpg, foo-01.jpg, foo-02.jpg, foo-03.jpg ...... foo-15.jpg, foo-00.jpg, foo-01.jpg ...... 在達到指定時間長度(1分30秒)時完成輸出: ```powershell ffmpeg -loop 1 -r 1/10 -i foo-%02d.jpg -r 30 -t 00:01:30 output.mp4 ``` 在音訊結束後完成輸出檔案: ```powershell ffmpeg -loop 1 -r 1/10 -i foo-%02d.jpg -r 30 -i song.flac -shortest output.mp4 ``` ## 應用範例 將音樂轉為影片並加字幕: ```powershell ffmpeg -loop 1 -i image.jpg -i song.flac -r 30 -pix_fmt yuv420p -vf subtitles='lyrics.ass' -c:v libx264 -c:a libfdk_aac -movflags +faststart -shortest output.mp4 ``` ###### tags: `ffmpeg`