使用ffmpeg进行CENC加密的正确语法是什么?
ffmpeg 3.0发行说明包括“通用加密(CENC)MP4编码和解码支持”,文件libavformat / movenccenc.h和libavformat / movenccenc.c似乎包括根据通用加密加密MP4文件所需的一切标准。
但是,我在ffmpeg手册页中找不到关于此主题的任何文档。
此致
答案 0 :(得分:11)
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把钥匙中的哪一个?)。我认为通过它是强制性的,但解码时不需要它(如果你知道哪个键用于哪个视频)。
官方参考资料如下:
答案 1 :(得分:5)
运行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)
这些选项及其值应放在所有输入之后和输出文件名之前。