使用ffmpeg进行CENC加密的正确语法是什么?
FMPEG3.0发行说明包括“通用加密(CENC) MP4编码和解码支持”,而libavformat/movenccenc.h和libavformat/movenccenc.c文件似乎包含了根据通用加密标准加密MP4文件所需的一切。
但是,我在ffmpeg手册页面中找不到任何关于此主题的文档。
问候
发布于 2017-07-06 20:39:59
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,因为我预期的第一个命令行的行为不像预期的那样!
编辑:试图回答雷诺的问题
encryption_key只有128位= 16字节编码为十六进制(遵循AES-128-CTR的usage )。因此,配置为16字节和hex.encoding的random.org将是一个有效的密钥(但我一般不建议信任外部资源)。我使用的是python的secrets module,它可以归结为:secrets.token_hex(16)。解码时需要使用此encryption_key。
encryption_kid Key ID只是这个键的一个标识符,可能需要用于更复杂的使用模式(我在猜测!你可以这样做:嘿,视频...我需要1000把钥匙中的哪一把?)我想它是必须通过的,但解码时不是必需的(如果你知道哪个key用于哪个视频)。
官方的参考资料是:
发布于 2017-07-06 16:26:44
运行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)这些选项及其值应该放在所有输入之后和输出文件名之前。
https://stackoverflow.com/questions/44939166
复制相似问题