一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

FFmpeg命令行轉(zhuǎn)碼

 星光閃亮圖書館 2022-07-24 發(fā)布于江蘇

本文主要了解FFmpeg進(jìn)行音視頻編碼轉(zhuǎn)換。主要學(xué)習(xí)如下幾個(gè)知識(shí)點(diǎn):

  • FFmpeg使用libx264進(jìn)行H,264(AVC)軟編碼,使用libx265進(jìn)行H.265(HEVC)軟編碼
  • 使用FFmpeg在MacOS環(huán)境下硬編碼
  • 了解音頻編碼,MP3,AAC的參數(shù)設(shè)置編碼

FFmpeg軟編碼H.264和H.265

支持H.264的封裝格式的文件格式有很多,例如FLV,MP4,HLS,TS等。FFmpeg本身不支持H.264的編碼器,通過第三方庫x264或者OpenH264來支持,但是OpenH264開源較晚,所以多數(shù)使用的還是x264,可以通過命令行ffmpeg -h encoder=libx264來查看x264編碼的一些基本信息和參數(shù)情況。

H.264編碼實(shí)例

通過上面的-h命令查看x264支持的參數(shù)真的很多,我們?cè)谝玫絻?yōu)化的時(shí)候可以仔細(xì)了解其參數(shù)的含義,下面的幾個(gè)實(shí)例列出了一些參數(shù)的使用,簡單的了解參數(shù)的含義以及使用方法。每一個(gè)參數(shù)都可以帶很多不同的配置,在使用的時(shí)候查看文檔

編碼器預(yù)設(shè)參數(shù)preset

這個(gè)參數(shù)主要調(diào)節(jié)編碼速度和質(zhì)量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo這10個(gè)選項(xiàng),從快到慢。

使用H.264轉(zhuǎn)碼文件

ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4

輸出關(guān)鍵速度信息




多了一個(gè)參數(shù)-preset ultrafast 中的ultrafast表示使用最快的編碼方式,默認(rèn)的編碼速度是medium模式的,來查看這兩種模式生成的輸出信息差異。
ffmpeg -i input.mp4 -vcodec libx264 -preset medium -b:v 2000k output.mp4



上面的ultrafast速度是41.1倍,使用medium速度是6。24倍但是生成的視頻的畫質(zhì)速度低的會(huì)好一些,

編碼優(yōu)化參數(shù)tune

這個(gè)參數(shù)配合視頻類型和視覺優(yōu)化的參數(shù)??蛇x項(xiàng)

  • film:電影真人類型
  • animation:動(dòng)畫
  • grain:需要保留大量的grain
  • stillimage:靜態(tài)圖像編碼時(shí)使用
  • psnr:提高psnr做了優(yōu)化的參數(shù)
  • ssim:提高ssim做了優(yōu)化參數(shù)
  • fastdecode:可以快速解碼的參數(shù)
  • zerolatency:零延遲,用在需要非常低的延遲的情況,比如電視電話會(huì)議編碼。
ffmpeg -i input.mp4 -vcodec libx264 -tune zerolatency -b:v 2000k output.mp4

profile和level設(shè)置

profile和level的設(shè)置和H.264標(biāo)準(zhǔn)文檔ISO-14496-Part10描述的profile和level信息基本相同。profile有如下選項(xiàng):

  • Baseline
  • Extented
  • Main
  • High
  • High10
  • High422
  • High444
    profile設(shè)置信息不同會(huì)影響編碼出來的視頻的很多參數(shù)不同。例如是否支持I與P分片。level也會(huì)影響很多參數(shù),例如最大解碼速度不同。

下面使用baseline profile和high profile編碼一個(gè)H.264視頻,分析兩個(gè)編碼出來的文件的區(qū)別。有一個(gè)知識(shí)我們提取了解一下baseline profile編碼出來額視頻不會(huì)包含B幀,而high profile包含B幀,下面就看它們B幀的差別

ffmpeg -i input.mp4 -vcodec libx264 -profile:v baseline -level 3.1 -s 352x288 -an -y -t 10 ouput_baseline.ts
ffmpeg -i input.mp4 -vcodec libx264 -profile:v high -level 3.1 -s 352x288 -an -y -t 10 ouput_high.ts

生成了兩個(gè)文件,通過ffprobe來查看包含B幀的信息

