3 คะแนน โดย GN⁺ 2023-11-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

คำแนะนำการอัปเกรด HandBrake 1.7.0

  • ก่อนอัปเดต HandBrake โปรดตรวจสอบว่าไม่มีงานเข้ารหัสที่ค้างอยู่ และแนะนำให้สำรองข้อมูลพรีเซ็ตแบบกำหนดเองและการตั้งค่าแอปไว้
  • ผู้ใช้ Windows ต้องติดตั้ง Microsoft .NET Desktop Runtime เวอร์ชัน 6.0.x และแม้จะติดตั้ง .NET 7 อยู่แล้ว ก็ยังจำเป็นต้องติดตั้ง .NET 6

บันทึกประจำรุ่น HandBrake 1.7.0

  • สามารถดูรายการการปรับปรุงและการแก้ไขบั๊กทั้งหมดได้ในบันทึกประจำรุ่นบน GitHub

การรายงานปัญหาและการส่งข้อเสนอแนะ

  • หากพบบั๊กหรือปัญหาที่สามารถทำซ้ำได้ หรือต้องการส่งข้อเสนอแนะ ขอให้แจ้งผ่าน GitHub issue tracker
  • สามารถติดต่อผ่านช่องทางสนับสนุนชุมชน IRC ได้เช่นกัน
  • แอป HandBrake พัฒนาโดยทีมอาสาสมัครขนาดเล็กในเวลาว่าง จึงอาจตอบกลับได้ไม่ทันที แต่ทีมงานจะตรวจสอบทุกความเห็นและยินดีรับข้อเสนอแนะที่สร้างสรรค์

คำขอบคุณและการมีส่วนร่วม

  • ฟีเจอร์บางส่วนในรีลีสนี้ได้รับมาจากผู้ใช้ HandBrake หรือบริษัทต่าง ๆ และงานแปลเกิดขึ้นได้จากการมีส่วนร่วมอย่างแข็งขันของชุมชนอาสาสมัครทั่วโลก
  • สำหรับผู้ที่สนใจมีส่วนร่วมแต่ยังไม่ได้เข้าร่วม แนะนำให้อ่านคู่มือการมีส่วนร่วม
  • มีหลายวิธีในการช่วยมีส่วนร่วมได้ แม้จะไม่ใช่นักพัฒนาก็ตาม

ความเห็นของ GN⁺

  • การอัปเกรด HandBrake 1.7.0 จำเป็นต้องสำรองการตั้งค่าแบบกำหนดเองและติดตั้ง .NET runtime ใหม่
  • การอัปเดตนี้รวมทั้งการปรับปรุงและการแก้ไขบั๊ก และเป็นโครงการที่ขับเคลื่อนโดยชุมชนจากการมีส่วนร่วมของผู้ใช้และบริษัทต่าง ๆ
  • บทความนี้แจ้งข่าวการออกเวอร์ชันใหม่ของ HandBrake ซึ่งเป็นโอเพนซอร์สวิดีโอทรานส์โค้ดเดอร์ และน่าสนใจในแง่ที่เน้นย้ำความสำคัญของความร่วมมือและการมีส่วนร่วมในชุมชนเทคโนโลยี

