7

Похоже, что многие сайты, такие как YouTube, предлагают moov atom в начале файла (быстрый запуск).

ffmpeg не делает это поведением по умолчанию, но вы можете указать это с -movflags faststart . Мне интересно, есть ли недостаток всегда использовать этот параметр?

3 ответа3

9

В зависимости от размера вашего ввода, может потребоваться некоторое время, чтобы выполнить второй проход, чтобы переместить атом moov в начало файла.

Без -movflags +faststart

$ time ffmpeg -y -f lavfi -i nullsrc=s=hd720:d=600 -preset ultrafast out.mp4
real    0m42.701s

С -movflags +faststart

$ time ffmpeg -y -f lavfi -i nullsrc=s=hd720:d=600 -movflags +faststart -preset ultrafast out.mp4
real    1m4.036s
  • Вы должны использовать +faststart вместо просто faststart , потому что он будет добавлен к любым флагам по умолчанию / другим / существующим вместо их отмены (но я никогда не проверял это).

  • По общему признанию, использование nullsrc было не лучшим вводом, так как он не мог создать последовательный вывод, но я был нетерпелив и хотел чего-то быстрого, но достаточно динамичного, чтобы обеспечить размер файла (но я не хотел чистого шума). Кроме того, я выполнил только один тест на команду, так что это небольшой размер выборки. Несмотря на это, разница во времени очевидна.

4

Я думаю, что эта тема нуждается в обновлении. На последнем ffmpeg (3.4.1) я получаю:

$ time ffmpeg -y -f lavfi -i nullsrc=s=hd720:d=600 -preset ultrafast out.mp4
real 0m26.578s
$ time ffmpeg -y -f lavfi -i nullsrc=s=hd720:d=600 -movflags +faststart -preset ultrafast out.mp4
real 0m26.849s

Те же результаты. Теперь попробуйте с реальным видео:

$ time ffmpeg -y -i Sintel.2010.1080p.mp4 -preset:v ultrafast out.mp4
real 3m38.829s
$ time ffmpeg -y -i Sintel.2010.1080p.mp4 -preset:v ultrafast -movflags +faststart out.mp4
real 3m43.674s

Разница около 2%, это может быть просто шум. Также необходимо отметить, что фаза «Начало второго прохода: перемещение атома moov в начало файла» заняла не более пары секунд на выходном файле 600 МБ.

1

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

Недостатки наличия атома moov в начале и причина, по которой многие инструменты не делают этого по умолчанию, поэтому все связаны с этим фактом.

Если ни одно из следующих действий не является для вас проблемой, то вы можете поставить Moov на передний план и не иметь никаких недостатков.

  • Второй проход обязателен. Это удваивает объем дискового ввода-вывода, поскольку данные должны быть считаны с ввода, записаны на диск, затем прочитаны с диска и перезаписаны. Это может быть нецелесообразно, когда скорость ввода-вывода очень низкая, например, при записи на сетевой диск.

  • Вывод не может быть передан другой команде / отправлен на стандартный вывод на лету, потому что эти механизмы не могут выполнить второй проход.

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