在此 FFmpeg 教程中,我們學(xué)習(xí)使用 FFmpeg 的命令行工具更改視頻的分辨率(或調(diào)整視頻的大小/縮放)。
更改視頻的分辨率(也稱為調(diào)整大小或縮放)是視頻編輯、處理和壓縮中非常常見的操作。對于 ABR 視頻流尤其如此,其中將單個(gè)視頻作為源并壓縮為多個(gè)不同的比特率分辨率組合。例如,輸入視頻的分辨率可以是1920x1080,ABR 比特流可以是1280x720,640x480等。
因此,作為第一步,讓我們找出輸入視頻的分辨率是多少。使用FFmpeg 版本附帶的工具ffprobe,讓我們確定輸入視頻的分辨率。這是使用ffprobe.
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
此命令的輸出應(yīng)該與您的控制臺上顯示的1920x1080。太好了——您現(xiàn)在知道視頻的分辨率并且現(xiàn)在可以縮放或更改分辨率。
注意:您必須注意,向上/向下縮放的行為是一個(gè)有損過程,會導(dǎo)致視頻質(zhì)量有所下降。
如何使用 FFmpeg 調(diào)整/縮放/更改視頻的分辨率?
使用 FFmpeg 縮放或更改視頻的分辨率是由FFmpeg 中的過濾器scale完成的。要使用scale過濾器,請使用以下命令 –
ffmpeg -i input.mp4 -vf scale=$w:$h <encoding-parameters> output.mp4
其中,$w和$h表示目標(biāo)視頻所需的寬度和高度。例如,您可以使用-vf scale=640:480將視頻大小調(diào)整為480p.
而已!使用這個(gè)簡單的命令,您可以使用 FFmpeg 更改視頻的分辨率。
并且,在 FFmpeg 更改視頻的分辨率后,它將以該分辨率重新編碼。在上面的命令行中,您可以向 FFmpeg 提供編碼參數(shù),并使用這些參數(shù)對縮放后的視頻進(jìn)行編碼。例如,您可以告訴 FFmpeg 使用 crf=18 進(jìn)行編碼,以獲得高質(zhì)量的 H.264/AVC 編碼,或者選擇其他編碼方式!
好的,讓我們來解決下一個(gè)主題,即更改視頻的分辨率但保留/保持其縱橫比。
如何使用 FFmpeg 在保持高質(zhì)量的同時(shí)調(diào)整視頻大小
調(diào)整大小后,您可能會注意到輸出視頻的質(zhì)量很差或達(dá)不到您的預(yù)期。通過告訴 FFmpeg 您希望在調(diào)整大小過程后使用的視頻編碼參數(shù),可以輕松解決此問題。
這是一個(gè)例子——
ffmpeg -i input.mp4 -vf scale=1280:720 -preset slow -crf 18 output.mp4
在這里,您要告訴 FFmpeg 將視頻縮放至 720p,然后使用 crf=18 和 libx264 的慢速預(yù)設(shè)進(jìn)行編碼。由于它打開的編碼工具的數(shù)量,通??梢蕴峁┓浅:玫馁|(zhì)量。
如何更改視頻的分辨率但保持縱橫比?
圖像的縱橫比在維基百科中有如下定義:圖像的縱橫比是其寬度與高度的比值。它通常表示為用冒號分隔的兩個(gè)數(shù)字,如16:9. 對于x:y縱橫比,圖像是 x 個(gè)單位寬和 y 個(gè)單位高。
在處理視頻時(shí)遇到這個(gè)問題很常見:??如何更改視頻的分辨率(或縮放視頻)但保持或保留視頻的原始縱橫比。
在FFmpeg中,如果您想在縮放視頻的同時(shí)保持其寬高比,則需要設(shè)置height或width參數(shù)之一并將另一個(gè)參數(shù)設(shè)置為-1。也就是說,如果您設(shè)置height,則將寬度設(shè)置為 -1,反之亦然。
為了演示,假設(shè)以下命令將高清視頻 ( 1920x1080) 作為其輸入。并且,假設(shè)我們想要更改其分辨率。這可以通過上面討論的兩種方式完成,所以讓我們嘗試兩種方式。
1.指定寬度以保持縱橫比
ffmpeg -i input.mp4 -vf scale=320:-1 output.mp4
生成的視頻的分辨率為320x180. 這是因?yàn)?920 / 320= 6。因此,height被縮放到1080 / 6 = 180像素。
2.指定高度以保持縱橫比
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
生成的視頻的分辨率為1280x720. 這是因?yàn)?080 / 720= 1.5。因此,width被縮放到1920 / 1.5 = 1280像素。
在 FFmpeg 中使用變量縮放/更改視頻的分辨率
我們可以使用表示視頻參數(shù)的變量來實(shí)現(xiàn)相同的縮放命令。輸入視頻的width和height分別用iw和表示ih。
讓我們看看將視頻寬度縮放兩倍 ( 2x) 的命令是什么樣的。
ffmpeg -i input.mp4 -vf scale=iw*2:ih output.mp4
如果你想用一個(gè)數(shù)字除以高度或?qū)挾?,語法會稍微改變,因?yàn)閟cale=iw/2:ih/2參數(shù)需要用雙引號括起來。
ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4
避免根據(jù)輸入視頻的尺寸升級視頻
正如我們在文章開頭提到的,每次向上/向下縮放操作通常不會產(chǎn)生與輸入視頻相同水平的視頻質(zhì)量。在縮放過程中必然會有一些壓縮損失。如果輸入分辨率太低,F(xiàn)Fmpeg提供了一個(gè)巧妙的技巧來防止放大。
ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'min(240,ih)'" output.mp4
在上面的命令行中,執(zhí)行縮放的最小寬度/高度分別設(shè)置為320和240像素。這是防止質(zhì)量不佳縮放的一種非常簡單的方法。
文章來源:http://www.zghlxwxcb.cn/news/detail-807770.html
粉絲福利, 免費(fèi)領(lǐng)取C++音視頻學(xué)習(xí)資料包+學(xué)習(xí)路線大綱、技術(shù)視頻/代碼,內(nèi)容包括(音視頻開發(fā),面試題,F(xiàn)Fmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,編解碼,推拉流,srs)↓↓↓↓↓↓見下面↓↓文章底部點(diǎn)擊免費(fèi)領(lǐng)取↓↓?文章來源地址http://www.zghlxwxcb.cn/news/detail-807770.html
到了這里,關(guān)于使用 FFmpeg 輕松調(diào)整視頻的大小/縮放/更改分辨率的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!