# Cara Descale yang baik dan benar

Resizing Anime sama Descaling Anime menghasilkan hal yang berbeda, Descaling menggunakan algoritma lain agar Anime dapat dikembalikan ke resolusi asli (Native Resolution).

Ada beberapa macam kernel yang dipakai sama Web streaming, atau studio animasinya.

Kernel yang sering dipakai biasanya Bilinear untuk upscale Anime dari resolusi asli (tergantung kasus).

Untuk permulaan, buatlah file baru dan tambah kode seperti ini (Ekstensi file: .vpy).

from vskernels import (
    BicubicSharp,
    Bilinear,
    Catrom,
    Lanczos,
)
from vstools import core, depth, get_y, set_output

# Load your clip here
src = core.lsmas.LWLibavSource(r"YourVideo.mkv")

clip = depth(get_y(src), 32)

set_output(src)
set_output(clip)

for kernel in [Bilinear, Catrom, BicubicSharp, Lanczos(3)]:
    desc = kernel.descale(clip, 1600, 900) # Your native resolution
    resc = kernel.scale(desc, clip.width, clip.height)
    err = core.std.Expr([clip, resc], "x y - abs 10 *")

    name = f"{kernel.__name__ if hasattr(kernel, '__name__') else kernel.__class__.__name__}"

    set_output(desc, f"{name} Descale")
    set_output(resc, f"{name} Rescale")
    set_output(err, f"{name} Diff")

Dan ngerun menggunakan vs-preview dari vs-jet vspreview descale.vpy

Contoh hasilnya seperti ini.

Dikala Anda sudah mengecek native yang udah fix, aku sarankan menggunakan RescaleBuilder dari vodesfunc.

Contoh:

dict(width=1356, height=763, src_top = 0.3625, src_height = 762.7, src_width=1355.9, src_left=0.0625)
from vodesfunc import RescaleBuilder
from vskernels import Bilinear, Hermite
from vsscale import ArtCNN
from vsmuxtools import src_file
from vstools import set_output

# Source
src = src_file(r"YourVideo.mkv")
src = src.init_cut()

native_res = dict(width=1355.9, height=762.7, base_width=1356, base_height=763, shift=(0.3625, 0.0625))
builder, rescaled = (
    RescaleBuilder(src)
    .descale(Bilinear(), **native_res)
    .double(ArtCNN.R8F64)
    .downscale(Hermite(linear=True))
    .final()
)

set_output(src)
set_output(builder.descaled, "Descale")
set_output(builder.rescaled, "Same Kernel Rescale")

set_output(rescaled, "Upscaled")

Analoginya seperti ini: kita telah mendapatkan native resolusi dari anime Boku no Kokoro no Yabai Yatsu sebagai contoh.

  1. Descale dengan Kernel Bilinear
    Native resolusi yang ditemukan adalah 1355.9x762.7p dengan basis resolusi 1356x763p. Ini berarti resolusi asli anime tersebut sedikit bergeser, dengan nilai src_top=0.3625 dan src_left=0.0625. Pergeseran ini berasal dari proses produksi di studio.

  2. Double dengan ArtCNN
    Setelah mendapatkan native resolusi, kita melakukan upscaling menggunakan ArtCNN. ArtCNN adalah Convolutional Neural Network yang dirancang untuk meningkatkan resolusi gambar secara detail.

  3. Downscale dengan Kernel Hermite
    Setelah upscaling, kita menggunakan kernel Hermite dengan Linear Light untuk melakukan downscaling kembali ke resolusi sumber.

    • Linear Light berarti proses resizing dilakukan dalam ruang cahaya linear. Gambar diubah ke ruang cahaya linear sebelum di-resize, lalu dikembalikan ke gamma setelahnya.
    • Kernel Hermite (bicubic dengan a=0, b=0) digunakan karena sifatnya yang cocok untuk menjaga detail selama proses resizing.

Dengan langkah-langkah ini, kita dapat merekonstruksi resolusi asli anime dengan lebih baik, sekaligus memastikan hasil akhir tetap sesuai dengan sumbernya.

Sekian dari saya.

Reference by N4O.