Как проверить, полностью ли загружено видео?

У меня есть куча видеороликов, которые я хочу проверить, полны они или нет. Некоторые из них могут быть загружены частично, но они не неисправны. Как я могу эффективно проверить, полностью ли загружено это видео?

Если бы у меня были ссылки, я бы проверял их размер, но я этого не делаю.

  • Почему я получаю «слишком много аргументов»,
  • Компиляция ffmpeg с hwaccel
  • ffmpeg зависает при попытке записи видео на более высокие разрешения
  • Совместимость зашифрованных дисковых файловых систем
  • Сбрасывание видео с помощью avconv / ffmpeg
  • Что случилось с моей установкой Arch? Случайный причудливый экран с момента последнего обновления
  • Я пытался использовать ffprobe и mediainfo . ffprobe сообщает о незначительных проблемах с частично загруженными файлами, но также сообщает о похожих проблемах с некоторыми полностью загруженными файлами. Должен ли я использовать ffmpeg для чтения всех файлов и сравнить длину видео, чтобы проверить, загружены ли они? Есть ли лучшее решение?

  • Скрининг GIF; путь UNIX
  • Сохранить вывод -exec в текстовый файл
  • Не ждите аудио потока с помощью ffmpeg / avconv, используя именованные каналы
  • Трубопровод Sox и FFMPEG вместе
  • Удалите тишину из аудиофайлов, оставляя пробелы
  • Игрок или плагин, который может транслировать аудио в субтитры в реальном времени
  • 3 Solutions collect form web for “Как проверить, полностью ли загружено видео?”

    ffmpeg – агностик, способный определять, полностью ли загружен видеофайл. Приведенная ниже команда дает команду ffmpeg читать входное видео и кодировать видео без изменений. Во время процесса кодирования любые ошибки, такие как отсутствующие кадры, выводятся в test.log.

     ffmpeg -v error-i FILENAME.mp4 -f null - 2>test.log 

    Если видеофайл не загружен полностью, в файле test.log будет много строк. Например, .1 МБ, отсутствующий в видеофайле, произвел 71 строку ошибок. Если видео полностью загружено и не было повреждено, ошибок не обнаружено, и в test.log не печатаются строки.


    редактировать

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

    Добавление «-sseof -60» в список аргументов проверяет последние 60 секунд файла, что значительно быстрее.

     ffmpeg -v error -sseof -60 -i FILENAME.mp4 -f null - 2>test.log 

    Вам понадобится более новая версия ffmpeg, 2.8 отсутствует флаг sseof, поэтому я использовал 3.0.

    MediaInfo отображает строку:

     Truncated: Yes 

    если файл не является полным, как ожидалось, спецификациями формата.

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

    Другой (расширенный) тест может быть выполнен, например, при чтении индекса файла .mp4 и проверке того, что размер файла + размер кадра последнего кадра находится в пределах размера файла, который вы получаете, но это не совсем то, что вы ищете для (если в исходном файле есть метаданные, например плакаты, в конце файла, а файл усечен непосредственно перед этим плакатом, частичная загрузка до сих пор не обнаружена в каждом случае). Он не реализован в MediaInfo, но вы можете добавить запрос функции MediaInfo .

    Во всех случаях очень сложно обнаружить все частичные загрузки, поскольку общий размер файла не указан в большинстве форматов видеофайлов, поэтому вы можете быть уверены, что файл усечен, но вы не можете быть уверены, что файл не усечен. Единственный способ убедиться, что вы загрузили полный файл, – это получить размер файла из другого места (и лучше: иметь хэш, например MD5).

    PS: этот вопрос не относится ни к какой операционной системе.

    У меня был файл, где ffmpeg (v3.1.1) с -sseof -60 не показывал никаких предупреждений и просто вышел без указания, что что-то не так. Mediainfo не показывал, что файл был усечен. Только исключение -sseof -60 сообщит о любой ошибке с ffmpeg. Поэтому я вернулся к попытке ffprobe. Это показалось немного быстрее, чем ffmpeg.

     ffprobe -v error -count_frames -i filename.mp4 

    произвел этот результат

     [h264 @ 00000000004e6a60] Invalid NAL unit size. [h264 @ 00000000004e6a60] Error splitting the input into NAL units. [mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004e5280] stream 1, offset 0x1350135: partial file 

    Я еще не встречал никаких ложных срабатываний (как сообщает OP).

    Изменить : ffprobe был на моих тестовых файлах примерно на 10% быстрее, чем ffmpeg, но только если вы поручите ему использовать все ядра с опцией '-threads 0'. В противном случае он использует только один ядро ​​/ поток и работает медленнее.

    Linux и Unix - лучшая ОС в мире.