ffmpeg轉(zhuǎn)碼視頻真的好用?。╢fmpeg的簡(jiǎn)單使用方法)

說(shuō)明

筆者個(gè)人博客網(wǎng)站:https://hk-shao.github.io/
最新文章和更新都會(huì)在這里

轉(zhuǎn)碼和編輯視頻

今天用Android Studio(后面簡(jiǎn)稱(chēng)AS)里的模擬器給系統(tǒng)錄屏,用來(lái)展示OpenGL可視化的東西,打算上傳B站,后來(lái)發(fā)現(xiàn)AS只能保存webm格式和GIF格式的視頻,并且文件體積巨大,視頻圖像也是順時(shí)針旋轉(zhuǎn)的。

沒(méi)辦法,只能找個(gè)視頻編輯器進(jìn)行轉(zhuǎn)碼和編輯,結(jié)果發(fā)現(xiàn)網(wǎng)上的視頻轉(zhuǎn)碼工具基本粗制濫造,像Adobe PR這樣的視頻剪輯軟件我也沒(méi)必要下載,于是找到了ffmpeg(其實(shí)很早之前在樹(shù)莓派上玩Linux的時(shí)候用過(guò))。

我進(jìn)入ffmpeg官網(wǎng)下載了Win64版本,下載速度很快,下載下來(lái)就是一個(gè)壓縮包,解壓后就是工具本體了,不過(guò)它沒(méi)有任何UI界面,在Windows下你只能進(jìn)入bin目錄,然后Shift+鼠標(biāo)右鍵打開(kāi)命令窗口,使用ffmpeg的指令進(jìn)行操作。如下圖,可以看到轉(zhuǎn)碼效率很高。

下面分析網(wǎng)上搜集的ffmpeg簡(jiǎn)單用法,可以進(jìn)行很多基礎(chǔ)的視頻編輯。

ffmpeg的簡(jiǎn)單用法

轉(zhuǎn)碼

最簡(jiǎn)單命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4
ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
ffmpeg -i out.ogv -vcodec libxvid out.mp4
ffmpeg -i out.mp4 -vcodec wmv1 out.wmv
ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

-i 后面是輸入文件名。-vcodec 后面是編碼格式,h264 最佳,但 Windows 系統(tǒng)默認(rèn)不安裝。如果是要插入 ppt 的視頻,選擇 wmv1 或 wmv2 基本上萬(wàn)無(wú)一失。

附加選項(xiàng):-r 指定幀率,-s 指定分辨率,-b 指定比特率;于此同時(shí)可以對(duì)聲道進(jìn)行轉(zhuǎn)碼,-acodec 指定音頻編碼,-ab 指定音頻比特率,-ac 指定聲道數(shù),例如

ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4

剪切

用 -ss 和 -t 選項(xiàng), 從第 30 秒開(kāi)始,向后截取 10 秒的視頻,并保存:

ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

達(dá)成相同效果,也可以用 -ss 和 -to 選項(xiàng), 從第 30 秒截取到第 40 秒:

ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

值得注意的是,ffmpeg 為了加速,會(huì)使用關(guān)鍵幀技術(shù), 所以有時(shí)剪切出來(lái)的結(jié)果在起止時(shí)間上未必準(zhǔn)確。 通常來(lái)說(shuō),把 -ss 選項(xiàng)放在 -i 之前,會(huì)使用關(guān)鍵幀技術(shù); 把 -ss 選項(xiàng)放在 -i 之后,則不使用關(guān)鍵幀技術(shù)。 如果要使用關(guān)鍵幀技術(shù)又要保留時(shí)間戳,可以加上 -copyts 選項(xiàng):

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

合并

把兩個(gè)視頻文件合并成一個(gè)。

簡(jiǎn)單地使用 concat demuxer,示例:

$ cat mylist.txt
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
 
$ ffmpeg -f concat -i mylist.txt -c copy output

更多時(shí)候,由于輸入文件的多樣性,需要轉(zhuǎn)成中間格式再合成:

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

調(diào)整播放速度

加速四倍:

ffmpeg -i TheOrigin.mp4 -vf  "setpts=0.25*PTS" UpTheOrigin.mp4

四倍慢速:

ffmpeg -i TheOrigin.mp4 -vf "setpts=4*PTS" DownTheOrigin.mp4

幀率設(shè)置

使用-r選項(xiàng)
語(yǔ)法是:

ffmpeg -i input -r fps output

例如:

ffmpeg -i input.avi -r 30 output.mp4

使用fps filter

另一個(gè)設(shè)置幀率是用fps filter,特別是在filterchains使用時(shí)非常有用。
例如:修改輸入文件的幀率到25

ffmpeg -v clip.mpg -vf fps=fps=25 clip.webm

比特率設(shè)置

比特率也是一個(gè)決定音視頻總體質(zhì)量的參數(shù)。他決定每個(gè)時(shí)間單位處理的bit數(shù)。
設(shè)置比特率:

比特率決定處理1s的編碼流需要多少bits,設(shè)置用-b選項(xiàng)。區(qū)分音視頻用-b:a和-b:v
例如:設(shè)置整體1.5Mbit每秒

ffmpeg -i file.avi -b 1.5M file.mp4

ffmpeg -i input.avi -b:v 1500K output.mp4

CBR設(shè)置

CBR設(shè)置一般用作直播流,比如視頻會(huì)議。為輸出設(shè)置CBR,有三個(gè)參數(shù)必須設(shè)置為同一個(gè)值。
bitrate(-b option), minimal rate(-minrate), maximal rate(-maxrate)。maximal rate需要設(shè)置-bufsize選項(xiàng)。例如設(shè)置CBR為0.5Mbit/s。

ffmpeg -i in.avi -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M output.mkv

設(shè)置輸出文件的最大size

用-fs選項(xiàng)。
例如設(shè)置輸出文件的最大的size為10M

ffmpeg -i input.avi -fs 10MB output.mp4

文件大小計(jì)算

文件的大小是是音視頻流大小的和。
視頻流的大小的方程式是(除以8是由bits到bytes的轉(zhuǎn)換):

video_size = video_bitrate * time_in_seconds / 8;

如果音頻是解壓縮的,計(jì)算公式是:

audio_size = smpaling_rate * bit_depth * channels * time_in_second / 8;

例如:計(jì)算10分鐘的視頻, 1500kbits/s 視頻比特率和 128kbits/s的音頻比特率,用下面的計(jì)算方法:

file_size = video_size + audio_size;
file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8;
file_size = (1500 kbits/s + 128kbits/s) * 600s
file_size = 1628kbits/s * 600s
file_size = 976800kb = 976800000 b / 8 = 122100000 B / 1024 = 119238.28125KB
file_size = 119238.28125 KB / 1024 = 116.443634033203125MB = 116.44M
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容