2016年2月15日 に ffmpeg 3.0 Einstein(アインシュタイン)がリリースされた。今回のリリースはメジャーアップデートとなり、2.8 以降に追加された新機能の中からマスターにしか追加されていなかったフィルタやエンコーダ、デコーダ等の新機能が全て取り込まれた。

RELEASE NOTES for FFmpeg 3.0 “Einstein”

2.8 以降に取り込まれた機能の一覧
Changelog 2.8.1 to 3.0 < git.videolan.org Git

今回のアップデートの主な特徴

  • ffplay の挙動変更
  • MP4 の暗号化、復号対応
  • DTS-HD を外部ライブラリに頼らずフルサポート
  • DXVA2、VAAPI の VP9 ハードウェアデコード対応
  • libaacplus と libvo-aacenc のサポート打ち切りと内蔵AACエンコーダの品質向上
  • マスターにしか追加されていなかったフィルタの追加
  • HLS のセキュリティ対策(2.8.5以降)

ffplay の挙動変更についてはffplay のショートカットキーに追記しているが、画面左クリックでシーン移動できていたのが右クリックに変わったのと、左マウスダブルクリックでフルスクリーンに変えられるようになっている。

MP4 の暗号化、復号対応についてはウェブサイトに設定方法が書いてなくffmpeg -h fullからオプションを調べると載っていて、encryption、decryption で検索する。

-encryption_scheme      E....... Configures the encryption scheme, allowed values are none, cenc-aes-ctr
-encryption_key         E....... The media encryption key (hex)
-encryption_kid         E....... The media encryption key identifier (hex)

ffmpeg -f lavfi -i testsrc2=d=10 -c:v libx264 -encryption_scheme cenc-aes-ctr -encryption_key 76a6c65c5ea762046bd749a2e632ccbb -encryption_kid a7e61c373e219033c21091fa607bf3b8 encrypted.mp4
ffmpeg -decryption_key 76a6c65c5ea762046bd749a2e632ccbb -i encrypted.mp4 -c copy decrypted.mp4

how can i decrypt the encrypted mp4 file using ffmpeg – Stack Overflow

libaacplusとlibvo-aacencのサポート打ち切りとKamedo2さんの多大な貢献で内蔵AACエンコーダの品質が向上した。それにより内蔵AACは libvo-aacenc の代わりとして、libaacplusは当初HE-AAC、HE-AACv2のエンコーダとして使われていたが(FDK-AAC)libfdk_aacの登場によりその役目を終えた。しかし内蔵AACは128k以下の高速エンコードでは libvo-aacenc の代わりになっていないと Kamedo2 さんが言及している。

Kamedo2 さんの記事:FFmpegから使えるAACエンコーダ の音質比較 – 音風景ブログ

マスターにしか追加されていなかったフィルタの追加については適宜このブログでも更新していたが、更新予定のフィルタもあるので随時更新予定。
追加されたフィルタで記事にしているフィルタ。

HLS のセキュリティ対策(2.8.5以降)についてはffmpeg 2.8.5 リリースで言及しそれ以降も数回更新が有り HLS のマニフェストファイルの読み込み制限がきつくなった。既定値のプロトコル以外を読み込むには別途-protocol_whitelistで指定する。ローカルファイルを読み込むfileは既定値に含まれないので既定値のプロトコルを含めて追記する。全てを許可する場合はALL。いつの間にか使えなくなっていたので個別に指定する。ブラックリストは対象プロトコルの前に-をつける。
既定値:file,crypto

その後入力ファイル制限も強くなっているのでファイルタイプの解除もローカルの HLS の場合には必要になる。

ローカルに保存した HLS のマニフェストファイルから保存する場合のコマンド例。この場合、マニフェストファイルに記載してあるセグメントファイルは絶対パスになっている必要がある。そして最後に行に#EXT-X-ENDLISTを追加する。キーファイルが必要な場合はキーファイルも保存する。
ffmpeg -protocol_whitelist http,https,tls,tcp,crypto,file -allowed_extensions ALL -analyzeduration 30M -probesize 30M -i master.m3u8 -c copy output.ts
ffmpeg -protocol_whitelist http,https,tls,tcp,crypto,file -allowed_extensions ALL -analyzeduration 30M -probesize 30M -i master.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

詳しくはffmpeg で Apple HTTP Live Streaming(HLS)を扱うを参照。

2 thoughts on “ffmpeg 3.0 リリース

  • Shota Nishiura

    突然のコメントすみません。

    OpenCVのVideoCaptureで、sdpファイルを読み込もうとした結果、
    [rtp @ 0x120c8c780] Protocol not on whitelist ‘file,crypto’!
    というエラーが出てきました。

    調べてみると上記の通り、ffmpegのデフォルトのwhite_listにudp,rtpのプロトコルが設定されていないとのことでした。

    デフォルトのwhite_listに直接プロトコルを追加することは可能でしょうか?

    よろしければアドバイスお願いします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)