Есть ли недостаток в размещении атома MOOV в начале файла MP4?

Я вижу множество вопросов о перемещении атома moov из конца видеоконтейнера MP4 в начало, чтобы сделать видео «оптимизированным для Интернета» или упростить потоковую передачу. Похоже, что большинству инструментов требуется явная опция для этого при первом кодировании видео, если она вообще доступна.

Если размещение атома в начале улучшает потоковую передачу, а делать это постфактум дорого, зачем мне кодировать видео с атомом в конце? Какая польза?


person Coderer    schedule 27.03.2013    source источник


Ответы (2)


Кодирование MOOV в конце файла обычно является операцией по умолчанию для видеокодировщиков, потому что они, как правило, работают, записывая выходной файл за один проход, а точное содержимое и размер атома MOOV можно узнать только после записи аудио. и видеоданные целиком, потому что они содержат абсолютные размеры файлов.

FFmpeg позволяет вам сделать второй проход и переместить атом в начало с помощью -movflags +faststart.

Наличие атома MOOV в конце не имеет особых преимуществ, просто это не так неудобно в ситуациях локального воспроизведения, когда поиск в конце файла перед воспроизведением не так затратен, как при прогрессивной доставке загрузки.

person SirDarius    schedule 27.03.2013
comment
Просто трудно представить, что если на создание закодированного фильма уйдет 30 минут, или час, или десять, кто-нибудь заметит дополнительные минуты или две, необходимые для записи атома MOOV, а затем копирования остальной части. готовые сегменты данных. Конечно, затраты на ввод-вывод ничтожны по сравнению с вычислениями, необходимыми для кодирования? - person Coderer; 27.03.2013
comment
Я полагаю, это зависит от программного обеспечения для кодирования, но, увы, ffmpeg достаточно универсален, поэтому переписывание файла после факта требует серьезного рефакторинга в текущем положении вещей. Аналогичная проблема возникает с FLV-файлами и метаданными, так что существуют такие программы, как flvtool или flvmeta, необходимые для их правильной вставки после кодирования. Также необходимо понимать, что видеокодеры не всегда записывают данные в доступные для поиска потоки (например, в сетевые потоки), где возврат назад вообще невозможен. - person SirDarius; 27.03.2013
comment
Я знаю, что это оффтоп, но я все равно спрошу; Видеоэлемент Android может воспроизводить только файлы mp4, поэтому, даже если элемент moov находится в конце, он все равно воспроизводит видео через http-поток без каких-либо проблем. Как это возможно? Как Android обрабатывает видео без атома Moov? - person Sagar Pilkhwal; 08.12.2015
comment
@SagarPilkhwal Держу пари, что это достигается с помощью частичных HTTP-запросов. Как только общий размер файла известен, клиент может сделать HTTP-запрос с диапазоном байтов, охватывающим атом MOOV, а затем возобновить загрузку файла с самого начала. - person SirDarius; 08.12.2015
comment
Да, наверное, я нашел эту ссылку, в которой говорится о проблеме, о которой я упоминал fabiensanglard.net/mobile_progressive_playback/index. php - person Sagar Pilkhwal; 08.12.2015

Вы всегда будете хотеть помещать индексную информацию в начало файла, для этого макета нет скрытых затрат, кроме единственного: во время захвата/транскодирования вы не сможете заранее сказать, сколько места вам нужно для этого MOOV. atom в начале, и его данные также еще недостаточно доступны. Таким образом, вы обычно записываете полезную нагрузку непосредственно в файл, а они завершают запись, добавляя MOOV и обновляя остальную часть файла.

person Roman R.    schedule 27.03.2013