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

ffplay SampleVideo_1280x720_1mb_encrypted.mp4 -decryption_key 76a6c65c5ea762046bd749a2e632ccbb

Но так как это более или менее прототип, можно захотеть использовать что-то более мощное.

MPV

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 -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)

Эти параметры и их значения должны быть помещены после всех входных данных и перед выходным именем файла.

Другие вопросы по тегам