您現在的位置是:首頁 > 攝影首頁攝影

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

由 什麼值得買 發表于 攝影2022-11-27
簡介5)即可平臺我就不用解釋了,Linux就Linux,Windows就Windows許可證分為gpl和lgpl,後者相比前者更為寬鬆,可以以連結庫的形式引用於商業軟體連結方式如果有提示shared,就表示檔案是散裝的,庫 文件 標頭檔案都在目

photo by說法對嗎

作者:zmxyz

本文索引

ffmpeg是什麼

官方參考資料

瞭解相關常識

學習如何使用

首先,自我介紹

手機編輯:因為smzdm不允許引用Github連結,所以請讀者搜尋引擎自行檢索

本文與上篇不同,屬技術類指南,旨在保證內容質量和嚴謹,用詞無法做到歡樂惡狗

本文具有權威性,但個人水平還是過於拙劣,出現錯誤還請指出,我將直接自行舉報打回修改

本文僅作為快速上手教程,細節補充,內容衝突或過時,以官方文件為準

本文由zmxyz原創,同步釋出在個人部落格,使用CC-BY-ND 4。0許可證共享(原作署名,禁止商業使用,禁止二次創作分發),垃圾營銷號照搬小心我向搜尋引擎/託管平臺發dmca嗷,規範轉載請在評論區留下你轉完的url

同時,本人會對文章內部引用的內容進行連結,尊重他人創作成果

本文參加數碼達人評選,按照tag檢索瞭解到,數碼板塊包括軟體技巧

同時因為符合標準,我必須向這篇文章植入一個商品連結,可以保證沒有利益關聯,自營官方直達,沒有返利(對於我來說沒有,smzdm會不會有就不確定了)

當然也是站在個人角度推薦,應該是大廠裡相對便宜的128g卡了,支援u3(順序寫入高於30MByte/s)a2(隨機iops大於4000)標準,十年質保,送卡套,玩壞了直接保修,在我這個dev眼裡作為開發板的引導盤算是合格了

雙十一沒有便宜,日常價一直都是64。9塊128g,還算穩定,畢竟消耗品,缺時買就完了

做個測試,證實我的標題

Pexels:Athena(圖片來源)

忽略我用Windows終端但使用bash語法,因為開發用到gcc使用了一個叫msys2的工具鏈

語法自行轉義,Windows使用者儘量使用PowerShell而不是cmd

Linux使用者請在glibc環境下使用,musl翻車後果自負

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

5205808/369016=14。10726906150411

369016/5205808*100%=7。088544179885236%

壓縮後體積減少了不只85%!!!

而畫質沒有明顯下降,無論放大與否

所以我們要開始學習:

ffmpeg是什麼

FFmpeg 是一個開放原始碼的自由軟體,可以執行音訊和影片多種格式的錄影、轉換、串流功能,包含了libavcodec——這是一個用於多個專案中音訊和影片的解碼器庫,以及libavformat——一個音訊與影片格式轉換庫。

——Wikipedia

ffmpeg專案,它是個庫,同時也是個工具

你可能覺得命令列呼叫非常原始,但更瘋狂的是,它可以由開發者編寫程式碼嵌入在其他程式裡使用

你曾經用過帶圖形介面的轉碼工具,有90%以上的可能呼叫ffmpeg執行的

你所使用的每一個和音影片圖片相關的app,也都可能有引用過它的程式碼

同時,作為一個開源專案,任何人可以在遵循其許可證的情況下任意使用專案產出

這麼一看,哇,是不是很厲害,更厲害的還在後面,建議看完自己動手試試

我所期望讀者具備的能力,如果你不會但願意認真學習,那也是好樣的!

會操作任意平臺的shell

瞭解相對與絕對路徑

對音影片圖片常識有些許瞭解

能閱讀英文文件(開翻譯工具也行)

會提取錯誤資訊,嘗試檢索並解決

嘗試後無法解決可以尋求幫助,注意遵循 提問的藝術(Github:ryanhanwu/How-To-Ask-Questions-The-Smart-Way)

官方參考資料

首先,全部為官方或官方認可的資料,沒有誤導和過時

本文僅作為快速上手教程,細節補充,內容衝突或過時,以官方文件為準

Github:btbN/FFmpeg-Builds(這是一個ffmpeg二進位制的自動化構建倉庫,受到官方認可)

ffmpeg:ffmpeg Documentation(ffmpeg官方文件,建議仔細閱讀)

ffmpeg:HWAccelIntro(ffmpeg硬體加速支援情況)

ffmpeg:

Codecs(ffmpeg編碼器支援情況)

非官方參考資料

簡書:使用ffmpeg進行webp圖片壓縮,ffmpeg的幫助資訊檢視方法

首先我們要知道,ffmpeg官方並不直接提供二進位制可執行檔案,他們的下載頁面指向了志願者提供的自動化構建服務,而btbN的倉庫對於Linux和Windows下多種硬體圖形卡都有支援,所以推薦使用

構建命名解釋

ffmpeg-master-latest-linux64-gpl-shared。tar。xz

ffmpeg-[分支]-[git提交hash]-[平臺]-[許可證]-[庫的連結型別]。[歸檔格式]

分支是指大版本號,git提交hash代表每個pull request的唯一id,如同安卓9和安卓10,兩者同時存在,但也同時進行維護,直到EOL生命週期結束,如果不追求特定老版本,就直接使用master或最新代號(目前是n5。5)即可

