ffmpeg
# ffmpeg包的常用命令
ffmpeg ?裁剪轉(zhuǎn)換合并提取
ffplay ?播放
ffprobe ?顯示文件參數(shù)
它們的命令行參數(shù)大多通用
# ffmpeg命令的基本工作流程
file==>demux==>decode==>filter==>encode==>mux
如,一個mp4文件有視頻流和音頻流,demux就是把它倆分開,然后各自解碼,各自filter,各自編碼,最后再mux到一個文件里。
# 命令行參數(shù)的時間格式
[-]s[.m] ?秒數(shù)(-表示是負數(shù),s是整數(shù)部分,.m是小數(shù)部分)
[-][hh:]mm:ss.m ?時分秒,-和.m同上
# ffmpeg命令行基本格式
ffmpeg global_options infile_options -i infile outfile_options outfile
## 例子
格式轉(zhuǎn)換
? ? ? ? ffmpeg -i a.mp4 a.avi
提取音頻
? ? ? ? ffmpeg -i a.mp4 -c copy a.mp3
截取視頻
? ? 生成一個30秒的視頻(丟棄之后的部分)
? ? ? ? ffmpeg -i a.mp4 -c copy -t 30 b.mp4
? ? 從視頻倒數(shù)30秒開始截?。▉G棄之前的部分)
? ? ? ? ffmpeg -sseof -30 -i a.mp4 -c copy b.mp4
? ? 從1分25秒開始截取,生成一個時長2分7秒的視頻
? ? ? ? ffmpeg -ss 1:25 -i a.mp4 -c copy -t 2:7 b.mp4
截圖
? ? 在1分25秒截圖一張
? ? ? ? ffmpeg -ss 1:25 -i a.mp4 -frames 1 b.jpg
? ? 從1分25秒開始的30秒內(nèi),每秒截圖0.2張(即每5秒1張)寬W高H的圖
? ? ? ? ffmpeg -ss 1:25 -t 30 -i a.mp4 -r 0.2 -s WxH -f image2 b_%03d.jpeg
? ? 從1分25秒開始截一個10秒的動圖
? ? ? ? ffmpeg -ss 1:25 -i a.mp4 -t 10 b.gif
圖片合成視頻
? ? ? ? ffmpeg -f image2 -framerate 0.33 -i b_%03d.jpeg -s WxH a.mp4
伸縮視頻
? ? 寬高比變?yōu)?6:9
? ? ? ? ffmpeg -i a.mp4 -aspect 16:9 o.mp4
錄屏
? ? ? ? ffmpeg -f x11grab -video_size cif -framerate 25 -i $DISPLAY screen.mp4
# 常用命令行參數(shù)
-hide_banner ?不顯示copyright notice, build options and library versions
-i url ?輸入文件的url(如:本地文件abc.mp4,攝像頭/dev/video0)
-c codec ?最常用的是-c copy(跳過decode-filter-encode,所以速度快)
-t time_duration ?時長
-ss seek_start_time_position ?開始時間(相對于開頭)
-sseof time_position ?開始時間(相對于末尾,大多使用負數(shù))
-itsoffset time_offset ?多用正數(shù),表示delay
-framerate fps ?多用于輸入,輸出多用-r fps
## 以下僅用于輸出選項
-vn ?禁用視頻
-an ?禁用音頻
-sn ?禁用字幕
-frames limit_output_frames
-to stop_output_at_time_position ?這個不如-t好用
-fs limit_output_file_size
-r fps
-s wxh ?輸出尺寸為寬w高h
-map 0:0 ?選取第0個輸入文件的第0個流
-filter filtergraph ?參考man ffmpeg-filters,用ffmpeg -filters查看所有filters
-aspect width:height ?寬高比