delacroix01
Eroge Addict
Hồi chiều D3 có hỏi tớ về cái này:
Dù trước chưa sử dụng phương pháp này lần nào nhưng sau khoảng 30 phút thì tớ cũng tìm ra nguyên lý do đây là trường hợp đặc biệt.
Input:
AVS script:
Output:
Tóm lại làì trong trường hợp này thì chỉ cần render chữ trắng trên nền đen rồi overlay là xong. Để chữ màu khác cũng được nhưng sẽ bị biến thành xám chứ không phải đen trắng nữa.
Chú ý là phải bật pc_range=true nếu ko muốn màu trắng bị ngả xám. Lý do có vụ này là vì overlay được thực hiện trong YUY2 colorspace thay vì RGB, và mặc định khi convert qua YUY2 thì color range bị giới hạn lại thành 16-255 thay vì 0-255. Tham số pc_range=true sẽ điều chỉnh lại khâu convert colorspace này.
1 vài thí nghiệm khác:
Chữ trắng viền tím:
Full opaque text overlay:
Những cách nói trên trong đa số trường hợp đều ít nhiều làm biến dạng cả base layer lẫn overlay layer (về màu sắc và viền text). Để giữ cho base layer không bị ảnh hưởng và kiểm soát màu sắc của overlay layer trong khi lại muốn tùy nghi sử dụng AVS filters để tạo effect không thể làm được nếu chỉ sử dụng Aegisub thì cần 1 kỹ thuật gọi là masking.
Hiểu nôm na thì mask là 1 cái layer đặc biệt được dùng làm tham số để điều khiển chính xác vùng cần xử lý. Tuy rất khó nhưng nếu biết tận dụng thì rất có lợi. Cụ thể trong trường hợp này thì tớ sẽ dùng mask để khử toàn bộ phần đen của overlay layer và giữ lại chính xác phần text layer. Vd tớ có sub màu sắc như sau:
Kết quả:
Trường hợp này ngược lại với cách làm bình thường: Sub layer được dùng làm base, còn video gốc sẽ được overlay lên với mode là Blend (default). Chú ý do đã sử dụng mask nên tuyệt đối không khai báo opacity mà sử dụng default opacity (100%) để video gốc đè hẳn lên nền sub ngoại trừ phần đã được che mask. Nguyên lý sử dụng mask là chuyển subs layer về RGB32 colorspace, trong đó phần nền sẽ có alpha=0 (full transparency), còn phần text có alpha=FF (full opacity), sau đó tách alpha layer ra làm mask. Khi sử dụng overlay với mask thì phần nào trong suốt trên mask sẽ được loại bỏ hoàn toàn, còn phần có opacity cao hơn sẽ được giữ lại tùy theo alpha (ở đây là full opacity), cụ thể như sau:
Đầu tiên, lệnh BlankClip sẽ tạo ra 1 cái blank video RGB24 nền đen, sau đó lệnh ConvertToRGB32 sẽ chuyển video sang RGB32 với alpha = 0, nhờ đó mà phần subs được add sẽ không bị đánh đồng với phần nền nếu tạo video RGB32 từ đầu, kết quả là thu được cái mask như sau:
Ở đây để minh họa đơn giản thì tớ chưa sử dụng AVS filter để tác động lên phần subs. Muốn sử dụng filter để tạo effect cho subs thì add vào sau lệnh TextSub là được.
Do là ví dụ nên tớ chỉ dùng Blur vì cái filter này không làm thay đổi phần có alpha = 0, còn nếu muốn làm viết mấy effect như kiểu đám OP Gundam 00 hay OP Kannazuki no Miko của jfs thì phức tạp hơn nhiều vì phải set thêm mask để lock không cho filter tác động vào phần có alpha = 0 gây ra hiệu quả ko mong muốn (điển hình mấy cái Scanline hay AddGrain).
Xem thêm:
http://avisynth.nl/index.php/Overlay
http://forums.animesuki.com/showthread.php?t=29838&page=3
Giờ tớ đi làm đã. Có gì tối về edit image link sang host khác sau.
Edit: Done. Giờ đi nghiên cứu Mask Tools.
Dù trước chưa sử dụng phương pháp này lần nào nhưng sau khoảng 30 phút thì tớ cũng tìm ra nguyên lý do đây là trường hợp đặc biệt.
Input:
Show


AVS script:
Code:
bg=ImageSource("bg.png", pixel_type="RGB24", start=0, end=120, fps=12)
subs=BlankClip(pixel_type="RGB24", width=1280, height=720, length=120, fps=12, color=$000000).TextSub("ss.ass")
[COLOR="#FF0000"]return Overlay(bg, subs, mode="Exclusion", pc_range=true)[/COLOR]
Show

