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 で検索する。

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

libaacplus と libvo-aacenc のサポート打ち切りと Kamedo2 さんの多大な貢献で内蔵AACエンコーダの品質が向上した。それにより内蔵AACは libvo-aacenc の代わりとして、libaacplus は当初 HE-AAC、HE-AACv2 のエンコーダとして使われていたが 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に直接プロトコルを追加することは可能でしょうか?

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

コメントを残す

メールアドレスが公開されることはありません。

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