FFmpeg——從完全不懂,到輕松入門
目錄
-前言
-安裝與環(huán)境配置
????--下載
????--語法與環(huán)境配置
-FFmpeg基本命令
????--輸入與流信息查看
????--輸出
????--語句順序與流過濾
????--編碼器的查看與設(shè)定

前言
本人才疏學(xué)淺,文章內(nèi)可能有錯(cuò)誤的或不恰當(dāng)?shù)牡胤剑瑲g迎各位大佬指正。
寫本文的原因,是因?yàn)槲野l(fā)現(xiàn)網(wǎng)上難以找到合適的FFmepg教學(xué),而我自身的相關(guān)知識(shí)大部分都從一位網(wǎng)友那里學(xué)來的。所以作此文,為了讓大家超快速地上手FFmpeg。
如果你現(xiàn)在還不具備視頻的相關(guān)知識(shí),需要先看我的這篇文章視頻、音頻、字幕…基礎(chǔ)知識(shí),從完全不懂,到輕松入門。我不會(huì)在下文中詳說重復(fù)的知識(shí)。
因?yàn)镕Fmpeg的內(nèi)容及其之多,我只能寫下我會(huì)的那點(diǎn)皮毛,這點(diǎn)皮毛知識(shí)應(yīng)該能讓完全不懂的朋友完成自己想做的事。

安裝與環(huán)境配置
下載
這是FFmpeg的官網(wǎng)下載地址
ffmpeg.org/download.html#build-windows
選擇你的系統(tǒng)

下載網(wǎng)站有兩個(gè),隨便找一個(gè)下載都可以

這里只介紹Windows下的情況


推薦git-full或者gpl-shared
下載完后解壓(別告訴我你不會(huì)解壓)
解壓后的那個(gè)文件夾需要放在一個(gè)固定的位置,放好后就不要再動(dòng)它了。所以建議直接放C盤根目錄。
語法與環(huán)境配置
首先你需要認(rèn)識(shí)一下語法:
字符串需要用半角雙引號(hào)框起來,就像這樣——"路徑"。這是為了防止字符串里有特殊字符影響程序,比如空格;這些特殊字符會(huì)導(dǎo)致程序識(shí)別到的字符串與你想輸入的不一樣。
全局變量使用百分號(hào)框起來,就像這樣——%變量%。
Windows有很多默認(rèn)的環(huán)境變量,比如%windir%=C:\Windows。

打開ffmpeg的方式,就是直接用cmd啟動(dòng)。
cmd是Windows自帶的一個(gè)命令行工具,這個(gè)程序在"%windir%\system32\cmd.exe",所以每次打開它非常得麻煩,這時(shí)候要么在桌面創(chuàng)建一個(gè)快捷方式,要么win+r打開程序——運(yùn)行,用這個(gè)程序運(yùn)行cmd。

這個(gè)程序的用法,已經(jīng)寫在它的臉上了,你不可能不會(huì)用。
在cmd里輸入ffmpeg的路徑,就可以使用ffmpeg了。
比如我的ffmpeg.exe在這里,輸入它的路徑名即可。


如果用“運(yùn)行”打開程序,就必須輸入程序的路徑,比如我想運(yùn)行C盤根目錄下的"游戲.exe",我就要輸入"C:\游戲.exe"。但如果我想打開cmd,卻只用輸入cmd即可,這是為何?
因?yàn)檫@里輸入cmd,其實(shí)相當(dāng)于把環(huán)境變量%path%下的所有路徑里叫cmd的文件全部打開了一遍,而%path%的值里默認(rèn)有"%windir%\system32",所以直接輸入cmd就能找到"%windir%\system32\cmd.exe"。
這時(shí)候聰明的你一定想到了,如果給%path%添加一個(gè)ffmpeg所在路徑的值,不就可以直接調(diào)用ffmpeg了嗎?



按圖中順序點(diǎn)擊,給%path%添加bin那個(gè)文件夾的路徑即可。

然后就可以直接在cmd里輸入ffmpeg來調(diào)用ffmpeg.exe了。

