軟體:FFmpeg
官方文件
功能:影片處理
命令行:ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file}
ffmpeg 翻译文档 (ffmpeg-all 包含重要组件)
官方文件
功能:影片處理
命令行:ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file}
// 影片轉出 24 Hz ffmpeg -i input.avi -r 24 output.avi // 影片轉出 4K 解析度 ffmpeg -i input.avi -s 3840x2160 output.avi // 會在關鍵幀直接截取,有可能在開頭增多內容,且快轉 lag // 切割影片從 1 秒開始,直到經過 5 秒後 ffmpeg -ss 00:00:01 -t 00:00:05 -i input.avi output.avi // 切割影片從 1 秒開始,直到經過 5 秒後,但轉換較慢 ffmpeg -i input.avi -ss 00:00:01 -t 00:00:05 output.avi // 切割影片從 1 秒開始,直到經過 5 秒後,較好的做法 ffmpeg -ss 00:00:01 -i input.avi -t 00:00:05 -avoid_negative_ts make_zero output.avi // 切割影片從 1 秒開始,直到 output 為 5 秒 ffmpeg -ss 00:00:01 -i input.avi -to 00:00:05 output.avi // 轉檔為 H.264 格式 ffmpeg -i input.wmv -c:v libx264 output.avi //從第 126 張開始,每五秒取一張圖,並指定 pixel 格式,以免自動選擇錯誤,得到 30 fps 的影片 ffmpeg -framerate 1/5 -start_number 126 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 //利用 glob pattern 選擇圖片 ffmpeg -framerate 1 -pattern_type glob -i '*.jpg' -c:v libx264 out.mp4 //用單張圖片產生影片 ffmpeg -loop 1 -i img.png -c:v libx264 -t 30 -pix_fmt yuv420p out.mp4 // 抓長達 70/10 = 7 秒鐘的影像,並轉換成圖檔,圖檔檔名以數字 digit 的型式自動編號 ffmpeg -i test.flv -an -ss 00:00:42 -r 10 -vframes 70 -y NolanRyan-%d.jpg // 合併影片 by stream // in mylist.txt // file '/path/to/file1' // file '/path/to/file2' // file '/path/to/file3' ffmpeg -f concat -safe 0 -i mylist.txt -c copy output // 合併影片 by protocol,與在 UNIX-like 系統使用 cat 類似 ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4 // 去除背景音樂 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 // 加入背景音樂 ffmpeg -i input1.mp4 -stream_loop -1 -i music.mp3 -shortest output.mp4
指令介紹
- 以官方文件為主,以下指令並不完備
- 在 -i 前使用,表示針對 input
在 output filename 前使用,表示針對 output 一般
- -h, -?, -help, --help [arg]
- 顯示幫助
- ffmpeg -h
- -version
- 顯示版本
- ffmpeg -version
- -formats
- 顯示可用格式
- ffmpeg -formats
- -devices
- 顯示可用裝置
- ffmpeg -devices
- -codecs
- 顯示可用編碼/解碼
- ffmpeg -codecs
- -decoders
- 顯示可用解碼
- ffmpeg -decoders
- -encoders
- 顯示可用編碼
- ffmpeg -encoders
- -filters
- 顯示可用 filters
- ffmpeg -filters
- -pix_fmts
- 顯示可用 pixel 格式
- ffmpeg -pix_fmts
- -sample_fmts
- 顯示可用音頻取樣格式
- ffmpeg -sample_fmts
主要
- -f fmt (input/output)
- 強制輸出指定格式
- 通常會從檔名猜測,不一定需要此指令
- ffmpeg -f mp4
- -i filename (input)
- 輸入檔名
- 可用來查看資訊
- ffmpeg -i input.avi
- 截圖
ffmpeg -i test.flv -an -ss 00:00:42 -r 10 -vframes 70 -y NolanRyan-%d.jpg - -y (global)
- 覆蓋檔案不詢問
- ffmpeg -y
- -n (global)
- 不覆蓋檔案,若有存在檔案,即終止程式
- ffmpeg -n
- -stream_loop number (input)
- 輸入影片循環 n 次,-1 表示無限
- ffmpeg -i input1.mp4 -stream_loop -1 -i music.mp3 -shortest output.mp4
- -c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream) - 指定編碼/解碼器
- video 使用 libx264 編碼,audio 則單純 copy,不重新編碼
ffmpeg -i INPUT -c:v libx264 -c:a copy OUTPUT - -t duration (input/output)
- 指定經過時間
- ffmpeg -t 00:00:05
- -to position (output)
- 當到達指定時間後,便停止寫入
- ffmpeg -to 00:00::05
- -fs limit_size (output)
- 限制檔案大小,單位 bytes
- ffmpeg -fs 1024
- -ss position (input/output)
- 開始位置
- 用在 input,會先針對 input 尋找到此位置
- 用在 output,會對 input 解碼但忽略之,直到此位置
- ffmpeg -ss 00:00:05
- -sseof position (input/output)
- 同 -ss,但從結尾開始算,位置設定會為負值
- ffmpeg -sseof -5
- -itsoffset offset (input)
- 指定 delay 多久,開始輸入
- 5 秒後才輸入,所以會維持 5 秒的第一張畫面
ffmpeg -itsoffset 5 -i inputfile outputfile - -frames[:stream_specifier] framecount (output,per-stream)
- 指定輸出張數
- ffmpeg -frames:v 10
- -filter[:stream_specifier] filtergraph (output,per-stream)
- 指定 filter 處理
- 左右翻轉影片
ffmpeg -i foo.avi -filter:v hflip hflip.avi 影片
- -vframes number (output)
- 指定輸出張數,-frames:v 的縮寫
- ffmpeg -vframes 100
- -r[:stream_specifier] fps (input/output,per-stream)
- 指定 frame rate
- 用在 input 時,將重新產生 timestamps,建議使用 -framerate
- 用在 output 時,將重覆或抽掉影象
- ffmpeg -r 24
- -s[:stream_specifier] size (input/output,per-stream)
- 指定解析度 wxh
- ffmpeg -s 3840x2160
- -aspect[:stream_specifier] aspect (output,per-stream)
- 指定長寬比
- 可為浮點數或比例
- "4:3", "16:9", "1.3333" 或 "1.7777"
- ffmpeg -aspect 16:9
- -vn (output)
- 不輸出影片
- ffmpeg -vn
- -vcodec codec (output)
- -codec:v 的縮寫
- ffmpeg -vcodec libx264
- -vf filtergraph (output)
- -filter:v 的縮寫
- 左右翻轉
ffmpeg -i foo.avi -vf hflip hflip.avi - -pix_fmt[:stream_specifier] format (input/output,per-stream)
- 指定 pixel 格式
- 若指定格式不存在,則輸出警告並自動選擇最好的編碼
若加上 + 字符,則不支援時退出,這使得 filter 自動轉換也會被禁止
若只有單獨的 + 字符,則選擇和輸入一樣的 pixel 格式,此時自動轉換也會被禁止 - ffmpeg -pix_fmt yuv420p
音訊
- -an (output)
- 不輸出音訊
- ffmpeg -an
image2
- -loop
- 是否重覆,0/1 表示 否/是,預設為 0
- ffmpeg -loop 1
- -pattern_type
- 指定 filename 的表示方法
- 可用參數
- none
- sequence (default)
- 可使用 "%d" or "%0Nd"
- 第一個檔案需在 start_number ~ start_number+start_number_range-1 之間,且之後的檔案命名需連續
- 原先的 ’%’ 需改為 "%%".
- "img-%03d.bmp" img-001.bmp, img-002.bmp, ..., img-010.bmp...
"i%%m%%g-%d.jpg" i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg... - ffmpeg -i img%03d.jpg
- glob
- 可使用 "*"
- 表示任意字元
- ffmpeg -pattern_type glob -i '*.jpg'
- -start_number
- 設定 pattern_type 起始位置,預設為 0
- ffmpeg -start_number 126
- -start_number_range
- 設定 pattern_type 尋找範圍,預設為 5
- ffmpeg -start_number_range 10
進階
- -shortest (output)
- 只處理至最短影片的時間
- ffmpeg -i input1.mp4 -stream_loop -1 -i music.mp3 -shortest output.mp4
- -bsf[:stream_specifier] bitstream_filters (output,per-stream)
- 指定 stream 設定 bitstream filters
bitstream_filters 可設定多個用逗號分開
使用 -bsfs 可得到支援的 bitstream filters. - ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
參考
wiki:Seekingffmpeg 翻译文档 (ffmpeg-all 包含重要组件)
留言
張貼留言