ffprobe -v quiet -show_frames -select_streams v output_baseline.ts |grep "pict_type=B"|wc -l

輸出0

ffprobe -v quiet -show_frames -select_streams v output_high.ts |grep "pict_type=B"|wc -l

輸出161
驗(yàn)證了我們的理論baseline profile包含0個(gè)B幀,而high profile包含B幀。在進(jìn)行實(shí)時(shí)流媒體直播時(shí),使用包含B幀的編碼更可靠些;適當(dāng)加入B幀可以有效降低碼率

sc_threshold

FFmpeg可以通過參數(shù)-g設(shè)置幀數(shù)間隔為GOP的長度,但是遇到場景切換的時(shí)候,從一個(gè)畫面突然變?yōu)榱硪粋€(gè)畫面時(shí),會(huì)強(qiáng)行插入一個(gè)關(guān)鍵幀,這時(shí)GOP的長度會(huì)重新開始??梢酝ㄟ^參數(shù)sc_threshold決定是否在場景切換的時(shí)候插入關(guān)鍵幀。
執(zhí)行命令控制編碼時(shí)GOP的大小。

ffmpeg -i input.mp4 -c:v libx264 -g 50 -t 60 output.mp4

執(zhí)行完畢后生成的文件每50幀被設(shè)置為一個(gè)GOP間隔。
通過軟件Elecrd StreamEye查看幀信息如下:




可以看到紅色框框框起來的兩個(gè)I幀間隔很短,因?yàn)椴迦氲腎幀和前面的畫面完全不同

看到有些GOP的間距很短,這是因?yàn)閺?qiáng)行插入了GOP導(dǎo)致的,為了使GOP的插入更加均勻,使用sc_threshold設(shè)置一下:

ffmpeg -i input.mp4 -c:v libx264 -g 50 -sc_threshold 0 -t 60 output.mp4

再看GOP的幀信息如下:




拖動(dòng)下面的滾動(dòng)條沒有發(fā)現(xiàn)和上面一樣相隔很近的兩個(gè)I幀了。

x264opts

由于FFmpeg設(shè)置x264參數(shù)時(shí)增加的參數(shù)比較多,F(xiàn)Fmpeg開放了x264opts,可以通過這個(gè)參數(shù)設(shè)置x264的內(nèi)部私有參數(shù),如設(shè)置IBP幀的順序以及規(guī)律。下面列舉在上面生成的GOP文件數(shù)據(jù)分析基礎(chǔ)上控制生成的文件不出現(xiàn)B幀,只要設(shè)置x264內(nèi)部參數(shù)bframes=0即可:

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=0" -g 50 -sc_threshold 0 -t 60 output.mp4

通過StreamEye查看Stream信息沒有出現(xiàn)B幀



如果希望控制I幀P幀B幀的頻率和規(guī)律,可以通過控制GOP中B幀的幀數(shù)來實(shí)現(xiàn),P幀的頻率可以通過x264的參數(shù)b-adapt進(jìn)行設(shè)置。
例如設(shè)置GOP中,每2個(gè)P幀之間存放3個(gè)B幀:

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=3:b-adapt=0" -g 50 -sc_threshold 0 -t 60 output.mp4

看看分析:



nal-hrd

編碼可以設(shè)置VBR,CBR的編碼模式,VBR為可變碼率,CBR為恒定碼率?;ヂ?lián)網(wǎng)上VBR居多,但是我們可以使用FFmpeg制作CBR碼率視頻。

ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=10:b-adapt=0" -b:v 1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0 -t 60 output.ts

命令執(zhí)行參數(shù)介紹

  • 設(shè)置B幀個(gè)數(shù),每兩個(gè)P幀之間包含10個(gè)B幀
  • 設(shè)置視頻碼率為1000kbit/s
  • 設(shè)置最大碼率為1000kbit/s
  • 設(shè)置最小碼率為1000kbit/s
  • 設(shè)置編碼的buffer大小為50KB
  • 設(shè)置H.264的編碼HRD信號(hào)為CBR
  • 設(shè)置每50幀一個(gè)GOP
  • 設(shè)置場景切換不強(qiáng)行插入關(guān)鍵幀
  • 設(shè)置視頻輸出時(shí)間為60s

可以通過工具Bitrate Viewer查看碼率波動(dòng),我就沒試了,通過Elecard StreamEye查看流信息的bitrate type為CBR。

FFmpeg硬編解碼

