У меня есть куча видео, которые я хочу проверить, завершены они или нет. Некоторые из них могут быть загружены частично, но они не являются неисправными. Как я могу эффективно проверить, полностью ли загружено это видео?
Если бы у меня были ссылки, я бы проверил их размер, но у меня их нет.
Я пытался использовать ffprobe
и mediainfo
. ffprobe
сообщает о незначительных проблемах с частично загруженными файлами, но также сообщает о похожих проблемах с некоторыми из полностью загруженных файлов. Должен ли я использовать ffmpeg
для чтения целых файлов и сравнения длины видео, чтобы проверить, если они загружены? Есть ли лучшее решение?
Ответы:
ffmpeg
является независимым от ОС инструментом, который способен определить, был ли видео файл полностью загружен. Команда ниже дает указаниеffmpeg
прочитать входное видео и закодировать видео в ноль. Во время процесса кодирования любые ошибки, такие как пропущенные кадры, выводятся в test.log.Если видеофайл загружен не полностью, в файле test.log будет много строк. Например, 0,1 МБ, отсутствующие в видеофайле, выдало 71 строку ошибок. Если видео полностью загружено и не было повреждено, ошибок не обнаружено, и в test.log не выводятся строки.
редактировать
В приведенном выше примере я протестировал весь файл, потому что загруженное тестовое видео представляло собой торрент, в котором по всему файлу могут отсутствовать фрагменты.
Добавление
-sseof -60
в список аргументов проверит последние 60 секунд файла, что значительно быстрее.Вам понадобится более новая версия ffmpeg, в 2.8 отсутствовал флаг sseof, поэтому я использовал 3.0.
источник
ffmpeg
? Я имею в виду поиск до 99% без обработки всего видео и проверку, работает ли он без ошибок.-ss
и-sseof
, ffmpeg читает и обрабатывает весь файл. Так что, в любом случае, открытие видео в VLC и нажатие ближе к концу будет быстрее.MediaInfo отображает строку:
если файл не завершен, как ожидалось спецификациями формата.
Поскольку технически нет никакой разницы между ошибочно (не отвечающим спецификациям о границах файла) файлом, слитым и частично загруженным, технически невозможно провести различие между ошибочным файлом и частично загруженным файлом.
Можно провести еще один (расширенный) тест, например, прочитав индекс файла .mp4 и проверив, что смещение файла + размер кадра последнего кадра соответствуют размеру файла, который вы получаете, но это не совсем то, что вы ищете для (если в исходном файле есть метаданные, например, плакаты, в конце файла, и файл усекается непосредственно перед этим плакатом, частичная загрузка все еще не обнаруживается в каждом случае). Он не реализован в MediaInfo, но вы можете добавить запрос функции MediaInfo .
Во всех случаях очень сложно обнаружить все частичные загрузки, поскольку общий размер файла не указан в большинстве форматов видеофайлов, поэтому вы можете быть уверены, что файл урезан, но вы не можете быть уверены, что файл не урезан. Единственный способ убедиться, что вы загрузили полный файл, - это получить размер файла откуда-то еще (и лучше: иметь его хэш, например, MD5).
PS: этот вопрос не является специфическим для любой операционной системы.
источник
-f
(отображение полной информации). Не могли бы вы помочь получитьTruncated
поле?mediainfo * | grep -E "^(IsTruncated|Complete name)"
где имя файла соответствующего файла отображается прямо над строкой «IsTruncated: Yes».У меня был файл, где ffmpeg (v3.1.1) с -sseof -60 не показывал никаких предупреждений и просто выходил без указания, что что-то не так. Mediainfo также не показала, что файл был усечен. Только отсутствие -sseof -60 сообщит о любой ошибке с ffmpeg. Итак, я вернулся к попытке ffprobe. Казалось, немного быстрее, чем ffmpeg.
произвел этот вывод
Я еще не встречал никаких ложных срабатываний (как сообщает ОП).
Изменить : ffprobe был в моих тестовых файлах примерно на 10% быстрее, чем ffmpeg, но только если вы указали ему использовать все ядра с опцией '-threads 0'. В противном случае он использует только одно ядро / поток и работает медленнее.
источник