φυβλαςのβλογ
บล็อกของ phyblas



manim บทที่ ๒: คำสั่งสำหรับสร้างภาพ
เขียนเมื่อ 2021/03/12 00:02
แก้ไขล่าสุด 2021/09/28 16:42

ต่อจาก บทที่ ๑

ในบทที่แล้วได้แนะนำการติดตั้ง manim และการใช้คำสั่ง manimgl ในเบื้องต้นไปแล้ว สำหรับบทนี้จะลงลึกรายละเอียดการใช้คำสั่ง manimgl




เริ่มต้นรันคำสั่ง manimgl กรณีที่มี Scene เดียว

ขอเริ่มจากยกตัวอย่าง เช่นมีไฟล์ kumo.py ดังนี้ (โค้ดสั้นๆง่ายๆคล้ายตัวอย่างในบทที่แล้ว) ซึ่งได้สร้างคลาสที่รับทอดคลาส Scene ไว้อันเดียว
import manimlib as mnm

class Kumodesuga(mnm.Scene):
    def construct(self):
        text = mnm.Text('แมงมุมแล้วไง\n\nข้องใจเหรอคะ?',size=3.2,color='#55ff77')
        self.play(mnm.Write(text),run_time=1.6)

จากนั้นเปิดคอมมานด์ไลน์ ไปที่โฟลเดอร์ที่ไฟล์อยู่แล้วรันคำสั่ง manimgl ตามด้วยชื่อไฟล์

manimgl kumo.py

แล้วก็จะปรากฏหน้าต่างแสดงภาพเคลื่อนไหวซึ่งตัวหนังสือค่อยๆถูกเขียนขึ้นแบบนี้






กรณีมี class Scene หลายอัน

ตัวอย่างที่แล้วเป็นกรณีที่มีการสร้างสร้างคลาสที่รับทอดคลาส Scene ไว้แค่อันเดียว แต่หากมีมากกว่า ๑ อันเมื่อรันแล้วจะมีให้เลือกว่าจะเปิดอันไหน

ตัวอย่าง ลองสร้างไฟล์ใหม่ amu.py ซึ่งมีสร้างคลาสของ Scene ไว้ ๒ อัน ดังนี้
import manimlib as mnm

class Arifureta(mnm.Scene):
    def construct(self):
        text = mnm.Text('อาชีพกระจอก\n\nแล้วทําไม\n\nยังไงข้าก็เทพ',size=1.6,color='#db266e')
        self.play(mnm.Write(text),run_time=2.5)

class Mushoku(mnm.Scene):
    def construct(self):
        text = mnm.Text('เกิดชาตินี้พี่ต้องเทพ',size=2.2,color='#317b8d')
        self.play(mnm.Write(text),run_time=1.8)

จากนั้นลองรันไฟล์
manimgl amu.py

ก็จะขึ้นมาแบบนี้
1: Arifureta
2: Mushoku

จากนั้นให้พิมพ์เลข 1 หรือ 2 หรือชื่อเต็มของคลาสลงไปก็จะเป็นการเลือกเปิดอันนั้น

แต่หากไม่ต้องการที่จะต้องพิมพ์ภายหลัง ก็ใส่ชื่อ Scene ตามหลังชื่อไฟล์ไปได้เลย ก็จะเป็นการเลือกเปิดฉากนั้นทันที
manimgl amu.py Arifureta




การแสดงภาพเต็มจอ (-f)

หากต้องการหน้าต่างใหญ่ขนาดเต็มจอก็เติม -f ลงไป

manimgl kumo.py -f

ก็จะแสดงผลออกมาเต็มหน้าจอ




การแสดงเฉพาะภาพสุดท้าย (-s)

หากไม่ได้ต้องการเห็นภาพเคลื่อนไหวแต่อยากดูแค่ภาพสุดท้ายที่ปรากฏแค่ภาพเดียวเลยก็ใส่ -s ลงไป

manimgl kumo.py -s




การเปลี่ยนสีฉากหลัง (-c)

ฉากหลังของภาพนั้นโดยค่าตั้งต้นแล้วจะเป็นสีดำสนิท แต่หากต้องการเปลี่ยนฉากหลังให้เป็นสีอื่นก็ทำได้โดยใส่ -c ตามด้วยรหัสสี

เช่น
manimgl amu.py Mushoku -c #FFAAAA

ก็จะออกมาเป็นแบบนี้



หรือจะใส่เป็นชื่อสีก็ได้
manimgl amu.py Arifureta -c cyan






การเขียนภาพลงไฟล์ (-w -o)

หากรันแบบปกติจะแค่ขึ้นหน้าต่างมาแสดงภาพ แต่ไม่ได้มีการบันทึกภาพลงไฟล์ แต่หากต้องการบันทึกเป็นไฟล์ .mp4 ก็ให้ใส่ตัวเลือกเสริม -w ลงไป

เช่น
manimgl kumo.py -w

แล้วภาพจะถูกบันทึกลงในโฟลเดอร์ชื่อ videos โดยจะเป็นชื่อไฟล์จะตรงกับชื่อคลาส ในที่นี้คือ Kumodesuga.mp4



หากต้องการให้ทั้งเขียนไฟล์แล้วเมื่อสร้างไฟล์ขึ้นมาเสร็จก็เปิดไฟล์นั้นขึ้นมาด้วยก็เติม -o แทน -w
manimgl kumo.py -o