FFmpeg基本命令
[ffmpeg -h]可以看到幫助文檔。
官網(wǎng)文檔地址:http://ffmpeg.org/documentation.html
輸入與流信息查看
使用ffmpeg編解碼視頻,首先要有輸入源,使用命令[-i "路徑名"]即可輸入文件。
????eg:ffmpeg -i "C:\好康的.mp4" -i "D:\學(xué)習(xí)資料\123.avi"
當(dāng)只有輸入的時(shí)候,回車運(yùn)行,將看到該文件的信息。
????eg:

這時(shí)候我們能看到的最重要的信息,就是流信息。
Stream?#n:m——n是輸入文件的序號(hào),第一個(gè)文件就是0,m是該文件的流序號(hào),比如上圖中的0:3就是個(gè)字幕流。
Video、Audio、Subtitle是什么意思不用我多說,Attachment是附件,比如mkv里可以塞入字體附件,圖中0:4就是一個(gè)字體流。
輸出
輸出很簡(jiǎn)單,輸入后,寫上輸出的路徑名,就可以輸出。
????eg:ffmpeg 輸入1的參數(shù)?-i "輸入1" 輸出1的參數(shù)?"輸出1" 輸出2的參數(shù)?"輸出2"
????tip:輸出的文件需要給后綴,ffmpeg會(huì)通過后綴判斷封裝甚至編碼器,比如.gif。
語句順序與流過濾
每個(gè)文件前面的參數(shù),是控制該文件的參數(shù)。例如
ffmpeg -ss 20:00 -t 120 -i "C:\1.mp4" -ss 1:20 -t 10 "D:\2.mp4"
意思是,先從1的20:00開始截取120s,然后從這120s中的第80s開始截取10s,把這10s輸出為2。
這時(shí)候你會(huì)發(fā)現(xiàn),如果原視頻有多個(gè)音頻+多個(gè)字幕,輸出后就只剩一個(gè)了,因?yàn)閒fmpeg默認(rèn)只輸出每種流的第一個(gè)流,且不輸出附件流。這時(shí)候只需要
ffmpeg -ss 20:00 -t?120?-i "C:\1.mp4" -map 0 -ss 1:20 -t 10 "D:\2.mp4"
就可以輸出全部的流了。
[-map]命令可以過濾輸出的流,比如[-map 0:1]就是只輸出第一個(gè)輸入文件的第二個(gè)流,[-map 0]就是輸出第一個(gè)文件的全部流。輸出到哪?當(dāng)然是到后面跟著的那個(gè)"輸出"。
編碼器的查看與設(shè)定
ffmpeg里有非常多的編碼器。如果你想知道有哪些,只需要
ffmpeg -encoders
如果你想查看單個(gè)編碼器的參數(shù),只需要
ffmpeg -h encoder=編碼器名
????eg:[ffmpeg -h encoder=libx264]即可查看x264編碼器參數(shù)。
確定了要使用的編碼器之后,在輸出端指定編碼器即可。
指定編碼器的命令為[-c:流類型簡(jiǎn)寫?編碼器名]或者[-流類型簡(jiǎn)寫codec?編碼器名]
????eg:ffmpeg?-i "C:\1.mp4" -c:v libx265?-acodec flac "D:\2.mp4"
? ??eg:ffmpeg?-i?"M:\3.mp4"?-c:a aac?-vcodec libsvtAV1 "N:\4.mp4"
光指定編碼器肯定是不夠的,還需要給編碼器一些必要的參數(shù)。
參數(shù)放置的位置緊跟在指定編碼器的命令后即可。
????eg:ffmpeg?-i "C:\1.mp4" -c:v libx265 -preset 3?-qp 24?-c:a?aac -aac_coder 0 "D:\2.mp4"
當(dāng)然,ffmpeg的通用參數(shù)也是不能忽略的,如
????[-b:流類型簡(jiǎn)寫]設(shè)置該流的目標(biāo)碼率
????[-q:a]設(shè)置音頻質(zhì)量(僅VBR可用)
等等非常之多,建議大家參考上文中提到的官方文檔,并在遇到需求時(shí)逐一查找,善用搜索引擎,以達(dá)到高學(xué)習(xí)效率。