使用ffmpeg进行CENC加密的正确语法是什么?
ffmpeg 3.0发行说明包括“通用加密(CENC)MP4编码和解码支持”,文件libavformat / movenccenc.h和libavformat / movenccenc.c似乎包括根据通用加密标准加密MP4文件所需的一切。
但是,我在ffmpeg手册页中找不到关于此主题的任何文档。
问候
Mulvya的回答涵盖了ffmpeg-options。
我只是添加一个具体的例子并谈论回放,因为我昨天做了一些实验(独立)。
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
有一些讨论here因为我的第一个预期的命令行没有按预期行事!
编辑:试图解决Reino的问题
encryption_key
只是128位= 16字节编码为十六进制(遵循AES-128-CTR的usage)。所以random.org配置为16字节和hex.encoding将是一个有效的密钥(但我不建议一般信任外部资源)。我用python的secrets module归结为:secrets.token_hex(16)
。解码需要这个encryption_key
。
encryption_kid
Key ID只是这个密钥的标识符,可能需要更复杂的使用模式(我猜!你可以做类似的事情:嘿视频......我需要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)
这些选项及其值应放在所有输入之后和输出文件名之前。