Можно ли обрезать видеоданные, не повреждая формат видео? - PullRequest
0 голосов
/ 25 марта 2020

Допустим, у меня есть немного более длинное видео, например, размером 50 МБ и продолжительностью около 2 минут, например, и я хочу минимизировать его вес, чтобы выполнить некоторый анализ метаданных с помощью кода на стороне сервера перед его загрузкой на сервер (я используя nodejs для этого).

Мне нужно сделать это, потому что браузеры решили, что они не будут отображать утилитную информацию загруженного файла с чистым javascript.

I Это означает, что некоторая информация, такая как type , работает только в том случае, если файл имеет свое заданное расширение c в конце своего имени, в противном случае будет отображаться только пустая строка, которая является глупой, и по соображениям безопасности путь к файлу файл всегда пуст.

И я хочу использовать:

FileReader.readAsDataUrl(file);

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

Но здесь есть две основные проблемы:

  • Метод FileReader.readAsDataUrl () работает нормально, только если у файла есть расширение в конце файл, в противном случае данные, закодированные в base64, представляют собой строку в кодировке base64, но его data: value application/octet-stream, что является крайне небезопасным форматом, разрешающим в php да, я анализирую с помощью узла перед передачей полные данные в php (если файл проходит тест разрешенного формата), поэтому nodejs в этом случае принимает только роль анализатора.

  • Я не хочу загружать весь файл, который будет проанализирован в узле, это неэффективно и медленно, я хочу загрузить, например, если это видео, первую секунду видео, и, если возможно, только 0,01 секунды видео, которое я не знаю, если это возможно. А затем загрузите его в указанную c отдельную папку nodejs, которая будет выполнять анализ и получать ответ, содержащий тип файла myme.

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

Сначала я попытался с помощью метода среза загруженного файла:

File.slice(0, 50000);

Но это тестовая ошибка, чтобы знать, что файлу нужны первые 50000 байт, чтобы не быть поврежденным, и его можно воспроизвести, если я буду использовать позже URL.createObjectURL(slicedFile) и открою URL результата, в моем случае, если я поставлю первые 50000 байт информации воспроизводит только первую секунду, что является желаемым поведением (видео правильно обрезано).

  • Можно определить, каков минимальный объем байтов для обрезки первого второго видео, не повреждая его?
  • Если это невозможно с помощью некоторых из перечисленных методов ... у кого-нибудь есть идея сделать это?
  • Аудиофайлы - это причина для анализа, где находятся его метаданные, если я печатаю FileReader.readAsText (); в некоторых файлах его метаданные явно указаны в двоичных данных в начале файла, но иногда это не так ... что мне делать?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...