Tóm lại làì trong trường hợp này thì chỉ cần render chữ trắng trên nền đen rồi overlay là xong. Để chữ màu khác cũng được nhưng sẽ bị biến thành xám chứ không phải đen trắng nữa.
Chú ý là phải bật pc_range=true nếu ko muốn màu trắng bị ngả xám. Lý do có vụ này là vì overlay được thực hiện trong YUY2 colorspace thay vì RGB, và mặc định khi convert qua YUY2 thì color range bị giới hạn lại thành 16-255 thay vì 0-255. Tham số pc_range=true sẽ điều chỉnh lại khâu convert colorspace này.
1 vài thí nghiệm khác:
Chữ trắng viền đen
Cái này dùng làm hiệu ứng phim âm bản được.
Peek hole effect :megusta:


Greyscale



Cái này dùng làm hiệu ứng phim âm bản được.

Peek hole effect :megusta:
Chữ trắng viền xanh đậm

Pseudo glow

Irregular stroke

Irregular text color

Chữ trắng viền tím:
Chữ trắng viền tím





Full opaque text overlay:
Những cách nói trên trong đa số trường hợp đều ít nhiều làm biến dạng cả base layer lẫn overlay layer (về màu sắc và viền text). Để giữ cho base layer không bị ảnh hưởng và kiểm soát màu sắc của overlay layer trong khi lại muốn tùy nghi sử dụng AVS filters để tạo effect không thể làm được nếu chỉ sử dụng Aegisub thì cần 1 kỹ thuật gọi là masking.
Hiểu nôm na thì mask là 1 cái layer đặc biệt được dùng làm tham số để điều khiển chính xác vùng cần xử lý. Tuy rất khó nhưng nếu biết tận dụng thì rất có lợi. Cụ thể trong trường hợp này thì tớ sẽ dùng mask để khử toàn bộ phần đen của overlay layer và giữ lại chính xác phần text layer. Vd tớ có sub màu sắc như sau:
Show

Code:
bg=ImageSource("shiori-chan.jpg", pixel_type="RGB24", start=0, end=120, fps=12)
subs=BlankClip(pixel_type="RGB24", width=1280, height=720, length=120, fps=12, color=$000000)[U].ConvertToRGB32()[/U].TextSub("ss.ass")
return Overlay([U]subs, bg[/U], mask=ShowAlpha(subs))
Show

Trường hợp này ngược lại với cách làm bình thường: Sub layer được dùng làm base, còn video gốc sẽ được overlay lên với mode là Blend (default). Chú ý do đã sử dụng mask nên tuyệt đối không khai báo opacity mà sử dụng default opacity (100%) để video gốc đè hẳn lên nền sub ngoại trừ phần đã được che mask. Nguyên lý sử dụng mask là chuyển subs layer về RGB32 colorspace, trong đó phần nền sẽ có alpha=0 (full transparency), còn phần text có alpha=FF (full opacity), sau đó tách alpha layer ra làm mask. Khi sử dụng overlay với mask thì phần nào trong suốt trên mask sẽ được loại bỏ hoàn toàn, còn phần có opacity cao hơn sẽ được giữ lại tùy theo alpha (ở đây là full opacity), cụ thể như sau:
Code:
subs=BlankClip(pixel_type="RGB24", width=1280, height=720, length=120, fps=12, color=$000000)[U].ConvertToRGB32()[/U].TextSub("ss.ass")
Show

Ở đây để minh họa đơn giản thì tớ chưa sử dụng AVS filter để tác động lên phần subs. Muốn sử dụng filter để tạo effect cho subs thì add vào sau lệnh TextSub là được.
Vd

Do là ví dụ nên tớ chỉ dùng Blur vì cái filter này không làm thay đổi phần có alpha = 0, còn nếu muốn làm viết mấy effect như kiểu đám OP Gundam 00 hay OP Kannazuki no Miko của jfs thì phức tạp hơn nhiều vì phải set thêm mask để lock không cho filter tác động vào phần có alpha = 0 gây ra hiệu quả ko mong muốn (điển hình mấy cái Scanline hay AddGrain).
Xem thêm:
http://avisynth.nl/index.php/Overlay
http://forums.animesuki.com/showthread.php?t=29838&page=3
Giờ tớ đi làm đã. Có gì tối về edit image link sang host khác sau.
Edit: Done. Giờ đi nghiên cứu Mask Tools.