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