FFmpeg常用命令

亦默亦風發表於2017-12-21

官網 ffmpeg Documentation

  • 命令格式:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg -i [輸入檔名] [引數選項] -f [格式] [輸出檔案] 

引數選項: 
(1) -an: 去掉音訊 
(2) -vn: 去掉視訊 
(3) -acodec: 設定音訊的編碼器,未設定時則使用與輸入流相同的編解碼器。音訊解複用在一般後面加copy表示拷貝 
(4) -vcodec: 設定視訊的編碼器,未設定時則使用與輸入流相同的編解碼器,視訊解複用一般後面加copy表示拷貝 
(5) –f: 輸出格式(視訊轉碼)
(6) -bf: B幀數目控制 
(7) -g: 關鍵幀間隔控制(視訊跳轉需要關鍵幀)
(8) -s: 設定畫面的寬和高,解析度控制(352*278)
(9) -i:  設定輸入流
(10) -ss: 指定開始時間(0:0:05)
(11) -t: 指定持續時間(0:05)
(12) -b: 設定視訊流量,預設是200Kbit/s
(13) -aspect: 設定畫面的比例
(14) -ar: 設定音訊取樣率
(15) -ac: 設定聲音的Channel數
(16)  -r: 提取影像頻率(用於視訊截圖)
(17) -c:v:  輸出視訊格式
(18) -c:a:  輸出音訊格式
(18) -y:  輸出時覆蓋輸出目錄已存在的同名檔案


-vcoder 設定視訊的編碼器,未設定時則使用與輸入流相同的編解碼器
複製程式碼

參考:視訊壓縮:I幀、P幀、B幀

  • 最簡單例子:
$ ffmpeg -i input.mp4 output.avi
1. -i 輸入檔案路徑
2. 命令列最後是輸出檔案路徑

複製程式碼
  • 修改視訊幀率:
$ ffmpeg -i input.avi -r 24 output.avi  // 強制把輸出視訊檔案幀率改為 24 fps:
-r 幀率 
複製程式碼
  • 截圖命令: 擷取一張352x240尺寸大小,格式為jpg的圖片
$ ffmpeg -i input_file -y -f image2 -t 0.001 -s 352x240 output.jpg 
複製程式碼
  • 把視訊的前30幀轉換成一個Animated Gif
ffmpeg -i input_file -vframes 30 -y -f gif output.gif
複製程式碼
  • 在視訊的第8.01秒出擷取230x240的縮圖
ffmpeg -i input_file -y -f mjpeg -ss 8 -t 0.001 -s 320x240 output.jpg
複製程式碼
  • 每隔一秒截一張圖
ffmpeg -i out.mp4 -f image2 -vf fps=fps=1 out%d.png
複製程式碼
  • 每隔20秒截一張圖
ffmpeg -i out.mp4 -f image2 -vf fps=fps=1/20 out%d.png
複製程式碼
  • 多張截圖合併到一個檔案裡(2x3)每隔一千幀(秒數=1000/fps25)即40s截一張圖
ffmpeg -i out.mp4 -frames 3 -vf "select=not(mod(n\,1000)),scale=320:240,tile=2x3" out.png
複製程式碼
  • 從視訊中生成GIF圖片
ffmpeg -i out.mp4 -t 10 -pix_fmt rgb24 out.gif
複製程式碼
  • 從視訊截選指定長度的內容生成GIF圖片
ffmpeg -ss 3 -t 5 -i input.mp4 -s 480*270 -f gif out.gif
複製程式碼
  • 轉換視訊為圖片(每幀一張圖)
ffmpeg -i out.mp4 out%4d.png
複製程式碼
  • 圖片轉換為視訊
ffmpeg -f image2 -i out%4d.png -r 25 video.mp4
複製程式碼
  • 切分視訊並生成M3U8檔案
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 20 -hls_list_size 0 -hls_wrap 0 output.m3u8
複製程式碼
  • 分離視訊音訊流
ffmpeg -i input_file -vcodec copy -an output_file_video    //分離視訊流
ffmpeg -i input_file -acodec copy -vn output_file_audio    //分離音訊流
複製程式碼
  • 視訊解複用
ffmpeg -i test.mp4 -vcoder copy -an -f m4v test.264
ffmpeg -i test.avi -vcoder copy -an -f m4v test.264
複製程式碼
  • 視訊轉碼
ffmpeg -i test.mp4 -vcoder h264 -s 352*278 -an -f m4v test.264    //轉碼為碼流原始檔案
ffmpeg -i test.mp4 -vcoder h264 -bf 0 -g 25 -s 352-278 -an -f m4v test.264    //轉碼為碼流原始檔案
ffmpeg -i test.avi -vcoder mpeg4 -vtag xvid -qsame test_xvid.avi    //轉碼為封裝檔案 -bf B幀數目控制, -g 關鍵幀間隔控制, -s 解析度控制
複製程式碼
  • 視訊封裝
ffmpeg -i video_file -i audio_file -vcoder copy -acodec copy output_file
複製程式碼
  • 視訊剪下
ffmpeg -i test.avi -r 1 -f image2 image.jpeg //視訊截圖
ffmpeg -i input.avi -ss 0:1:30 -t 0:0:20 -vcoder copy -acoder copy output.avi //剪下視訊 -r 提取影像頻率, -ss 開始時間, -t 持續時間
複製程式碼
  • 視訊錄製
ffmpeg -i rtsp://hostname/test -vcoder copy out.avi
複製程式碼
  • 內容反轉(reverse)
// For video only
ffmpeg -i input-file.mp4 -vf reverse output.mp4

// For audio and video:
ffmpeg -i input-file.mp4 -vf reverse -af areverse output.mp4

複製程式碼

相關文章