平臺我就不用解釋了,Linux就Linux,Windows就Windows

許可證分為gpl和lgpl,後者相比前者更為寬鬆,可以以連結庫的形式引用於商業軟體

連結方式如果有提示shared,就表示檔案是散裝的,庫 文件 標頭檔案都在目錄裡,適合開發者呼叫,沒有shared的壓縮包裡就只有三個可執行檔案

歸檔格式也不提了,什麼平臺用什麼工具就行

ffmpeg官方文件

建議仔細閱讀,這幾個官方連結比搜尋到的一堆二手教程有用的多,有什麼引數不懂就 Ctrl+F 搜

比如我想了解後續文章中,“-vf scale=iw/2:ih/2”的意義,我可以直接搜尋flag名“-vf”,而不是帶全部引數,我們就可以得到

Simple filtergraphs are configured with the per-stream -filter option

(with -vf and -af aliases for video and audio respectively)。

A simple filtergraph for video can look for example like this:

而不是開啟瀏覽器 -> 輸入“ffmpeg -vf scale 是什麼意思” -> 然後在一堆過時內容裡尋找二手資訊

瞭解相關常識

命令列從入門到精通

首先我們先下載一個ffmpeg預構建包,解壓並cd到目錄下

拿處理一張照片舉例,因為照片處理時間短,效果顯著,不需要了解各種引數和配置硬體加速

。/ffmpeg -i input。jpg output。webp

#usage: ffmpeg [options] [[infile options] -i infile]。。。 {[outfile options] outfile}。。。

這段命令中,

“。/ffmpeg。exe”指命令列執行當前目錄下的ffmpeg,你也可以寫入環境變數或者用絕對路徑執行

“-i input。jpg”這個flag表示應該將相對路徑下的input。jpg作為輸入檔案

“output。webp”表示檔案將以webp格式輸出

沒有指定任何質量引數時,webp預設會保持原畫素,以質量75%進行取樣,以libwebp編碼器處理

此時沒有指定編碼器,是因為webp格式和編碼高度繫結,ffmpeg將。webp副檔名作為預設引數,但在影片處理上常常有不同編碼共用一個容器格式的情況發生,這時如果不想出現問題,就應該手動指定

vcodec(影片)

acodec(音訊)

codec(圖片)

理解這些以後,你會發現所有引數都是以flag形式傳入的,flag應當放在input檔名和output檔名中間(其他位置無效),帶單或雙橫槓的叫flag,沒跟槓的叫做flag傳遞的引數

所以“-i input。jpg”是一組flag引數

而output。webp則是ffmpeg的引數

編碼質量小課堂

上述提到,如果使用libwebp不指定編碼質量會以75%取樣,這是大家所認可價效比比較高的一個值

測試過50%和25%,感覺價效比不高,帶來的體積減小有限,反而對畫面大砍了一道,所以沒啥用

但如果你有別的想法,像極限壓縮,或者無損轉碼,那麼可以追加以下flag引數

設定質量

-q [0-100]

設定無損,1=True,0=False

——lossless [0,1]

那麼進階一下,我要開始追加引數了

我是怎麼壓縮圖片的

編碼器引數硬體加速亂七八糟的東西可以專門水114514篇文章,這次只拿webp舉例,這是一個壓縮比很高,很適合網路傳輸的標準,相容性也很強,適用於全部現代瀏覽器和第三方看圖工具

配合開頭的幾張圖片食用更佳

我的引數

。/ffmpeg -i input。jpg -vf scale=iw/2:ih/2 output。webp

這個命令就是我開篇所演示的,但我為什麼要這麼設定呢?(當然,以下素材為私人使用,就不放上來了)

因為多數情況下,單反拍攝出6720*4480的圖片畫幅過大,而常規筆記本僅有1080p解析度,所以直接透過追加flag引數

-vf scale=iw/2:ih/2

長寬重設為原有的一半(0。5*0。5,所以總畫素是以前的是0。25)

在文件中,-vf指video filter,影片過濾器,在ffmpeg中,影象會被當做1幀影片處理

沒有指定質量,保持預設引數

所以,在webp重編碼,質量取75%,解析度重設到四分之一,這麼一套靈活操作,我們的體積從

12。7MB -> 155KB

FREAKING AWESOME RIGHT?!在不縮放的情況下瀏覽,效果基本一致

當然,我們也鼓勵大家嘗試不同的引數,如果你想折騰質量,參考上面的“編碼質量小課堂”,測試出更適用於你的影象

對於編碼用時,我的機器是Intel i5 1035G1,10nm工藝,4核心8執行緒,16g記憶體,pcie3。0匯流排的sn730固態

frame=    1 fps=0。9 q=-0。0 Lsize=     156kB time=00:00:00。04 bitrate=31167。6kbits/s speed=0。0359x

video:156kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0。000000%

可以看到,用時無限接近0,一秒鐘可以處理25張這麼高質量的影象,如果用指令碼並行處理還會更快

我想草率結尾

一張Meme送給看到這裡的你們,理解萬歲!

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門

因為上一篇文章反響一般,還是做我想做的事吧!後面會繼續更新ffmpeg處理音訊,影片,工具鏈,硬體加速,位元速率控制器,編碼格式和生態相關文章的!

最後,一張Meme送給我自己

超硬核!圖片壓縮15%畫質,節省85%空間!ffmpeg權威指南 [1]入門