Сделать файл MKV пригодным для потоковой передачи с помощью ffmpeg (или avconv) - как переместить все метаданные в начало файла?

1517
Fredrick Brennan

Мой вопрос, я думаю, довольно прост ...

Иногда мне нравится скачивать большие файлы MKV с моего веб-сервера и воспроизводить их во время загрузки. Однако, если я сделаю это для файлов MKV, которые я транскодировал, часто файл будет показывать, что он намного короче, чем есть на самом деле, и после того, как он дойдет до конца, он просто продолжит воспроизведение и покажет неверное время ... например он будет отображать 2: 50/2: 50, но продолжит играть, однако, если я попытаюсь вернуться назад с помощью клавиш со стрелками, проигрыватель либо вылетит, либо пропустит назад к началу файла.

Итак, как я могу переместить все метаданные в начало файла во время кодирования, чтобы проигрыватель знал, как долго этот файл не имеет всего этого? Вы можете сделать это с помощью mp4формата-movflags faststart, но как это сделать mkv?

Извините, если об этом уже спрашивали и отвечали в другом месте, я не мог придумать лучшие ключевые слова, чем те, которые я использовал, и те, которые я использовал, не дали результатов.

1

1 ответ на вопрос

3
Gyan

Фонд Matroska предлагает инструмент mkclean, который выполняет задачу, аналогичную той, которую qt-faststart выполняет для MOV / MP4.

Синтаксис:

mkclean in.mkv out.mkv 

Это восстановит индекс сигналов. Чтобы сохранить оригинальные реплики,

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

FFmpeg также может сделать это, с некоторой догадкой, со стороны пользователя.

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

где reserve_index_spaceзначение в байтах - это размер, необходимый для индекса. 50kбайты - это рекомендуемый размер для 1 часа медиа.

Большое спасибо! Прежде чем я приму - каковы преимущества / недостатки сохранения сигналов по сравнению с нет? Это одна из тех вещей, когда, если мне придется спросить, я не замечу? :) Fredrick Brennan 7 лет назад 0
Это был бы мой ответ. Это сделает рендеринг спекуляций, если их регенерировать. Gyan 7 лет назад 1
Хорошо, я понимаю, причина, по которой это происходит, в том, что все реплики написаны в конце, а они мне нужны спереди; `mkclean` переместит подсказки. Без `--keep-cues` он будет регенерировать сигналы, и с его помощью он сохранит текущие сигналы, сгенерированные ffmpeg ... но поскольку сигналы не являются главами ... не большая разница, но, вероятно, сохранение сигналов требует меньше процессорного времени и доступа к диску, чем их восстановление. Спасибо за вашу помощь еще раз: D Fredrick Brennan 7 лет назад 0

Похожие вопросы