Intereting Posts
Разница между параметрами командной строки «-» и «-» с префиксом? Команда Mac Terminal – поиск строки и печать с помощью окружения ipset v4.5: Неизвестный тип набора Вход ssh из текстового файла Что такое дисплей и экран в отношении: 0.0? Wi-Fi подключен, но нет пинга (сужается до интерфейса Ethernet, каким-то образом мешающего функциям Wifi) процесс убийства bash по вызову Когда оболочка запускает встроенную систему, а сигнал генерируется клавиатурой, что будет обрабатывать сигнал? Системная символьная ссылка создание и отправка самозаверяющего открытого ключа с использованием GnuPG в CentOS 7 Как извлечь информацию, разделенную символом из столбца? Предложения для IRC-сервера Что я сделал с моим / домашним / пользовательским каталогом? Почему не ставится elinks в фоновом режиме, а затем возобновляется с `fg` работать надежно? Что такое двоичный пакет? Как их построить?

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

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

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

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

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'. В противном случае он использует только один ядро ​​/ поток и работает медленнее.