IQuit wrote:不合 邏輯,
所以 我 猜 是 CPU/GPU 轉 的 差異(7 樓 提到).
執著於這個是沒有意義的~
你可以確定片源1和片源2的原始影片是同一個的檔案轉出的嗎??
要作這類(CPU/GPU 轉 的 差異)的比較就是拿同一個高畫質檔案
把解析度/ 幀數(FPS)/ 位元速率(Bitrate)都調成一樣,但不同的解碼方式做轉出
如此才能比較解碼的差異性~
不要老是在張飛打岳飛了~~
Sorcerer905020 wrote:
執著於這個是沒有意義的~
你可以確定片源1和片源2的原始影片是同一個的檔案轉出的嗎??
要作這類(CPU/GPU 轉 的 差異)的比較就是拿同一個高畫質檔案
把解析度/ 幀數(FPS)/ 位元速率(Bitrate)都調成一樣,但不同的解碼方式做轉出
如此才能比較解碼的差異性~
不要老是在張飛打岳飛了~~
#!/bin/zsh
# 編碼用 HEVC Constant Quality 模式,輸出 CRF22.0 ~ CRF28.0 七個不同畫質的影片
for i in {22..28}; do
ffmpeg -nostdin -y -i 'origin.mp4' -c:V libx265 -crf "${i}.0" -ac 2 -c:a aac -vbr 3 -tag:v:0 hvc1 'test [CRF'${i}'.0].mp4'
done
# 比對編碼後的影片跟原始影片,計算 PSNR
for i in {22..28}; do
ffmpeg -i 'test [CRF'${i}'.0].mp4' -i 'origin.mp4' -filter_complex 'psnr' -f null /dev/null 2>&1 | grep Parsed_psnr
done
CRF22.0 - [Parsed_psnr_0 @ 0x60000205c000] PSNR y:46.994510 u:48.561735 v:48.166431 average:47.403643 min:45.107905 max:50.592698
CRF23.0 - [Parsed_psnr_0 @ 0x6000001fc160] PSNR y:46.348772 u:47.962046 v:47.570330 average:46.770672 min:44.401065 max:50.043355
CRF24.0 - [Parsed_psnr_0 @ 0x600001d7c000] PSNR y:45.708005 u:47.372539 v:46.967450 average:46.141606 min:43.687044 max:49.445153
CRF25.0 - [Parsed_psnr_0 @ 0x6000001d8160] PSNR y:45.062010 u:46.717148 v:46.307008 average:45.492437 min:42.889671 max:48.782690
CRF26.0 - [Parsed_psnr_0 @ 0x600002d48210] PSNR y:44.423775 u:46.131675 v:45.723862 average:44.868381 min:42.218560 max:48.132573
CRF27.0 - [Parsed_psnr_0 @ 0x600000df8160] PSNR y:43.786076 u:45.599734 v:45.205310 average:44.259884 min:41.561134 max:47.556072
CRF28.0 - [Parsed_psnr_0 @ 0x600002cc8420] PSNR y:43.151528 u:45.030974 v:44.646004 average:43.643367 min:40.871993 max:46.970365
tyf000 wrote:
簡單的作法,我用 ffmpeg 示範
找一個影片 origin.mp4,用不同畫質去編碼出 test [CRFxx].mp4
#!/bin/zsh
# 編碼用 HEVC Constant Quality 模式,輸出 CRF22.0 ~ CRF28.0 七個不同畫質的影片
for i in {22..28}; do
ffmpeg -nostdin -y -i 'origin.mp4' -c:V libx265 -crf "${i}.0" -ac 2 -c:a aac -vbr 3 -tag:v:0 hvc1 'test [CRF'${i}'.0].mp4'
done
# 比對編碼後的影片跟原始影片,計算 PSNR
for i in {22..28}; do
ffmpeg -v error -i 'test [CRF'${i}'.0].mp4' -i 'origin.mp4' -filter_complex 'psnr' -f null /dev/null
done
PSNR 比對結果像這樣
CRF22.0 - [Parsed_psnr_0 @ 0x60000205c000] PSNR y:46.994510 u:48.561735 v:48.166431 average:47.403643 min:45.107905 max:50.592698
CRF23.0 - [Parsed_psnr_0 @ 0x6000001fc160] PSNR y:46.348772 u:47.962046 v:47.570330 average:46.770672 min:44.401065 max:50.043355
CRF24.0 - [Parsed_psnr_0 @ 0x600001d7c000] PSNR y:45.708005 u:47.372539 v:46.967450 average:46.141606 min:43.687044 max:49.445153
CRF25.0 - [Parsed_psnr_0 @ 0x6000001d8160] PSNR y:45.062010 u:46.717148 v:46.307008 average:45.492437 min:42.889671 max:48.782690
CRF26.0 - [Parsed_psnr_0 @ 0x600002d48210] PSNR y:44.423775 u:46.131675 v:45.723862 average:44.868381 min:42.218560 max:48.132573
CRF27.0 - [Parsed_psnr_0 @ 0x600000df8160] PSNR y:43.786076 u:45.599734 v:45.205310 average:44.259884 min:41.561134 max:47.556072
CRF28.0 - [Parsed_psnr_0 @ 0x600002cc8420] PSNR y:43.151528 u:45.030974 v:44.646004 average:43.643367 min:40.871993 max:46.970365
你可以用同樣的方式,硬編碼幾個不同畫質的影片
然後計算軟編碼和硬編碼的 PSNR,把 PSNR 相近的拉出來比對 (average的差距<0.2),看看兩種檔案的其它差異
如果你只有一個不知來源的檔案,沒有任何能比對的,那就沒辦法
但如果你能從上面可控的測試中找出些不同的 pattern 特徵,那就能套用到一般檔案的判定