FFmpeg: как создавать видео MP4 CENC (Common Encryption)
Каков правильный синтаксис для шифрования CENC с помощью ffmpeg?
Примечания к выпуску ffmpeg 3.0 включают "Поддержка кодирования и декодирования MP4 Common Encryption (CENC)", а файлы libavformat/movenccenc.h и libavformat/movenccenc.c, по-видимому, содержат все необходимое для шифрования файлов MP4 в соответствии со стандартом Common Encryption.
Однако я не могу найти никакой документации по этой теме на страницах справочника ffmpeg.
С уважением
2 ответа
Ответ Mulvya покрывал опции ffmpeg.
Я просто добавляю конкретный пример и тоже говорю о воспроизведении, как я вчера провел несколько экспериментов (независимо).
Пример шифрования
ffmpeg -i SampleVideo_1280x720_1mb.mp4 -vcodec copy -acodec copy -encryption_scheme cenc-aes-ctr -encryption_key 76a6c65c5ea762046bd749a2e632ccbb -encryption_kid a7e61c373e219033c21091fa607bf3b8 SampleVideo_1280x720_1mb_encrypted.mp4
(конечно, использование может отличаться для вашего случая; я просто перепутал видео и аудио)
Воспроизведение / декодирование
ffplay SampleVideo_1280x720_1mb_encrypted.mp4 -decryption_key 76a6c65c5ea762046bd749a2e632ccbb
Но так как это более или менее прототип, можно захотеть использовать что-то более мощное.
mpv --demuxer-lavf-o=decryption_key=76a6c65c5ea762046bd749a2e632ccbb SampleVideo_1280x720_1mb_encrypted.mp4
Здесь есть некоторая дискуссия, поскольку моя первая ожидаемая командная строка не работала так, как ожидалось!
Редактировать: пытаясь ответить на вопросы Рейно
encryption_key
всего 128 бит = 16 байтов, закодированных как шестнадцатеричные (после использования AES-128-CTR). Таким образом, random.org с конфигурацией 16 байтов и hex.encoding будет допустимым ключом (но я не рекомендую доверять внешним ресурсам в целом). Я использовал модуль секретов Python, который сводится к: secrets.token_hex(16)
, это encryption_key
понадобится для декодирования.
encryption_kid
Идентификатор ключа - это просто идентификатор этого ключа, который, вероятно, необходим для более сложных шаблонов использования (я думаю, вы могли бы сделать что-то вроде: эй видео... какой из моих 1000 ключей мне нужен для вас?). Я предполагаю, что это обязательно для передачи, но это не требуется для декодирования (если вы знаете, какой ключ использовать для какого видео).
Официальные ссылки будут:
- стандарт
- Реализация ffmpeg: документы (доступны через командную строку) или краткое извлечение
Бег ffmpeg -h muxer=mp4
произведет все доступные опции для муксера MP4, среди которых:
-encryption_scheme <string> E....... Configures the encryption scheme, allowed values are none, cenc-aes-ctr
-encryption_key <binary> E....... The media encryption key (hex)
-encryption_kid <binary> E....... The media encryption key identifier (hex)
Эти параметры и их значения должны быть помещены после всех входных данных и перед выходным именем файла.