ฉันมีไฟล์ ogg vorbis สองไฟล์ทั้งหมดถูกเข้ารหัสด้วยคุณสมบัติเดียวกันที่ฉันต้องการต่อกันเป็นไฟล์เดียว
ฉันรู้ว่ารูปแบบ ogg vorbis รองรับการต่อข้อมูลไฟล์หลายไฟล์เช่น:
$ cat file1.ogg file2.ogg > output.ogg
แต่น่าเสียดายที่ผู้เล่นทุกคนไม่สามารถเข้าใจไฟล์ที่สร้างขึ้นเช่นนั้นตัวอย่างเช่นเครื่องเล่นเสียงมือถือของฉันและฉันหลีกเลี่ยงที่จะซื้อใหม่ โปรแกรมอื่น ๆ ที่ไม่เข้าใจว่าเป็น gstreamer วิธีการนั้นจะไม่ทำงานหากไฟล์ ogg อินพุตเกิดขึ้นกับทุกคนมีสตรีม id เดียวกัน
นอกจากนี้เนื่องจากฉันต้องการทิ้งไฟล์ต้นฉบับและเก็บรุ่นที่ต่อกันเท่านั้นฉันจึงต้องการให้การเรียงต่อกันนั้นไม่สูญเสียเช่นเดียวกับcat
วิธีแก้ปัญหา
ฉันยังต้องการหลีกเลี่ยงการต่อไฟล์เป็นฟอร์แมทแบบ lossless เช่น flac เพราะจะทำให้ขนาดของไฟล์ไม่ใหญ่ขึ้น หากเป็นเช่นนั้นฉันก็สามารถเก็บไฟล์ ogg ดั้งเดิมไว้และใช้พื้นที่น้อยลงได้
ดูเหมือนว่า ffmpeg บางครั้งสามารถทำได้โดยใช้concat demuxer :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
ถ้าฉันดูเลขฐานสิบหกแบบดิบของไฟล์อินพุตของฉันดังนั้นฉันสามารถค้นหาแพ็กเก็ต vorbis ที่แสดงในไฟล์เอาต์พุตได้อย่างถูกต้อง ดังนั้นฉันเดาจริงๆไม่มีการเข้ารหัสเกิดขึ้นอีก
แต่นี่ดูเหมือนจะไม่สามารถใช้งานได้กับไฟล์อินพุตทั้งหมด บางครั้ง (ไม่แน่ใจว่าสิ่งใดทำให้เกิดสิ่งนี้) ffmpeg จะแจ้งเตือน:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
แล้วฉันจะได้ยิน "ช่องว่าง" จาง ๆ ระหว่างไฟล์สองไฟล์ ดังนั้นนี่ไม่ใช่ทางออกระดับโลกอย่างแน่นอน
เนื่องจากฉันหาไม่เจอฉันจึงพยายามเขียนเครื่องมือของตัวเองในคำถาม stackoverflowนี้
มีวิธีการเชื่อมไฟล์ ogg vorbis หลายไฟล์ แต่ไม่มีการเข้ารหัสใหม่และมีเพียงสตรีมเดียวต่อเอาต์พุตหรือไม่ เครื่องมือใดที่สามารถทำงานได้?