Tôi có một vài tệp ogg vorbis, tất cả được mã hóa với các thuộc tính chính xác giống nhau mà tôi muốn ghép thành một tệp duy nhất.
Tôi biết rằng định dạng ogg vorbis hỗ trợ ghép đơn giản nhiều tệp như:
$ cat file1.ogg file2.ogg > output.ogg
Nhưng thật đáng buồn, không phải tất cả người chơi đều có thể hiểu các tệp được tạo như vậy, ví dụ như trình phát âm thanh trên thiết bị di động của tôi và tôi sẽ tránh mua một cái mới. Các chương trình khác không hiểu nó là trình phát. Phương pháp đó cũng không hoạt động nếu tất cả các tệp ogg đầu vào xảy ra với cùng một id luồng.
Ngoài ra, vì tôi muốn loại bỏ các tệp gốc và chỉ giữ phiên bản được nối, tôi muốn việc ghép được thực hiện một cách dễ dàng, giống như cat
giải pháp.
Tôi cũng muốn tránh ghép các tệp thành một định dạng lossless như flac vì điều này sẽ làm nổ tung kích thước tệp một cách không cần thiết. Nếu điều đó ổn, thì tôi có thể giữ các tệp ogg gốc và sẽ sử dụng ít dung lượng hơn.
Có vẻ như đôi khi ffmpeg có thể làm điều đó bằng cách sử dụng trình giải mã concat :
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
Nếu tôi nhìn vào hexdump thô của các tệp đầu vào của mình, thì tôi có thể tìm thấy các gói vorbis được thể hiện chính xác trong tệp đầu ra. Vì vậy, tôi đoán thực sự không có mã hóa lại xảy ra.
Nhưng điều này dường như không hoạt động trên tất cả các tập tin đầu vào. Đôi khi (không chắc chắn điều gì kích hoạt điều này), ffmpeg sẽ đưa ra cảnh báo:
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.
Và sau đó tôi sẽ nghe thấy một "khoảng cách" rất mờ giữa hai tập tin. Do đó, đây chắc chắn không phải là một giải pháp toàn cầu.
Vì tôi không thể tìm thấy một cái nên tôi đã cố gắng viết công cụ của riêng mình trong câu hỏi stackoverflow này .
Có cách nào để ghép nhiều tệp ogg vorbis nhưng không mã hóa lại chúng và chỉ với một luồng trên mỗi đầu ra không? Công cụ nào có thể làm công việc đó?