

เวลาโปรแกรมปลายทางไม่รับไฟล์วิดีโอ เราอาจเริ่มจากหาวิธีแปลงนามสกุล เช่น จาก MP4 ไป MKV แต่ชื่อท้ายไฟล์ยังไม่ได้ตอบว่าข้างในใช้ codec อะไรและมีข้อมูลประกอบอะไรอยู่บ้าง
การแปลงบางงานเพียงย้าย stream ที่เข้ารหัสแล้วไปใส่ container ใหม่ ส่วนอีกงานต้องถอดภาพหรือเสียงออกมาเปลี่ยนแล้วเข้ารหัสใหม่ หากไม่แยกสองแบบ อาจเสียเวลาประมวลผลหรือสูญเสียข้อมูลที่ไม่จำเป็นต้องเปลี่ยนตั้งแต่ต้น
ควรเริ่มจากถามว่าปลายทางไม่รองรับส่วนใดครับ แล้วค่อยเลือกวิธีพร้อมตรวจว่าทั้งภาพ เสียง คำบรรยายและข้อมูลที่ตั้งใจเก็บยังอยู่ครบตามงาน
Container ทำหน้าที่เก็บ stream กับข้อมูลที่ช่วยเล่นร่วมกัน เช่น เวลา metadata และโครงสร้างที่รูปแบบรองรับ ส่วน codec เป็นวิธีแทนข้อมูลภาพหรือเสียงใน stream นั้น ไฟล์นามสกุลเดียวกันจึงไม่ได้รับรองว่าจะใช้ codec ชุดเดียวกันทั้งหมด
โปรแกรมที่รองรับ MP4 อาจยังไม่รองรับ video codec หรือ audio codec บางแบบภายในไฟล์ และข้อกำหนดอุปกรณ์อาจมีเรื่อง profile pixel format หรือคุณสมบัติอื่นเพิ่ม ไม่ควรสรุปว่ารองรับจากนามสกุลเพียงชั้นเดียว
การเปลี่ยนชื่อไฟล์จาก .mp4 เป็น .mkv ไม่ได้สร้างโครงสร้าง container ใหม่ เช่นเดียวกับเปลี่ยนป้ายกล่องโดยไม่จัดของข้างใน โปรแกรมอาจตรวจจากเนื้อไฟล์จนยังเปิดได้บางกรณี แต่ไม่ใช่วิธีแปลงที่มีผลตามสัญญารูปแบบ
ควรเก็บรายละเอียดต้นทางก่อน เช่น stream index ชนิด codec ภาษาและบทบาทของ track ตามข้อมูลที่มี เพื่อให้เลือกเปลี่ยนเฉพาะส่วนที่ตอบปัญหา ไม่เริ่มจากคำสั่งแปลงทุกอย่างเป็นค่าตั้งต้นของเครื่องมือโดยไม่รู้ว่าจะหายอะไรไปบ้าง

ในเส้นทาง streamcopy ของ FFmpeg โปรแกรมคัด packet ของ stream ที่เลือกโดยไม่ผ่านการ decode filter และ encode ภาพหรือเสียงใหม่ จึงใช้กับงานเปลี่ยน container หรือการจัดชุด stream ที่เหมาะสมได้
เมื่อไม่มีการเข้ารหัสแบบสูญเสียข้อมูลอีกรอบ ก็ไม่เกิดการลดคุณภาพจากการบีบอัดภาพหรือเสียงรอบใหม่นั้น แต่ยังต้องตรวจว่า container ปลายทางรับข้อมูลและโครงสร้างที่เกี่ยวข้องได้ ไม่ใช่วิธีสั่งให้ทุก codec ใช้ได้กับทุก container
ไฟล์ผลอาจมี checksum และขนาดต่างจากต้นฉบับได้เพราะโครงสร้างการจัดเก็บเปลี่ยน การคง encoded media ไม่ได้หมายความว่า byte ทั้งไฟล์ต้องเหมือนเดิม การตรวจความเท่ากันจึงต้องเลือกชั้นที่ตั้งใจรักษาให้ถูก
อีกด้านหนึ่ง streamcopy ไม่ใช่การซ่อมข้อมูลภาพที่เสียหรือสร้างรายละเอียดที่ขาด หาก packet ต้นทางมีปัญหา การย้ายใส่ container ใหม่อาจไม่ได้แก้สาเหตุ ควรอ่าน error และตรวจการเล่นในช่วงที่เกี่ยวข้อง แทนการถือว่าไฟล์ผลถูกสร้างแล้วแปลว่าข้อมูลทุกช่วงสมบูรณ์
หากต้องปรับขนาดภาพ ใส่ข้อความลงในพิกเซล เปลี่ยน codec หรือใช้ filter ที่ทำงานกับภาพที่ decode แล้ว ก็ต้องมีเส้นทางประมวลผลที่ต่างจาก streamcopy การเลือก -c copy จึงไม่ใช่วิธีทำให้ filter เหล่านั้นเกิดขึ้นโดยไม่ encode
แต่ละ stream เลือกวิธีได้ต่างกันตามงาน เช่น video อาจต้องเข้ารหัสใหม่ ขณะที่ audio ที่ปลายทางรับอยู่แล้วอาจคัดต่อได้ ไม่จำเป็นต้อง transcode ทั้งไฟล์เพียงเพราะมีส่วนหนึ่งต้องเปลี่ยน
การเข้ารหัสใหม่มีตัวเลือกคุณภาพและ compatibility ที่ต้องเลือกจากปลายทาง โดยไม่ควรอ้างว่าค่าหนึ่งดีที่สุดกับทุกไฟล์หรือรับรองผลลัพธ์ก่อนตรวจ การเพิ่ม bitrate ก็ไม่ได้กู้รายละเอียดที่ต้นฉบับสูญเสียไปแล้วเอง
ต้องดูด้วยว่า filter กับการแปลงมีผลต่อเวลา สี orientation หรือ channel layout อย่างไร การเปลี่ยน codec สำเร็จเป็นเพียงหนึ่งเงื่อนไขของไฟล์ที่พร้อมใช้ ไม่แทนการตรวจคุณสมบัติที่ผลิตภัณฑ์อาศัย

