1

Допустим, я запускаю работу FFmpeg, которая занимает часы и часы:

$ ffmpeg -i large.mp4 out.mp4

Можно ли как-нибудь просмотреть готовую часть out.mp4, пока остальная часть еще не закодирована?

Попытка этого жалуется "moov атом не найден". Если я хочу поразмышлять, почему, это произошло бы потому, что для воспроизведения требуется, чтобы обновленная и правильная информация заголовка присутствовала в начале файла, а FFmpeg не пытается делать это при кодировании файлов; он ждет, пока он полностью не закончится.

1 ответ1

2

Проще говоря, нет. Файлы MP4 нельзя просмотреть, пока они не закончили кодирование. Как вы правильно определили, чтобы начать воспроизведение, игроку необходимо проанализировать атом moov , который содержит важную информацию о том, что должно быть воспроизведено. Для описания, вы можете взглянуть на спецификацию формата файлов QuickTime , которая стала основой для MPEG-4 Part 14, или кратко, формата MP4.

Этот атом может быть записан только после полного кодирования дорожек мультимедиа. Дело не в том, что ffmpeg «не удосуживается» написать его - нужно просто подождать, пока все данные будут там, чтобы получить всю необходимую информацию.

Затем атом записывается в конце контейнера. Для более быстрого воспроизведения вы можете переместить этот атом в начало файла (например, с помощью qt-faststart или с помощью опции ffmpeg -movflags +faststart). Это, конечно, также можно сделать только после завершения кодирования.

Тем не менее, фрагментированные MP4 могут быть просмотрены до определенного момента, как предлагает Джан, добавив следующую опцию:

-movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov

То, что вы также можете сделать, это переключиться на сегментированный метод кодирования, например, используя мультиплексор segment. Они создают частичные клипы до заранее определенной длины, что означает, что вы можете начать предварительный просмотр существующих сегментов. Затем вы можете позже объединить сегменты обратно в один файл с потоковым копированием.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .