首先得安裝好ffmpeg程序(Linux下還得安裝x264編碼)。Mac下直接用brew安裝:算法
brew install ffmpeg --with-faac --with-fdk-aac --with-ffplay --with-fontconfig --with-freetype --with-libass --with-libbluray --with-libcaca --with-libsoxr --with-libquvi --with-frei0r --with-libvidstab --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theroa --with-tools --with-x265
裝好後就能夠用ffmpeg這個命令壓制MP4文件了:多線程
ffmpeg -i MVI_7274.MOV -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k a.mp4
參數解釋以下(從這裏參考而來,有修改:https://vistb.net/2012/02/x264-video-compress-intro/):ide
-preset
:指定編碼的配置。x264編碼算法有不少可供配置的參數,不一樣的參數值會致使編碼的速度截然不同,甚至可能影響質量。爲了免去用戶瞭解算法,而後手工配置參數的麻煩。x264提供了一些預設值,而這些預設值能夠經過preset指定。這些預設值有包括:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。ultrafast編碼速度最快,但壓縮率低,生成的文件更大,placebo則正好相反。x264所取的默認值爲medium。須要說明的是,preset主要是影響編碼的速度,並不會很大的影響編碼出來的結果的質量。壓縮高清電影時,我通常用slow或者slower,當你的機器性能很好時也可使用veryslow,不過通常並不會帶來很大的好處。性能
-crf
:這是最重要的一個選項,用於指定輸出視頻的質量,取值範圍是0-51,默認值爲23,數字越小輸出視頻的質量越高。這個選項會直接影響到輸出視頻的碼率。通常來講,壓制480p我會用20左右,壓制720p我會用16-18,1080p我沒嘗試過。我的以爲,通常狀況下沒有必要低於16。最好的辦法是你們能夠多嘗試幾個值,每一個都壓幾分鐘,看看最後的輸出質量和文件大小,本身再按需選擇。編碼
其實還有-b 1024k這樣的參數,可是我發現-crf設置上後-b就無論用了。根據我本身的簡單嘗試,壓制5D2拍攝的一段18秒1920x1080的視頻(下午天然光、圖像簡單、大面積白牆、只有一扇黑門)crf和壓出來的文件大小關係以下:.net
crf | 文件大小 |
---|---|
16 | 54M |
18 | 39M |
20 | 25M |
22 | 17M |
24 | 11M |
26 | 7.3M |
28 | 5.0M |
30 | 3.6M |
32 | 2.7M |
默認 | 14M(crf爲23) |
又比較了一下crf在20、2八、32時的視頻質量,發現32仍是能看出質量降低的,20的確很是精細,但28跟20之間的差異並非那麼大,crf值設置在26-28之間比較好。若是對尺寸有要求,什麼都不設,用默認的也行(多是31)。線程
另外,關於preset,slow和fast只跟運行時間有關,slow跑的時間比fast長很多,slow出來的mp4文件會小一些(12M),fast出來的文件會大一些(14M),但視頻質量的差距並不明顯。code
若是把原視頻尺寸從1920x1080縮小到960x540,則視頻尺寸變爲了:視頻
crf | 文件大小 |
---|---|
16 | 11M |
18 | 6.7M |
20 | 4.4M |
22 | 3.0M |
24 | 2.1M |
26 | 1.6M |
28 | 1.3M |
30 | 1.1M |
32 | 893K |
默認 | 2.5M(crf爲23) |
綜上,對質量要求較高時,選22如下;對尺寸要求很是高時,選26(但質量確實是會稍差一些),不然選24的性價比比較高(或者默認的23也行),若是對尺寸實在要求很是很是高,那就28以上吧。ssl
後記補充(來自@gghyoo) 能夠用-threads n 來實施多線程的運算,充分利用多核cpu 例子以下: ffmpeg -threads 2 -crf 20 -y -i ML-02.avi -strict experimental ML-02.mp4