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

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

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

Я пытался использовать ffprobe и mediainfo . ffprobe сообщает о незначительных проблемах с частично загруженными файлами, но также сообщает о похожих проблемах с некоторыми полностью загруженными файлами. Должен ли я использовать ffmpeg для чтения всех файлов и сравнить длину видео, чтобы проверить, загружены ли они? Есть ли лучшее решение?

  • Как подключить вывод ffmpeg?
  • Кодировать с ffmpeg с помощью avi to mp4
  • Как я могу скомпилировать и установить последнюю версию FFmpeg для Linux?
  • Как получить лучшее качество при конвертации из mp4 в avi с помощью ffmpeg?
  • Преобразовать в WAV, используя FFMPEG для трубы в LAME?
  • использовать ffplay для воспроизведения списка аудиофайлов
  • arm-linux-androideabi-gcc не может создать исполняемый файл в Windows 10
  • Воспроизведение и одновременная запись через внешнюю звуковую карту USB
  • 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'. В противном случае он использует только один ядро ​​/ поток и работает медленнее.

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