Проще говоря, нет. Файлы 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
. Они создают частичные клипы до заранее определенной длины, что означает, что вы можете начать предварительный просмотр существующих сегментов. Затем вы можете позже объединить сегменты обратно в один файл с потоковым копированием.