การให้บันทึกทั้งหมด ในกรณีที่มีหลาย class Scene (-a)

กรณีที่ในไฟล์ .py นั้นมีใส่คลาสของ Scene ไว้มากกว่า ๑ อัน เมื่อรัน manimgl ก็จะมีให้เลือกว่าจะเอา Scene ไหน รวมถึงกรณีเมื่อใส่ -w หรือ -o เพื่อเขียนไฟล์ด้วย ก็จะมีให้เลือกว่าจะเขียน Scene ไหน

แต่หากใส่ -a ลงไปด้วยก็จะเป็นการสร้างไฟล์ของทุก Scene ที่มีทั้งหมด
manimgl amu.py -wa

ถ้าใช้ -o ก็จะเปิดแต่ละไฟล์ขึ้นมาทันทีที่สร้างเสร็จ
manimgl amu.py -oa




การระบุชื่อไฟล์ที่จะบันทึก (--file_name)

ปกติชื่อไฟล์ที่ได้จะเป็นไปตามชื่อคลาส แต่หากต้องการกำหนดชื่อไฟล์ขึ้นเองก็ทำได้โดยใส่ --file_name ตามด้วยชื่อไฟล์ที่ต้องการ เช่น
manimgl kumo.py -w --file_name kumo.mp4

แบบนี้ก็จะได้ไฟล์ชื่อ kumo.mp4




ปรับคุณภาพของภาพ (-m -l --uhd)

ปกติโดยค่าตั้งต้นแล้วถ้าไม่ได้ใส่ตัวเลือกเสริมใดๆเพิ่มเติมเราจะได้ภาพที่มีคุณภาพค่อนข้างสูง ซึ่งโดยค่าตั้งต้นแล้วจะเป็นวีดีโอขนาด 1920×1080 เฟรมเรต 30

แต่บางครั้งอาจต้องการประหยัดเวลาหรือพื้นที่เก็บไฟล์ กรณีแบบนั้นก็อาจทำการปรับลดคุณภาพของภาพลงได้

หากต้องการได้ภาพคุณภาพต่ำก็ทำได้โดยใส่ -l จะได้ภาพขนาด 854×480 เฟรมเรต 15
manimgl kumo.py -wl

ลองเทียบไฟล์ที่ได้ออกมา จะเห็นว่าขนาดไฟล์เล็กลง

ภาพคุณภาพปานกลางให้ใส่ -m จะได้ภาพขนาด 1280×720 เฟรมเรต 30
manimgl kumo.py -wm

ในทางกลับกันถ้าหากต้องการภาพคุณภาพสูงเป็นพิเศษก็ใส่ --uhd
manimgl kumo.py -w --uhd

ก็จะได้ภาพคุณภาพสูงมาก ขนาด 3840×2160 เฟรมเรต 60 แต่ขนาดไฟล์ก็ใหญ่มากเป็นพิเศษ

นอกจากนี้ยังกำหนดความละเอียดภาพและเฟรมเรตให้เป็นไปตามที่ต้องการได้โดยเติม -r และ --frame_rate




ปรับแต่งความละเอียดภาพ (-r)

สามารถระบุเลือกขนาดความละเอียดของภาพที่จะเขียนออกมาได้โดยใส่ -r แล้วตามด้วยความกว้างและสูงโดยใส่ค่าเป็น กว้างxยาว

ตัวอย่างเช่น
manimgl kumo.py -wr 400x500

แบบนี้ก็จะได้วีดีโอขนาด 400×500




การปรับเฟรมเรต (--frame_rate)

สามารถกำหนดเฟรมเรต (จำนวนภาพต่อวินาที) ของวีดีโอที่ได้ โดยใส่ --frame_rate ตามด้วยเลขจำนวนเต็มที่แสดงจำนวนภาพต่อวินาที

ตัวอย่างเช่น
manimgl kumo.py -w --frame_rate 5

แบบนี้ก็จะได้วีดีโอที่แสดง ๕ ภาพต่อวินาที




การบันทึกเป็น gif (-i)

หากใส่ -w ก็จะเป็นการทำไฟล์วีดีโอ .mp4 แต่นอกจากนั้นแล้วหากต้องการทำเป็นไฟล์ภาพ .gif ก็ทำได้ โดยเติม -i แทน เพียงแต่ขนาดภาพที่ได้จะค่อนข้างใหญ่เมื่อเทียบกับ .mp4 และคุณภาพของภาพอาจดูไม่ค่อยดีนัก

ตัวอย่างเช่นทำภาพ gif ขนาด 300×100 เฟรมเรต 5
manimgl kumo.py -i --frame_rate 5 -r 300x100

ผลที่ได้ก็จะเป็นภาพ gif แบบนี้






ข้อมูลเพิ่มเติม (-h --help)

นอกเหนือจากที่กล่าวมาแล้วนั้น manim ยังมีรายละเอียดที่ไม่ได้เขียนถึงอีกมาก รวมทั้งอาจมีการเปลี่ยนแปลงในอนาคต

หากต้องการอ่านดูรายละเอียดเพิ่มเติมทำได้โดยพิมพ์ -h
manimgl -h

หรือ --help
manimgl --help



อ่านบทถัดไป >> บทที่ ๓





-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> manim

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

บทความแต่ละเดือน

2024年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2023年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2022年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2021年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

2020年

1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月

ค้นบทความเก่ากว่านั้น

ไทย

日本語

中文