ไฟล์หนึ่งอาจมีเสียงหลายภาษา คำบรรยายหลายชุด ภาพปกและ attachment การใช้ค่าเลือก stream อัตโนมัติของเครื่องมือไม่ได้มีความหมายว่าจะนำทุกชิ้นไปปลายทางเสมอ จึงอาจได้ไฟล์ที่เล่นภาพกับเสียงได้แต่ขาดส่วนที่ต้องการเก็บ
FFmpeg มี -map สำหรับกำหนด stream ตามขอบเขตคำสั่ง ตัวอย่างสมมติต่อไปนี้พยายามเลือกทุก stream จาก input และคัดไปยังไฟล์ผลใหม่ โดยยังต้องตรวจว่า MKV กับเครื่องมือรุ่นที่ใช้รองรับ stream เหล่านั้นจริงหรือไม่
ffmpeg -i input.mp4 -map 0 -c copy output.mkv
นี่เป็นรูปแบบอธิบายคำสั่ง ไม่ใช่ผล remux ไฟล์ใดแล้ว หากปลายทางไม่รับบาง stream ต้องตัดสินใจตามความต้องการว่าจะเปลี่ยนรูปแบบ แยกเก็บหรือตัดออกอย่างตั้งใจ ไม่ลบ -map เพื่อให้คำสั่งผ่านแล้วถือว่าไฟล์ผลครบเท่าเดิม
Metadata ระดับ container กับระดับ stream รวมถึงบทบาท default ของ track ก็ต้องตรวจตามรูปแบบปลายทาง การเปิดไฟล์แล้วได้เสียงภาษาหนึ่งไม่ได้รับรองว่าภาษาอื่นหาย และการมีทุก track ก็ยังไม่ได้รับรองว่าค่าเลือกเริ่มเล่นตรงที่ตั้งใจ
ffprobe ใช้ตรวจข้อมูล container และ stream ก่อนหลังเพื่อเทียบรายการที่ตั้งใจรักษาได้ ควรดูทั้งจำนวน ชนิด codec ภาษา duration และข้อมูลสำคัญของงาน พร้อมอ่าน error ที่เครื่องมือรายงาน ไม่ดูเพียงชื่อไฟล์กับขนาดที่ปรากฏในโฟลเดอร์
จากนั้นเปิดกับโปรแกรมหรืออุปกรณ์ปลายทางจริง ตรวจการเริ่มเล่น เลื่อนเวลา สลับเสียงและคำบรรยายตามที่ต้องรองรับ การที่เครื่องมือบนเครื่องพัฒนา decode ได้ไม่ได้รับรองว่าเครื่องปลายทางรองรับทุกคุณสมบัติเหมือนกัน
ควรเริ่มจากสำเนาและเขียนผลเป็นชื่อใหม่ โดยรักษาต้นฉบับกับข้อมูลการแปลงไว้จนตรวจครบ หากเป็นคลังหลายไฟล์ ควรทดลองตัวแทนที่มีคุณสมบัติต่างกันก่อน ไม่เอาผลคลิปเสียงเดียวไปใช้แทนไฟล์หลายภาษาทั้งชุด
เมื่อจบงาน รายงานควรบอกว่ารักษาหรือเปลี่ยน stream ใด มีส่วนใดแยกเก็บ และผ่านการเล่นบนปลายทางใดตามที่ตรวจจริง ไม่ใช้คำว่า lossless กับทั้งประสบการณ์ของไฟล์โดยยังไม่แยกการคัดข้อมูลสื่อออกจาก metadata ที่อาจเปลี่ยนไป
การเปลี่ยน container ไม่จำเป็นต้องเข้ารหัสภาพและเสียงใหม่ทุกครั้ง แต่ต้องเลือก stream กับรูปแบบปลายทางให้ตรง การแยก remux จาก transcode ช่วยลดการเปลี่ยนที่ไม่จำเป็น พร้อมทำให้ตรวจได้ว่าข้อมูลส่วนใดคงอยู่และส่วนใดถูกแปลง เมื่อเทียบรายการก่อนหลังกับการเล่นจริง เราจะได้ไฟล์ที่ตอบงานมากกว่าการเปลี่ยนนามสกุลให้คำสั่งจบสำเร็จ