mất kết nối các tập tin ogg vorbis


12

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ư catgiả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 đó?



@JoshRumbut có và nó bị chứa các khoảng trống có thể nghe được, nơi các tệp được nối cho một số đầu vào
josch 7/07/2015

Bạn có thể thử sử dụng PiTiVi và đặt các clip liên tục trên dòng thời gian.
harrymc

1
OP (và tôi cũng vậy) muốn một giải pháp lập trình không liên quan đến tương tác của người dùng sau khi thu thập các tệp cần thiết.
Villermen

2
@ RalphRönnquist Sox mã hóa lại đầu vào.
josch

Câu trả lời:


2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggtạo một tệp ogg được nối trên hệ thống của tôi, chỉ nhỏ hơn một chút so với các tệp riêng biệt được kết hợp (có thể là do siêu dữ liệu được chia sẻ). Nghe có vẻ giống với tôi, vì vậy sự kết hợp nên không mất mát. Tuy nhiên, điều này không thêm một khoảng cách nhỏ giữa các tệp.

ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg được cho là hoạt động nhưng nó gây ra lỗi này trên ffmpeg Homebrew (macOS) của tôi kể từ ngày 3.3.2.

[concat @ 0x7f91e8800400] Line 1: unknown keyword 'OggS'
ogg1.ogg: Invalid data found when processing input

Nguồn: https://trac.ffmpeg.org/wiki/Concatenate


Tôi đang nhận được cùng một lỗi
Housemd

0

Bạn có thể muốn xem FFmpeg . Nó có rất nhiều công cụ mà tôi không hiểu lắm, nhưng tôi nhớ từ tài liệu rằng có một công cụ để thực hiện chính xác điều này. Mặt khác, tôi nghĩ rằng bạn có thể sử dụng Dòng lệnh của VLC Media Player .


1
Bạn có thể mở rộng câu trả lời của bạn một chút? Chỉ trỏ đến một sản phẩm và tài liệu của nó không thực sự giải thích cách thực hiện giải pháp. Tốt hơn là bao gồm một số hướng dẫn ở đây về cách sử dụng sản phẩm để giải quyết vấn đề. Hướng dẫn tốt về giới thiệu phần mềm tại đây: meta.superuser.com/questions/5329/ ,. Cảm ơn.
fixer1234

Chỉ sử dụng ffmpeg -f concat -i inputs.txt -c copy out.oggkhông hoạt động. Tôi tò mò làm thế nào bạn nghĩ rằng điều này có thể được giải quyết với ffmpeg.
josch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.