ดึงเสียงจากวิดีโอด้วย Python

การดึงเสียงออกจากไฟล์วิดีโอสามารถทำได้โดยใช้ FFmpeg และในบทความนี้จะกล่าวถึงวิธีการที่เราจะสามารถดึงเสียงออกมาจากวิดีโอได้โดยที่รับข้อมูลเข้าเป็น URL ของไฟล์วิดีโอและเก็บข้อมูลเสียงใส่ในตัวแปร หรือก็คือทุกอย่างจะเป็น In-Memory ไม่มีการบันทึกไฟล์วิดีโอหรือไฟล์เสียงใด ๆ ลงบนเครื่อง ซึ่งคาดว่าจะช่วยให้การทำระบบอย่าง API ต่าง ๆ ทำได้สะดวกมากยิ่งขึ้น
กระบวนการหลัก ๆ จะเป็นดังรูปด้านบนนี้รับข้อมูลวิดีโอเข้ามาจากนั้นส่งให้กับ FFmpeg ซึ่งสามารถอ่านได้ทั้งไฟล์, สตรีมมิ่ง, และมีเดียรูปแบบอื่น ๆ อีกมากมาย แล้วจึงทำการแยกข้อมูลรูปภาพกับเสียงออกจากกันและจัดเก็บข้อมูลเสียงไว้ใน Pipe เพื่อส่งไปประมวลผลต่อในระบบ
ขั้นตอนการดึงเสียงออกจากวิดีโอ

ติดตั้ง ffmpeg-python สำหรับใช้งาน ffmepg ผ่าน Python (จะได้ไม่ต้องเรียกผ่าน Command Line)

ส่ง URL ของไฟล์วิดีโอเข้า FFmpeg โดยรับข้อมูลเข้าเป็น URL ของไฟล์ .mp4 และส่ง Output เข้าสู่ Pipe โดยมีรูปแบบเป็น WAVFORM (และดึงเฉพาะส่วนข้อมูลเสียง)

ข้อมูลเสียงที่อยู่ใน Pipe จะเป็น Bytes หรืออาจ Bytes-like objects จึงนำมาผ่าน BytesIO เพื่อให้แน่ใจว่าข้อมูลจะเป็น Bytes จากนั้นส่งข้อมูลเข้าสู่ torchaudio เพื่ออ่านค่าออกมาเป็น Wave และ Sample Rate และในกรณีที่เราต้องการเปลี่ยน Sample Rate ก็สามารถผ่านฟังก์ชันเพื่อจัดการค่าได้ตามปกติ สุดท้ายนี้ก็จะได้ข้อมูลเสียงออกมาตามต้องการ
ขอขอบคุณคลิปต้นทาง https://youtu.be/DieDbDmNXE4
ไฟล์เสียงที่ถอดได้จากคลิปวิดิโอข้างต้น