以前都不知道FFmpeg可以硬編解碼,以為它就只能軟編解碼,它真的強(qiáng)大。FFmpeg可以在Nvidia GPU,Intel QSV,樹莓派,OS X系統(tǒng)下硬編解碼。我使用的是OS X系統(tǒng),所以下面來實(shí)驗(yàn)一個(gè)在該系統(tǒng)的硬編解碼。

OS X系統(tǒng)硬編解碼

直接看一個(gè)硬轉(zhuǎn)碼的實(shí)例,先把一個(gè)視頻通過h264_vda硬解碼,然后通過h264_videotoolbox硬編碼視頻文件。

ffmpeg -vcodec h264_vda -i input.mp4 -vcodec h264_videotoolbox -b:v 2000k output.mp4

結(jié)果出現(xiàn)錯(cuò)誤如下:




這個(gè)錯(cuò)誤可清楚的知道是沒有安裝h264_vda工具庫,在前面的文章我們知道如何重新給本機(jī)的FFmpeg帶參數(shù)安裝一些我們要使用的庫了。但是我找了可以帶的–with參數(shù),不知道解碼器h264_vda屬于哪個(gè)庫里面的。//todo

FFmpeg輸出MP3

編碼MP3使用編碼器libmp3lame這個(gè)庫,通過命令ffmpeg -h encoder=libmp3lame可以查看它的一些參數(shù)信息。
先來看最簡單的一條命令使用libmp3lame來進(jìn)行音頻文件編碼為MP3文件。

ffmpeg -i input -acodec libmp3lame output.mp3

輸出的碼率類型參數(shù)設(shè)置

  • VBR:編碼碼率不斷變化,通過參數(shù)-q:a設(shè)置
  • CBR:碼率幾乎不變,通過參數(shù)-b設(shè)置
  • ABR:平均碼率是上面兩個(gè)的結(jié)合體,使用它的參數(shù)編碼速度比VBR高,質(zhì)量比VBR差一點(diǎn),比CBR質(zhì)量好點(diǎn),通過參數(shù)-abr來設(shè)置

控制碼率的參數(shù)為-q:a后面帶數(shù)字

FFmpeg輸出AAC

AAC是一種比MP3的編碼效率更高,編碼音質(zhì)更好的音頻編碼格式,常見的使用AAC編碼后的文件存儲(chǔ)格式為m4a。FFmpeg可以使用如下三種編碼器

  • aac:FFmpeg自帶的AAC編碼
  • libfaac:第三方AAC編碼器
  • libfdk_aac:第三方AAC編碼器

FFmpeg使用AAC編碼器

看下面最簡單的例子:

ffmpeg -i input.mp4 -c:a aac -b:a 160k output.aac

同樣可以使用-q:a帶數(shù)值代表的碼率信息進(jìn)行轉(zhuǎn)換

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    粉嫩国产一区二区三区在线| 黑丝袜美女老师的小逼逼| 色偷偷亚洲女人天堂观看| 开心五月激情综合婷婷色| 深夜少妇一区二区三区| 欧美日韩精品综合在线| 亚洲男人的天堂就去爱| 欧美欧美欧美欧美一区| 欧美精品一区久久精品| 绝望的校花花间淫事2| 欧美精品女同一区二区| 国产又大又硬又粗又湿| 欧美成人黄色一区二区三区| 绝望的校花花间淫事2| 国产精品第一香蕉视频| 深夜福利欲求不满的人妻| 成人国产激情在线视频| 欧美日韩亚洲巨色人妻| 九九热精彩视频在线播放| 亚洲一区二区三区精选| 四十女人口红哪个色好看| 欧美三级不卡在线观线看| 日本淫片一区二区三区| 五月天六月激情联盟网| 国产精品福利一级久久| 欧美日韩在线观看自拍| 国产成人精品在线播放| 激情中文字幕在线观看| 特黄大片性高水多欧美一级| 精品欧美在线观看国产| 亚洲一区二区三区三区| 亚洲一级在线免费观看| 丁香七月啪啪激情综合| 中文字幕亚洲视频一区二区| 国产美女精品人人做人人爽| 日韩毛片视频免费观看| 国产午夜福利片在线观看| 国产一级特黄在线观看| 91精品国产综合久久不卡| 亚洲精品美女三级完整版视频| 色小姐干香蕉在线综合网|