1 ความคิดเห็น

 
GN⁺ 2023-11-21
ความคิดเห็นบน Hacker News
  • ถ้าคุณรู้สึกเสียดายที่ HandBrake ไม่คำนวณส่วนที่เหลือให้อัตโนมัติเมื่อระบุขนาดไฟล์สุดท้าย จริง ๆ แล้วการคำนวณนั้นง่ายมาก
    บิตเรตเฉลี่ย [kbps] = ขนาดเป้าหมาย [กิโลบิต] ÷ ความยาว [วินาที]
    เช่น ถ้าต้องการทำไฟล์ความยาว 2 ชั่วโมง 48 นาทีให้ไม่เกิน 5GB, 2 ชั่วโมง 48 นาทีคือ 10,080 วินาที และ 5GB คือ 40,000,000kb ดังนั้นบิตเรตเฉลี่ยจะเป็น 40,000,000kb ÷ 10,080 วินาที = 3,968kbps
    ถ้าเสียงอยู่ที่ 256kbps บิตเรตวิดีโอเฉลี่ยจึงต้องเป็น ไม่เกิน 3,712kbps

    • การคำนวณนี้ถูกต้องเฉพาะตอนเข้ารหัสแบบ บิตเรตคงที่ เท่านั้น
      โดยทั่วไปจะเข้ารหัสแบบคุณภาพคงที่ ซึ่งขนาดเอาต์พุตขึ้นอยู่กับวิดีโออินพุตอย่างมาก
      เลยทำ Python wrapper ขึ้นมาเพื่อพาร์สเอาต์พุตของ HandBrakeCLI และประเมินขนาดสุดท้ายจากเปอร์เซ็นต์ที่เสร็จแล้วกับขนาดไฟล์เอาต์พุตปัจจุบัน
      ถ้าดูเหมือนไฟล์จะใหญ่เกินไป หรือคุณภาพเอาต์พุตแย่เกินจนเห็นว่าต้องเพิ่มค่า quality factor ก็สามารถหยุดได้ตั้งแต่เนิ่น ๆ
  • ข้อความ “Put that cocktail down. Your HandBrake encode is complete!” ยังอยู่มานานขนาดนี้ รู้สึกดีนะ

    • ชอบรายละเอียดแบบนี้ เหมือนเติม จิตวิญญาณหรือผีสางอะไรสักอย่าง กลับเข้าไปในเครื่องนิดหน่อย เลยรู้สึกถูกใจ
  • เมื่อก่อนแม้ pipeline ของ HandBrake จะกลายเป็น 10-bit แล้ว แต่ฟิลเตอร์จำนวนมากยังคงเป็น 8-bit อยู่ จึงง่ายที่จะเผลอเลือกฟิลเตอร์ผิดแล้วทำให้คุณภาพการเข้ารหัสลดลงโดยไม่รู้ตัว
    ตอนนี้ดูเหมือนว่าฟิลเตอร์ส่วนใหญ่ หรืออาจจะทั้งหมด รองรับ 10-bit แล้ว
    อีกอย่าง เพราะไลเซนส์ของ FDK-AAC ทำให้ bundle มาด้วยไม่ได้ โค้ดек AAC ในเวอร์ชัน release เลยด้อยกว่า แต่ได้ยินมาว่าช่วงนี้โค้ดեկนั้นไม่ได้แย่เหมือนเมื่อก่อนแล้ว
    สงสัยเหมือนกันว่าแอปดี ๆ เวอร์ชันปัจจุบันนี้ยังมีหลุมพรางใหญ่ ๆ อยู่ไหม

    • ตั้งแต่ 1.6 เป็นต้นมา ฟิลเตอร์ทั้งหมดรองรับ ความลึกบิตสูง แล้ว คุณภาพของ AAC encoder ตอนนี้ก็ถือว่าค่อนข้างดี และบน macOS สามารถใช้ AAC encoder ของ Apple ได้ จึงไม่เป็นปัญหา
      อย่างไรก็ดี ปัญหาหลักคือขาดคนทำงาน มีฟีเจอร์ที่อยากได้จำนวนมากยังค้างอยู่ใน สวรรค์แห่งฟีเจอร์
      ก็คงเหมือนโปรเจกต์โอเพนซอร์สทั้งหมดนั่นแหละ
  • ช่วงนี้ผมขอคำสั่งเทอร์มินัล ffmpeg จาก ChatGPT
    เร็วกว่าแอปไหน ๆ มาก และปรับแต่งได้ตามต้องการ

    • แค่คลิกไฟล์ กด “open with handbrake” แล้วกด “convert” ก็พอแล้ว นึกไม่ออกว่าจะมีอะไรเร็วไปกว่านี้ได้อีก
    • คำว่า “ปรับแต่งได้ตามต้องการ” หมายถึงต้องเข้าใจ ตัวเลือกของ ffmpeg และการทำงานร่วมกันของมันจริง ๆ
      จะบอกว่าการลองผิดลองถูกหรืออ่าน man page นั้น “เร็วกว่ามาก” เมื่อเทียบกับการเลือก preset ใน HandBrake แล้วติ๊ก checkbox หรือเลื่อน slider ก็คงพูดยาก
    • แต่ ChatGPT ไม่รู้รูปแบบไฟล์ เว้นแต่ว่าจะใส่เอาต์พุตของ ffprobe ลงไปใน prompt ด้วย
      ถ้าแหล่งที่มาเป็น DVD ก็มีหลายอย่างต้องพิจารณา เช่น ปัญหา aspect ratio, deinterlacing, การจัดการ subtitle เป็นต้น
    • ffmpeg นี่แหละเป็นโปรแกรมเดียวที่อยากให้มี visual no-code จริง ๆ
      เดี๋ยวนี้พอจะค้น man page อะไรก็ตาม ก็เริ่มมองหา option แบบ --help ที่คล้าย --chatgpt แล้ว
    • เร็วกว่า แต่ก็ผิดพลาดง่ายกว่าด้วย แอปเองก็ปรับแต่งได้ตามต้องการเหมือนกัน ดังนั้นข้อนี้เสมอกัน
  • รายการฟีเจอร์ดูดี โดยเฉพาะการปรับปรุงประสิทธิภาพบนสถาปัตยกรรม arm64 / aarch64 / Apple Silicon, การถอดรหัส HEVC ที่เร็วขึ้นจาก FFmpeg รุ่นใหม่และฟิลเตอร์ bwdif ที่เร็วขึ้น 30%, การปรับแต่ง assembly ใหม่ของ SVT-AV1 ที่ทำให้ประสิทธิภาพเพิ่มได้สูงสุด 4 เท่า รวมถึงการลบการคัดลอกเฟรมที่ไม่จำเป็นเพื่อเพิ่มประสิทธิภาพหน่วยความจำและปรับปรุงความเร็วในการแปลงวิดีโอ น่าคาดหวังมาก

  • ข้อติเดียวที่มีต่อ HandBrakeCLI คือไม่สามารถเข้ารหัส อินพุตที่ pipe เข้ามาทาง stdin ได้
    FFmpeg รองรับ และคิดว่า HandBrake ก็ใช้ FFmpeg ภายในเหมือนกัน

    • HandBrake ใช้ libavformat, libavcodec, libavfilter ซึ่งเป็นส่วนหนึ่งของไลบรารี FFmpeg
      ถึงอย่างนั้นก็เป็นแอปที่ต่างกันโดยสิ้นเชิง decoder, demuxer บางส่วน และ filter บางตัวเหมือนกัน แต่วิธีเชื่อมสิ่งเหล่านี้เข้าด้วยกันต่างจากแอป command-line ของ FFmpeg อย่างสิ้นเชิง
    • ใช้ named pipe ไม่ได้เหรอ?
      หรืออาจใช้เวทมนตร์ Bash แบบ handbrake-cli -i <(cat video-file.mp4) ได้ก็ได้
      ไม่ค่อยรู้เหมือนกัน เพราะไม่เคยใช้ HandBrakeCLI ใช้แต่ GUI
    • ตอนรู้จัก HandBrake ครั้งแรกก็แปลกใจ เพราะแทนที่จะใช้ FFmpeg เฉย ๆ กลับสร้างองค์ประกอบหลายอย่างเอง
      แน่นอนว่าในส่วนอื่น ๆ ก็ใช้ไลบรารี FFmpeg อย่างกว้างขวาง
      มันเป็นหนึ่งใน transcoder ไม่กี่ตัวที่ไม่ได้เป็นแค่ wrapper ของ FFmpeg ซึ่งเป็นทั้งข้อดีและข้อเสีย
  • มีใครอธิบายแบบง่าย ๆ ได้ไหมว่าทำไม HandBrake ถึงบอกว่าไม่สามารถทำ option ขนาดไฟล์เป้าหมาย ได้?
    ในแอปบีบอัดวิดีโอบน Android ฟีเจอร์นี้ทำงานได้ค่อนข้างดี แต่ใน feature request ที่เกี่ยวข้องบน GitHub ของ HandBrake มี maintainer คนหนึ่งบอกว่าในทางปฏิบัติทำได้ยาก

    • นี่เป็นฟีเจอร์ที่ encoder พื้นฐานทั้งหมดมีให้ตามตัวอยู่แล้ว แม้แต่ filter chain แปลก ๆ ของ ffmpeg/vapoursynth ก็ทำได้
      เลยนึกไม่ออกว่าทำไมถึงบอกว่าทำไม่ได้
      ถ้าเป็น Windows ผมคงแนะนำ Staxrip ไปเลย: https://github.com/staxrip/staxrip
      มีแอปฝั่ง Linux ที่ใช้ vapoursynth ด้วย แต่จำชื่อไม่ได้
      หรืออาจเป็นหนึ่งใน GUI ของ AV1an ก็ได้ เครื่องมือพวกนี้ทั้งหมดรองรับขนาดไฟล์เป้าหมายพร้อมกับมีฟีเจอร์มากกว่า HandBrake มาก
  • ทำไมจนถึงตอนนี้ยังไม่มีฟีเจอร์ง่าย ๆ อย่าง “จำกัดวิดีโอ X ให้มีขนาดไฟล์ Y” อีกนะ?
    ผมแค่อยากได้ ไฟล์วิดีโอ 5GB เท่านั้น แต่ HandBrake ดูเหมือนจะคิดว่าผมสนใจหนึ่งใน preset ของ Vimeo 50 แบบที่ผมก็แทบไม่รู้จัก

    • ไม่เข้าใจว่าทำไมถึงต้องการ ขีดจำกัด 5GB พอดี มีแฟลชไดรฟ์ USB 5GB อยู่เต็มลิ้นชักให้ใส่ไฟล์เหรอ?
      5GB ใหญ่กว่า CD แน่นอน และถ้าไม่ได้ตั้งใจจะใส่ลง Blu-ray ให้ได้พอดี 10 ไฟล์ มันก็เล็กเกินไปสำหรับ Blu-ray
      กรณีใช้งานของคุณดูแปลกสำหรับคนทั้งโลกพอ ๆ กับที่ preset ของ Vimeo ดูแปลกสำหรับคุณนั่นแหละ
  • ยกเว้นตอนจัดการวิดีโอ HDR ผมมักชอบใช้ ffmpeg มากกว่า HandBrake เสมอ
    ยังหาคำสั่ง ffmpeg ที่เหมาะสมสำหรับคัดลอก เมทาดาทา HDR จากไฟล์ต้นทางไปยังไฟล์เอาต์พุตไม่เจอ
    ครั้งล่าสุดที่ตรวจสอบคือทำไม่ได้ และต้องใช้เครื่องมืออย่าง MediaInfo ดึงเมทาดาทาออกมาด้วยตนเอง แล้วส่งค่าแต่ละค่าเป็นอาร์กิวเมนต์ให้ ffmpeg
    มีใครรู้ไหมว่าตอนนี้ยังเป็นแบบนั้นอยู่หรือเปล่า?

    • เคยลองใช้ -movflags กับ use_metadata_tags หรือยัง?
      ffmpeg -i $input_file -movflags use_metadata_tags -crf 22 $output_file
      ที่มา: https://video.stackexchange.com/a/26076
    • ใช่ ดูเหมือนว่ายังต้องดึงเมทาดาทาออกมาเองแล้วใส่ด้วยตนเองอยู่
      อธิบายเพิ่มอีกนิด มาตรฐานวิดีโอ HDR ที่พบบ่อยมีสองแบบคือ Dolby Vision และ HDR10 ทั้งคู่ต้องการการรองรับแยกต่างหากภายในตัวเข้ารหัส และเรื่องนี้ใกล้เคียงกับปัญหาฝั่ง libx265 มากกว่า libavformat/ffmpeg
      โชคดีที่ถ้าวิดีโอต้นฉบับเป็น HDR10 ก็สามารถดึงฟังก์ชันทรานส์เฟอร์และโทนแมปปิงที่ไม่เปลี่ยนแปลงแบบ global ออกมา แล้วนำไปใช้กับเมทาดาทาเอาต์พุตได้โดยตรง FFmpeg สามารถส่งค่าเหล่านี้ให้ตัวเข้ารหัสได้ แต่โดยค่าเริ่มต้นจะไม่คัดลอกจากต้นทางไปยังปลายทาง
      มีบทความอธิบายวิธีไว้ที่ https://codecalamity.com/encoding-uhd-4k-hdr10-videos-with-f...
      ผมเคยลองเข้ารหัสวิดีโอที่เข้ารหัสเป็น HDR10 ใหม่เป็นรูปแบบอื่นโดยคงเมทาดาทาไว้ และคำสั่งสุดท้ายที่เหลืออยู่ใน shell history ประมาณว่า ffmpeg -i Movie-with-HDR.mkv -c:v libx265 -map_metadata:s:0 0:s:0 -map_metadata:g:0 0 -x265-params crf=21:master-display="G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,50)":max-cll=1000,240 Movie-output.mkv
      ตรงนี้การตั้งค่า master-display และ max-cll คือฟังก์ชันทรานส์เฟอร์สีที่ต้องดึงจากวิดีโอแรกด้วยเครื่องมืออื่น การตั้งค่าเหล่านี้มีอยู่ในเอกสารพารามิเตอร์ของ libx265 ที่ https://x265.readthedocs.io/en/master/cli.html
      Dolby Vision ยากกว่า เมทาดาทาเป็นแบบไดนามิก จึงไม่แน่ใจว่าจะดึงจากต้นทางได้อย่างไร แต่สามารถป้อนให้ libx265 ผ่านอาร์กิวเมนต์บรรทัดคำสั่งได้ น่าเสียดายที่เปิดให้ใช้เฉพาะผ่านบรรทัดคำสั่งเท่านั้น ไม่มีใน API ดังนั้น ffmpeg จึงยังจัดการแทนให้ไม่ได้
      เอกสารอ้างอิงที่เกี่ยวข้องเกี่ยวกับขั้นตอนการดึงฟังก์ชันทรานส์เฟอร์แล้วส่งให้ ffmpeg มีที่ https://medium.com/@yllanos/how-to-encode-a-4k-hdr-movie-usi... และ https://codecalamity.com/encoding-uhd-4k-hdr10-videos-with-f... ส่วนบทความที่หลายคนสรุปงานแบบเดียวกันไว้มีที่ https://www.reddit.com/r/ffmpeg/comments/g3uucr/how_do_i_enc...
      สำหรับการแปลงจาก Dolby Vision เป็น HDR10 รวมถึงเรื่อง HLG และ PQ ดูได้ที่ https://www.reddit.com/r/ffmpeg/comments/nkxbay/how_to_conve... และรายละเอียดปลีกย่อยของ Dolby Vision อยู่ที่ https://www.reddit.com/r/ffmpeg/comments/a32yv4/deleted_by_u...
  • ตัวหน้า release เองน่าจะเป็นลิงก์ที่ดีกว่า
    เพราะมี บันทึกการเปลี่ยนแปลง ที่คนส่วนใหญ่น่าจะอยากดู
    https://github.com/HandBrake/HandBrake/releases/tag/1.7.0