ffmpeg教程-手把手教你如何簡單快捷處理音視屏

一、入門:

參考視頻鏈接:
https://www.bilibili.com/video/av40146374/?p=9
# ffmpeg支持很多視頻格式,此處用mp4舉例

# 顯示所有的操作命令,以及介紹
ffmpeg -h 

# 播放視頻、音頻 按esc退出
ffplay example.mp4
# 鍵盤上的左右可以進行前進後退播放,點擊窗口的任意一個位置,可以跳轉播放位置
# f鍵是全屏 p或空格是暫停 double右鍵是切換顯示模式
ffplay example.mp3
# 查看視頻的具體信息
ffprobe example.mp4

二、音視頻格式轉換

# -i是input的縮寫,後面接輸入文件,之後接輸出文件及其格式,這是一條視頻文件格式轉換命令
ffmpeg -i example.mov output.mp4

# -acodec an audio(音頻) codec(編解碼器) 這條指令是用來指定音頻編解碼器
# -ar 設置音頻採樣率
# -ab 設置音頻的比特率 如320k
# -ac 聲道 c是channel的縮寫,用來設置聲道數的指令 1是單聲道,2是雙聲道立體聲 默認是使用原音頻的聲# 道數
# 最後是輸出音頻的文件名和格式
ffmpeg -i example.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
  • 各大視頻網站視頻封裝,編碼解碼格式
    在這裏插入圖片描述

三、音視頻選項

1、視頻選項

Video options:
-vframes number     set the number of video frames to output
-r rate             set frame rate (Hz value, fraction or abbreviation)
# 用來縮放視頻尺寸
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number  set the number of bits per raw sample
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff  set initial TimeCode value.
-pass n             select the pass number (1 to 3)
-vf filter_graph    set video filters
-ab bitrate         audio bitrate (please use -b:a)
-b bitrate          video bitrate (please use -b:v)
-dn                 disable data

2、音頻選項

Audio options:
-aframes number     set the number of audio frames to output
-aq quality         set audio quality (codec-specific)
-ar rate            set audio sampling rate (in Hz)
-ac channels        set number of audio channels
-an                 disable audio
-acodec codec       force audio codec ('copy' to copy stream)
-vol volume         change audio volume (256=normal)
-af filter_graph    set audio filters

四、視頻壓制

  • 將4k的in.webm壓制爲1080p的MP4
# -pix_fmt : 此處採用yuv420p,網絡視頻基本上採用這個格式
# -vcodec : 用來設置視頻流的編碼器指令,一般使用libx264
# -preset 編碼器預設 默認是medium
# -profile:v 用來指定編碼器的配置,主要和壓縮比有關    實時通信領域一般採用 baseline, 
# 流媒體採用 main,製作超清視頻使用 high
# -level:v 對編碼器的具體規範和限制,壓縮比和畫質就像魚和熊掌,一般情況下,1080p的視頻就用4.1
# -crf  constant rate factor 恆定速率因子模式 適用於對畫質有要求,大小無關緊要的情形。
# 範圍爲0- 51,默認值就是23,數值越小,質量越高,0就是無損的畫質 
# -r 是30幀
# -b:a 用來設置音頻比特率,ffmpeg在這裏推薦使用這一種書寫方式,目前大多數網站都要求爲128k/s或
# 192k/s
ffmpeg -i in.webm -s 1920*1080 -pix_fmt yuv420p -vcodec libx264 -preset medium 
-profile:v high -level:v 4.1 -crf 23 -acodec acc -ar 44100 -ac 2 -b:a 128k out.mp4

# YUV、NV、RGB
ffmpeg -pix_fmts

  • -preset 編碼器預設選項 壓制視頻是一般採用veryslow
    在這裏插入圖片描述

五、ffmpeg的碼率控制模式

我們都知道畫質越好,要求的碼率越高,文件體積也越大,所謂的碼率控制,就是在決定爲每一個幀畫面分配多少比特數,這是在權衡文件體積和畫面質量,實際上ffmpeg一共支持三種碼率控制模式:-qp,-crf,-b

  • -qp(constant quantizer):恆定量化器模式,利用特殊算法,將量化器轉化爲數字,這樣一來,每一幀的畫面質量都能夠通過這些參數來判定,這些量化參數是可以手動測試的,不推薦,讓軟件自動設置就好了,畫質被劃分爲0-51個級別,0就是無損的畫質,用qp壓縮視頻,每一幀的畫面都能達到該級別的質量,畫質是最好的,體積也是最大的,大到無法想象,一般不採用這種碼率控制模式
# 無損壓縮的例子(快速編碼)
ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv

# 無損壓縮的例子(高壓縮比)
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
  • -crf (constant rate factor) 恆定速率因子模式 實際上就是一個浮動的qp模式,根據人眼調節碼率,
    將一部分碼率用在視覺敏感的畫面裏,整體碼率降低,文件大小也較小
  • -b (bitrate) 固定目標碼率模式,編碼器視圖,讓編碼器最後的碼率與我們給定的碼率相等,視頻碼率和文件體積都是確定的
  • 他們都是單遍編碼
  • -b bitrate 採用vbr(variable bit rate 動態比特率)的方式來編碼
# VBR的例子
ffmpeg -i input -vcodec libx264 -preset veryslow output
  • 現在的視頻網站一般採用ABR(average bit rate/平均比特率)的方式編碼
  • CBR(constant bit rate) 恆定比特率 沒人用

六、合併,提取音視頻

1、提取音視頻

# -vcodec copy:保持原編碼不變 
# -an 靜音,實際上是將音頻剔除
# 純粹視頻獲取
ffmpeg -i in.mp4 -vcodec copy -an v.mp4

# 存粹音頻獲取 
ffmpeg -i in.mp4 -vn -acodec copy a.m4a
  • 有些視頻有多個音頻流,就只能有針對性的提取,就需要在提取音頻中加上 -map 0:3
    在這裏插入圖片描述

2、合成音視頻

# 將音頻和視頻合在一起  -c copy 用來維持編碼器不變
ffmpeg -i a,m4a -i v.mp4 -c copy out.mp4

六、截取,連接音視頻

1、截取

# 記得音視頻區別-acodec -vcodec
# 截取音頻 -ss,-to要截取的音視頻的起始時間和終止時間
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
# 截取音頻 -ss要截取的音視頻的起始時間,-t 代表截取時長,此處爲10s
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3
# 將-ss放在-i之前能夠使用關鍵幀技術,但是這樣截取出來的視頻起始時間和終止時間不一定準確
ffmpeg -ss 00:01:00 -i in.mp3 -to 00:01:10 -acodec copy out.mp3
# 解決上述問題 -copys 保留時間戳
ffmpeg -ss 00:01:00 -i in.mp3 -to 00:01:10 -acodec copy -copys out.mp3

2、連接

# concat:concatenate 串聯 串聯視頻
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4

七、提取關鍵幀

ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 core-%02d.jpeg
# 各個參數解釋: 
# -i :輸入文件,這裏的話其實就是視頻, 
# -vf:是一個命令行,表示過濾圖形的描述, 選擇過濾器select會選擇幀進行輸出:包括過濾器常量 
# pict_type和對應的類型:PICT_TYPE_I 表示是I幀,即關鍵幀。 
# -vsync 2:阻止每個關鍵幀產生多餘的拷貝 
# -f image2 name_%02d.jpeg:將視頻幀寫入到圖片中,樣式的格式一般是: 
# “%d” 或者 “%0Nd” 
# -s:分辨率,1920*1080
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章