1 固定碼率因子crf(Constant Rate Factor)
固定碼率因子(CRF)是 x264 和 x265 編碼器的默認質量(和碼率控制)設置。取值范圍是 0 到 51,這其中越低的值,結果質量越好,同時輸出文件越大,越高的值意味著越高的壓縮比,但可能會在值大到某個點的時候注意到明顯的質量損失。
- 對 x264,一般取值在 18 到 28 之間,默認值是 23。
- 對 x265,默認CRF值是 28
CRF數值 +6 會使文件大小減半,為了達到最優(yōu)編碼效果,主要在離線文件存儲中使用CRF編碼如下:
命令行使用示例如下:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
?2 指定編碼速度preset
指定的編碼速度越慢,獲得的壓縮效率就越高,取值范圍如下:
ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
- placebo與veryslow相比提高了1%,以極高的編碼時間為代價
- veryslow與 slower相比提升了3%
- slower與slow相比提升了5%
- slow 與 medium相比提升了5%~10%
3 視頻幀率
3.1 輸入幀率
幀率(frame per second)就是視頻每秒播放的圖片的幀數。幀率至少要達到15fps,人眼才能才能看到連貫的動作。15fps即1秒刷新15次。幀率主要分為兩類,一種是交錯的(interlaced 縮寫為i),一種是步進的(progressive 縮寫為p)。
- 交錯幀率(interlaced 縮寫為i)一般應用在電視節(jié)目上。NTSC(美國電視標準)使用60i的幀率,也就是每秒60個交錯場(也就是30幀,兩個交錯場就是一幀)。PAL和SECAM標準使用50i的幀率,也就是每秒25幀。
- 步進幀率(progressive 縮寫為p)通常使用在電影節(jié)目上,常使用的值包括24p、25p、30p。最近一些高清的電影電視終端節(jié)目上30p已經無法滿足需求,最新使用的幀率通常為50p和60p。
常見幀率的使用場景說明如下表所示:
幀率 | 描述 |
24p/23.976p | ?電影行業(yè)從1920年引入的標準幀率,在早期電影節(jié)目上使用的比較頻繁。 NTSC采用該幀率的時候將幀率降到了23.976,PAL/SECAM采用該幀率的時候將幀率升到了25fps |
25p? | 使用50HZ電子頻率國家中的電視電影節(jié)目的標準幀率,因為25p的幀率很容易轉換成50i的幀率? |
30p?? | ?數碼相機和攝像機的幀率,30p的幀率很容易轉換成60i用于電視直播 |
50i?? ? | PAL和SECAM電視標準的標準幀率 |
60i/59.94?? | NTSC標準中的標準幀率 |
50p/60p? | ?高清電視(HDTV)常用的幀率 |
48p | 新提出的幀率 |
72p? | 新提出的幀率 |
120p? | 超高清電視節(jié)目(UHDTV)使用的幀率 |
ffmpeg -i input.mp4
輸出的幀率fps如下:
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 19999 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 120k tbc (default)
3.2 輸出幀率
在設置輸出視頻的幀率時,需要使用-r選項。以下是使用-r項設置輸出視頻幀率為30 fps的示例命令:
ffmpeg -i input.mp4 -r 30 output.mp4
使用-r選項將輸出視頻的幀率設置為30 fps。輸出視頻的文件名為output.mp4。
通過代碼使用Python的subprocess模塊調用ffmpeg設置輸出視頻幀率
import subprocess
input_file = 'input.mp4'
output_file = 'output.mp4'
frame_rate = 30
command = ['ffmpeg', '-i', input_file, '-r', str(frame_rate), output_file]
subprocess.run(command)
4 輸出分辨率
將input.mp4更改為分辨率320*240的視頻輸出,命令示例:
ffmpeg -i input.mp4 -s 320x240 output.mp4
視頻分辨率和壓縮大小參考?
分辨率 | Bitrate | 10分鐘的視頻 |
---|---|---|
320p 320×240 | 180 kbit/s | ~13 MB |
360p 640×360 | 300 kbit/s | ~22 MB |
480p 864×480 | 500 kbit/s | ~37 MB |
576p 720x576 | 850 kbit/s | ~63 MB |
720p 960×720 | 1000 kbit/s | ~75 MB |
5 視頻文件轉gif圖像
-ss | 開始截圖時間(秒) | 截圖開始時間越接近篇尾,所花費的時間就越長。 |
-t | 截圖時長(秒) | 省略-ss和-t轉換整個視頻文件。 |
-i | 輸入文件 | |
-y | 覆蓋舊文件 | |
-s | gif圖片的寬和高 | |
-f | 生成圖片格式 | 可以省略,按擴展名轉換 |
-r | 幀率 | 視頻文件中每一秒的幀數 |
命令示例:文章來源:http://www.zghlxwxcb.cn/news/detail-502059.html
ffmpeg -ss 5 -t 10 -i input.mp4 -y -s 640x480 -f gif -r 1 output.gif
6 用圖片制作視頻和gif
將test-001.jpg,test-002.jpg…順序排列的圖片文件轉換為視頻和gif。文章來源地址http://www.zghlxwxcb.cn/news/detail-502059.html
ffmpeg -f image2 -r 1 -i test-%03d.jpg -y output.mp4
ffmpeg -f image2 -r 1 -i test-%03d.jpg -y output.gif
到了這里,關于FFmpeg視頻轉碼關鍵參數詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!