ffmpeg圖片視頻互轉

圖片轉視頻

方法1:圖片文件命名相似

ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

例如:

## C語言格式輸入圖片
ffmpeg -y -f image2 -framerate 1 -i foo-%03d.jpeg -s 720x1280 foo.mp4
## 正則表達式方式
ffmpeg -y -f image2 -pattern_type glob -framerate 1 -i 'image*.jpg' -s 720x1280 foo.mp4
## 多線程處理
ffmpeg -threads 2  -y -r 2 -pattern_type glob -i 'big*.jpg' -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

參數解析
-i 輸入文件的地址
-y 表示直接覆蓋已經存在的輸出文件
-f 強制設置輸入輸出的文件格式,默認情況下ffmpeg會根據文件後綴名判斷文件格式
-codec(-c) 指定輸入輸出的解碼編碼器 copy 則將輸入流直接複製到輸出流不進行編解碼操作
-c:v 或-vcodec 可以爲所有視頻流指定編碼器。
foo-%03d.jpeg 文件名中含有3個連續數字,不足用0補充
-pattern_type glob 文件名匹配正則表達式
-framerate 每秒幀率,-framerate 12即每秒視頻產生12幀圖片。
-r 設置某個流的幀率按ffmpeg官方文檔說-r與-framerate作用相同,-framerate 用於限制輸入,而-r用於限制輸出。
-threads 設置處理線程數
-pix_fmt 指定像素的顏色模式

方法2:文件列表方式

原理就是創建一個臨時文件將要使用的圖片全部列出,可以指定每個圖片的展示時間,也可以在稍候的命令中指定視頻的總時長。例如:先創建一個文本文件filelist.txt,文件內容:

file 'girl/image1.jpg' 
duration 2
file 'girl/image2.jpg'
duration 2
file 'photo5.jpg'
duration 2
file 'photo1.jpg'
duration 2

執行命令:

## 簡單模式
ffmpeg -y -f concat -i filelist.txt output.mp4
## 指定視頻的編碼格式
ffmpeg -y -f concat -i filelist.txt -c:v libx264 output.mp4
ffmpeg -y -f concat -safe 0 -i filelist.txt -vsync vfr -pix_fmt yuv420p output.mp4

視頻轉圖片

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

多視頻合成視頻

ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4

注意:多視頻合成視頻也可以使用文件列表的方式。
videolist.txt文件內容:

file 'test1.mp4'
file 'test2.mp4'
file 'test3.mp4'
file 'test4.mp4'

FFmpeg官方鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章