โปรแกรมแปลงวิดีโอโอเพนซอร์ส HandBrake 1.7.0
(forum.handbrake.fr)คำแนะนำการอัปเกรด 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 ความคิดเห็น
ความคิดเห็นบน 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 เลยด้อยกว่า แต่ได้ยินมาว่าช่วงนี้โค้ดեկนั้นไม่ได้แย่เหมือนเมื่อก่อนแล้ว
สงสัยเหมือนกันว่าแอปดี ๆ เวอร์ชันปัจจุบันนี้ยังมีหลุมพรางใหญ่ ๆ อยู่ไหม
อย่างไรก็ดี ปัญหาหลักคือขาดคนทำงาน มีฟีเจอร์ที่อยากได้จำนวนมากยังค้างอยู่ใน สวรรค์แห่งฟีเจอร์
ก็คงเหมือนโปรเจกต์โอเพนซอร์สทั้งหมดนั่นแหละ
ช่วงนี้ผมขอคำสั่งเทอร์มินัล
ffmpegจาก ChatGPTเร็วกว่าแอปไหน ๆ มาก และปรับแต่งได้ตามต้องการ
จะบอกว่าการลองผิดลองถูกหรืออ่าน man page นั้น “เร็วกว่ามาก” เมื่อเทียบกับการเลือก preset ใน HandBrake แล้วติ๊ก checkbox หรือเลื่อน slider ก็คงพูดยาก
ffprobeลงไปใน prompt ด้วยถ้าแหล่งที่มาเป็น DVD ก็มีหลายอย่างต้องพิจารณา เช่น ปัญหา aspect ratio, deinterlacing, การจัดการ subtitle เป็นต้น
เดี๋ยวนี้พอจะค้น man page อะไรก็ตาม ก็เริ่มมองหา option แบบ
--helpที่คล้าย--chatgptแล้วรายการฟีเจอร์ดูดี โดยเฉพาะการปรับปรุงประสิทธิภาพบนสถาปัตยกรรม arm64 / aarch64 / Apple Silicon, การถอดรหัส HEVC ที่เร็วขึ้นจาก FFmpeg รุ่นใหม่และฟิลเตอร์ bwdif ที่เร็วขึ้น 30%, การปรับแต่ง assembly ใหม่ของ SVT-AV1 ที่ทำให้ประสิทธิภาพเพิ่มได้สูงสุด 4 เท่า รวมถึงการลบการคัดลอกเฟรมที่ไม่จำเป็นเพื่อเพิ่มประสิทธิภาพหน่วยความจำและปรับปรุงความเร็วในการแปลงวิดีโอ น่าคาดหวังมาก
ข้อติเดียวที่มีต่อ HandBrakeCLI คือไม่สามารถเข้ารหัส อินพุตที่ pipe เข้ามาทาง stdin ได้
FFmpeg รองรับ และคิดว่า HandBrake ก็ใช้ FFmpeg ภายในเหมือนกัน
libavformat,libavcodec,libavfilterซึ่งเป็นส่วนหนึ่งของไลบรารี FFmpegถึงอย่างนั้นก็เป็นแอปที่ต่างกันโดยสิ้นเชิง decoder, demuxer บางส่วน และ filter บางตัวเหมือนกัน แต่วิธีเชื่อมสิ่งเหล่านี้เข้าด้วยกันต่างจากแอป command-line ของ FFmpeg อย่างสิ้นเชิง
หรืออาจใช้เวทมนตร์ Bash แบบ
handbrake-cli -i <(cat video-file.mp4)ได้ก็ได้ไม่ค่อยรู้เหมือนกัน เพราะไม่เคยใช้ HandBrakeCLI ใช้แต่ GUI
แน่นอนว่าในส่วนอื่น ๆ ก็ใช้ไลบรารี FFmpeg อย่างกว้างขวาง
มันเป็นหนึ่งใน transcoder ไม่กี่ตัวที่ไม่ได้เป็นแค่ wrapper ของ FFmpeg ซึ่งเป็นทั้งข้อดีและข้อเสีย
มีใครอธิบายแบบง่าย ๆ ได้ไหมว่าทำไม HandBrake ถึงบอกว่าไม่สามารถทำ option ขนาดไฟล์เป้าหมาย ได้?
ในแอปบีบอัดวิดีโอบน Android ฟีเจอร์นี้ทำงานได้ค่อนข้างดี แต่ใน feature request ที่เกี่ยวข้องบน GitHub ของ HandBrake มี maintainer คนหนึ่งบอกว่าในทางปฏิบัติทำได้ยาก
ffmpeg/vapoursynthก็ทำได้เลยนึกไม่ออกว่าทำไมถึงบอกว่าทำไม่ได้
ถ้าเป็น Windows ผมคงแนะนำ Staxrip ไปเลย: https://github.com/staxrip/staxrip
มีแอปฝั่ง Linux ที่ใช้ vapoursynth ด้วย แต่จำชื่อไม่ได้
หรืออาจเป็นหนึ่งใน GUI ของ AV1an ก็ได้ เครื่องมือพวกนี้ทั้งหมดรองรับขนาดไฟล์เป้าหมายพร้อมกับมีฟีเจอร์มากกว่า HandBrake มาก
ทำไมจนถึงตอนนี้ยังไม่มีฟีเจอร์ง่าย ๆ อย่าง “จำกัดวิดีโอ X ให้มีขนาดไฟล์ Y” อีกนะ?
ผมแค่อยากได้ ไฟล์วิดีโอ 5GB เท่านั้น แต่ HandBrake ดูเหมือนจะคิดว่าผมสนใจหนึ่งใน preset ของ Vimeo 50 แบบที่ผมก็แทบไม่รู้จัก
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.htmlDolby 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