視頻里有一種東西,編碼器碰到它就像撞上銅墻鐵壁——膠片顆粒。它每一幀、每一處都在無規律地抖動,運動預測幾乎失靈,編碼器只能在“燒掉大量比特保留噪聲”和“涂抹成蠟像臉”之間二選一。AV1給出的第三條路,是把顆粒拆下來,編碼干凈畫面,播放時再讓解碼器原樣“種”回去。這事兒靠不靠譜,FFmpeg敲一行參數就能在自己的素材上驗一驗。
顆粒和傳感器噪點的麻煩在于不可預測。AV1的膠片顆粒合成(Film Grain Synthesis, FGS)在編碼端對顆粒建模,把幾個參數塞進碼流里,只占幾個字節。解碼端當作后處理步驟,靠統計特征重新畫上匹配的顆粒。你瀏覽器里的dav1d解碼器,現在已經在線上這么干了。說的不如動手,我們直接上命令。
![]()
第一步,查工具鏈。需要編譯了libsvtav1的FFmpeg。FFmpeg 5.1以上就能把參數傳給SVT-AV1,用最新的7.x或8.x系列就行,比如2026年3月已到8.1版,再搭一個年初發布的SVT-AV1 4.x:
ffmpeg -version | head -1ffmpeg -hide_banner -encoders | grep svtav1
如果沒有libsvtav1那一行,去下個靜態構建版本,或用brew、發行版包管理器裝一個。選測試片段要真帶顆粒的,膠轉磁的影片、低光素材、演唱會錄音都行。拿屏幕錄制那種干凈畫面試FGS,看不出任何效果——因為沒顆粒可建模。先切一段60秒樣本,讓迭代快起來:
ffmpeg -ss 00:05:00 -i source-master.mov -t 60 -c copy sample.mov
第二步,跑一個對照組,不帶顆粒處理的普通SVT-AV1編碼:
ffmpeg -i sample.mov -c:v libsvtav1 -preset 5 -crf 32 -pix_fmt yuv420p10le -svtav1-params tune=0 -an baseline.mkv
參數稍解釋下:preset 5是畫質與速度的平衡點,crf 32給1080p做個起步的質量錨點,tune=0選感知優化,而10比特的yuv420p10le即便對8比特源也是AV1常規操作,能減少色帶。
第三步,打開膠片顆粒合成,只多一行參數:
ffmpeg -i sample.mov -c:v libsvtav1 -preset 5 -crf 32 -pix_fmt yuv420p10le -svtav1-params tune=0:film-grain=8:film-grain-denoise=1 -an grain-synth.mkv
新增的兩個旋鈕:film-grain=8是顆粒建模等級,范圍0到50。社區經驗在實際中挺穩——正常顆粒感的實拍素材用8左右,動畫或干凈數字源用4,只有那種真正噪點爆棚的掃描件才拉高。film-grain-denoise=1讓編碼器把建完模的顆粒從幀畫面里真正移除再編碼,這就是噪聲源素材上省流的大頭,因為編碼器此刻面對的是一幅干凈、容易預測的圖像。如果關掉它,合成顆粒會疊在編碼里仍然(昂貴)保留著的顆粒之上,等于白忙。
要驗證省了多少,并排對比兩個輸出文件的大小,再看看畫面上顆粒的質感。FGS不是為了把噪點抹成鏡面,而是保住那股膠片感,讓碼率顯著下降。最終評判標準只有一個:你的眼睛。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.