web-dev-qa-db-ja.com

FFmpeg:MP4 CENC(Common Encryption)ビデオの作成方法

FfmpegでCENC暗号化を行うための正しい構文は何ですか?

Ffmpeg 3.0リリースノートには、「共通暗号化(CENC)MP4エンコードおよびデコードのサポート」が含まれており、libavformat/movenccenc.hおよびlibavformat/movenccenc.cファイルには、共通暗号化規格に従ってMP4ファイルを暗号化するために必要なすべてが含まれているようです。

ただし、ffmpegのマニュアルページには、このトピックに関するドキュメントはありません。

よろしく

11
Roland Le Franc

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

_ffplay SampleVideo_1280x720_1mb_encrypted.mp4 -decryption_key 76a6c65c5ea762046bd749a2e632ccbb
_

しかし、これは多かれ少なかれプロトタイププレーヤーであるため、より強力なものを使用したい場合があります。

mpv

_mpv --demuxer-lavf-o=decryption_key=76a6c65c5ea762046bd749a2e632ccbb SampleVideo_1280x720_1mb_encrypted.mp4
_

最初の予期されたコマンドラインが期待どおりに動作しなかったため、いくつかの議論があります ここ

編集:Reinoの質問に対処しようとしています

_encryption_key_は、128ビット= 16バイトとして16進数にエンコードされたものです(AES-128-CTRの sage に続きます)。したがって、16バイトの構成とhex.encodingを使用した random.org は有効なキーになります(ただし、一般的に外部リソースを信頼することはお勧めしません)。私はpythonの secrets module を使用しました:secrets.token_hex(16)。この_encryption_key_はデコードに必要です。

_encryption_kid_ Key ID は、このキーの単なる識別子であり、おそらく、より複雑な使用パターンに必要です(私は!推測です!ねえビデオ...私の1000鍵のうちどれがあなたのために必要ですか?)。渡すことは必須ですが、デコードには必要ありません(どのビデオにどのキーを使用するかがわかっている場合)。

公式リファレンスは次のとおりです。

  • 標準
  • ffmpegの実装:docs(コマンドラインから利用可能)または短い extraction
13
sascha

ランニング 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)

これらのオプションとその値は、すべての入力の後で、出力ファイル名の前に配置する必要があります。

5
Gyan