Как вырезать метаданные из видеофайла с надежными / воспроизводимыми результатами? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь найти чистый способ получения «просто необработанных данных» из различных медиа-файлов.Под этим я подразумеваю взять файл test.mp4 и убрать из него все метаданные / заголовки, чтобы я мог затем создать хеш фактических видеоданных.

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

Чтобы проверить это, я использовал контейнеры Docker ffmpeg jrottenberg для создания хэшаодного и того же файла в нескольких версиях ffmpeg:

for tag in 4.0-centos 4.0-alpine 3.4-alpine 3.4-centos 3.0-alpine 3.0-centos; do
    docker pull jrottenberg/ffmpeg:${tag}
    docker run --rm \
      -v /data/:/data/ \
      -it jrottenberg/ffmpeg:${tag} \
      -i /data/test.mp3 \
      -map_metadata -1 -c:v copy -c:a copy \
      -f mp4 - | md5sum
done

В результате у каждого из этих экземпляров был разный хэш-вывод (для ясности вывод Docker урезан):

d7e3577ffe65d73240f48842e8d42207  -
da2bda81911d758c877aace6ed3c0025  -
ed24948c1dedf5d53870dfcfe24c7c70  -
3dbb89d812c26711a33ca670403ccc20  -
a4533446d3225e755eb041167e32b279  -
69a51d82acc9987eed8b517a748435eb  -

Итакмой вопрос: есть ли более надежный способ сделать это?Я только что пропустил опцию для ffmpeg?Я что-то здесь упускаю, или ffpeg просто не хороший инструмент для этой работы?Если не это, то что является хорошим выбором?

1 Ответ

0 голосов
/ 30 мая 2018

Генерация хэша

Используйте хэш-мультиплексор , чтобы вернуть хэш необработанных декодированных данных:

$ ffmpeg -loglevel error -i input.mp3 -f hash -f null -
SHA256=727ef2f1a4317a97ddb9aa83e80b5d876986a92c67045317bffb6505e4de6617

Используйте параметр -map для выбора нужного потока (ов).

Пример для генерации хэша только для первого аудиопотока и вывода хэша MD5:

$ ffmpeg -loglevel error -i input.foo -map 0:a:0 -f hash -hash MD5 -
MD5=616beb5bf16504caf37aacf0d0e99731

Метаданные не влияют на возвращаемый хеш(если вы не рассматриваете метаданные обложки альбома, ваш MP3 содержит их, и ваша команда ffmpeg не исключает их).

Необработанные данные

Запрет простого использования хеша SHA256 вместо этогоЕсть ли способ получить необработанные данные, а не просто их хеш?

Вы можете вывести необработанное видео:

ffmpeg -i input -f rawvideo output

Или передать это:

ffmpeg -i input -f rawvideo -

И видео, и аудио в отдельных выходных файлах outvideo и outaudio:

ffmpeg -i input -map 0:v:0 -f rawvideo outvideo -map 0:a:0 -f s16le outaudio
...