Làm cho tệp MKV phù hợp để phát trực tuyến với ffmpeg (hoặc avconv) - làm thế nào để di chuyển tất cả siêu dữ liệu sang đầu tệp?


1

Câu hỏi của tôi, tôi nghĩ, khá đơn giản ...

Đôi khi tôi muốn tải xuống các tệp MKV lớn từ máy chủ web của tôi và phát lại chúng trong khi chúng đang tải xuống. Tuy nhiên, nếu tôi làm điều này trên các tệp MKV tôi đã chuyển mã, thường thì tệp sẽ hiển thị rằng nó ngắn hơn nhiều so với thực tế và sau khi kết thúc, nó sẽ tiếp tục phát và hiển thị thời gian không chính xác ... ví dụ: nó sẽ hiển thị 2: 50/2: 50 nhưng vẫn tiếp tục phát, tuy nhiên nếu tôi cố gắng tìm ngược bằng các phím mũi tên thì trình phát sẽ bị hỏng hoặc bỏ qua lại từ đầu tệp.

Vì vậy, làm thế nào tôi có thể di chuyển tất cả siêu dữ liệu vào đầu tệp trong khi mã hóa để người chơi sẽ biết tệp đó dài bao nhiêu mà không có toàn bộ? Bạn có thể làm điều này với mp4định dạng bằng cách sử dụng-movflags faststart , nhưng làm thế nào để làm điều đó mkv?

Tôi xin lỗi nếu điều này đã được hỏi và trả lời ở nơi khác, tôi không thể nghĩ ra những từ khóa tốt hơn tôi đã sử dụng và những từ khóa tôi sử dụng không tạo ra kết quả.

Câu trả lời:


3

Nền tảng Matroska cung cấp một công cụ, mkclean , thực hiện một nhiệm vụ tương tự như những gì qt-faststart làm cho MOV / MP4s.

Cú pháp:

mkclean in.mkv out.mkv

Điều này sẽ tái tạo các chỉ số tín hiệu. Để giữ các tín hiệu ban đầu,

mkclean --keep-cues in.mkv out.mkv

FFmpeg cũng có thể làm điều này , với một số phỏng đoán, về phía người dùng.

ffmpeg -i in.mkv -c copy -reserve_index_space 50k out.mkv 

trong đó reserve_index_spacegiá trị tính bằng byte là kích thước cần thiết cho chỉ mục. 50kbyte là kích thước được đề xuất cho 1 giờ phương tiện truyền thông.


Cảm ơn rất nhiều! Trước khi tôi chấp nhận - những lợi ích / hạn chế của việc giữ tín hiệu so với không là gì? Đây có phải là một trong những điều mà nếu tôi phải hỏi tôi sẽ không chú ý? :)
Fredrick Brennan

1
Đó sẽ là câu trả lời của tôi. Nó sẽ làm cho các tín hiệu để spec nếu tái tạo chúng.
Gyan

OK, tôi hiểu, lý do điều này xảy ra là vì các tín hiệu được viết ở cuối, và tôi cần chúng ở phía trước; mkcleansẽ di chuyển các tín hiệu. Không có --keep-cuesnó sẽ tạo lại các tín hiệu, và với nó, nó sẽ bảo toàn các tín hiệu hiện tại được tạo bởi ffmpeg ... nhưng vì Cues không phải là Chương ... không có nhiều khác biệt, nhưng có lẽ việc giữ các tín hiệu mất ít thời gian truy cập CPU và ổ đĩa hơn tái sinh chúng. Cảm ơn sự giúp đỡ của bạn một lần nữa: D
Fredrick Brennan
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.