FFmpeg:如何制作MP4 CENC(通用加密)视频

问题描述 投票:9回答:2

使用ffmpeg进行CENC加密的正确语法是什么?

ffmpeg 3.0发行说明包括“通用加密(CENC)MP4编码和解码支持”,文件libavformat / movenccenc.h和libavformat / movenccenc.c似乎包括根据通用加密标准加密MP4文件所需的一切。

但是,我在ffmpeg手册页中找不到关于此主题的任何文档。

问候

video encryption ffmpeg video-encoding
2个回答
11
投票

Mulvya的回答涵盖了ffmpeg-options。

我只是添加一个具体的例子并谈论回放,因为我昨天做了一些实验(独立)。

Encryption example

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

(当然使用情况可能与您的情况有所不同;我只是重新调整了视频和音频)

Playback / Decoding

ffplay

ffplay SampleVideo_1280x720_1mb_encrypted.mp4 -decryption_key 76a6c65c5ea762046bd749a2e632ccbb

但是,由于这或多或少是一个原型玩家,人们可能想要使用更强大的东西。

mpv

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个密钥中的哪一个?)。我认为必须通过它,但解码不需要(如果您知道哪个键用于哪个视频)。

官方参考文献是:


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)

这些选项及其值应放在所有输入之后和输出文件名之前。

© www.soinside.com 2019 - 2024. All rights reserved.