last update 2012年1月20日 10:38

最近のFFmpegで動画の音声にMP3やAACを指定する方法

FFmpeg_godhavemercy

最近のバージョンのFFmpegでは一部オプションが変更されており、昔と同じオプションではaacやMP3のエンコードができません。

そのため、携帯動画変換君やBonTsDemuxなどに同梱のFFmpegを最新化すると、エンコード時の音声codecにAACやMP3指定時、エラーとなり動画が出力されない場合があります。(フロントエンドアプリにより症状は変わりますが。)

今回は、その解決方法と、最新版FFmpegを使う際のAAC音質対策。について書きます。

※ 2012/1/20 短文化とブラッシュアップ

現在のバージョンのFFmpegで音声codecにaacやlibmp3lameを指定する場合、以下のように –strict オプションを指定する必要があります。

<MP3音声指定時>

-acodec libmp3lame -strict unofficial

<AAC音声指定時>

-acodec aac -strict experimental

FFmpeg内蔵AACエンコーダの音質について

(現状の)FFmpeg内蔵AACエンコーダの音質は非常に悪く、人によってはかなり気になります。

この件については下記サイトが詳しく、その中で「-ab 128k –cutoff 17000」オプションにより高域音をカットする、という策を提示しておれらます。

確かに効果のある策ではあるのですが、それでも私は満足行かないレベルでして、再生側がMP3音声対応なら -acodec libmp3lame を使ったほうが音質もマシだし手軽なんじゃないか。というのが私の所感です。

AACの音質対策としては、他にも、neroAacEncを使う、旧バージョン(r18607)のFFmpegを使う、FFmpegを自前でビルドする…等、いろいろな方法があります。

なお、FFmpegのリビジョンと利用可能なAACエンコーダの関係については、おなじみのMobileHackerzさんがまとめておられます。

オプション指定の例

上記を踏まえ、以下にFFmpegのオプション指定のサンプルを示します。

<MP3音声指定時>

-f mp4 -vcodec libxvid -threads 0 -b:v 1024000 -aspect 16:9 -vtag mp4v -qscale 5 -acodec libmp3lame -strict unofficial -ac 2 -ar 48000 -ab 128k -s 800x450 –y

<AAC音声指定時>

-f mp4 -vcodec libxvid -threads 0 -b:v 1024000 -aspect 16:9 -vtag mp4v -qscale 5 -acodec aac -strict experimental -ab 128k -cutoff 17000 -ac 2 -ar 48000 -s 800x450 -y

ネットワーク越しでも自在に動画再生できるAndroid

iOSでも、AVPlayerHD(有料)みたく多くのファイル形式に対応したプレーヤはあるのですが、AndroidならNASからネットワーク越しに動画を再生する場合でも、インテントでMX動画プレーヤーみたいな雑食系プレーヤにNASのファイルを喰わせられるので、ファイル形式変換の手間がかかりません。

動画の音声がMP3だろうがVorbisだろうが関係なく再生し、パワーさえ足りればMPEG2-PS+AC3までネットワーク越しにゴリゴリと再生する姿は頼もしくすらあります。

ともあれ、AndroidでもiOSでもLAN越しに動画再生ができれば、TvRockの録画終了後コマンドで「TsSplitter→BonTsDemux→NASに転送」した動画を、スマホやタブレットから自在に見られるステキ環境が作れるんですね。

この環境、一度使うと後戻りできない魅力がありまして、これからは、端末に動画をコピーするのではなく、ネットワーク越しに直接再生するスタイルが主流になるのかも。と思わせてくれるものだったりします。

ネットワーク越しにいろんな機器と直接つなげる。という話になってくると、実は、Androidの思想が効いてくる部分でして、先に挙げた再生可能形式の幅もそうですが、DTCP-IP対応などの面でも(今は)Androidにアドバンテージがある分野だったりします。

iOSはコンテンツの流入経路に統制を求めている節があり、動画を愛する善良なる先進ユーザーとしては色々思う所があるなぁ。というのが正直な所です。

AirPlayの対応形式を増やしてくれるだけでも随分状況が変わるのに、勿体無いなぁ。とかとか。

ウチのサイトは状況に応じて随時更新していますので、いつかこのくだりがなくなるよう頑張っていただきたいと思います。

編集後記

今回の記事。正直、今さら感もある内容なんですが、そろそろ頃合いかなぁ、と思い記事にしました。

ちなみに、BonTsDemux の FFmpeg を最新化すると、サイズが0(ゼロ)の動画が生成されてしまう。という場合は、今回の -strict オプションの指定を疑ってみましょう。

記事中の「オプション指定の例」で今どきxvidを使っているのは、どうせファイル転送しないからファイルサイズが大きくてもいいじゃん。とか、シーク時のレスポンス追求。とか、手元のAndroid機でネットワーク越しにH.264再生すると若干不安定だから。とか、そういう理由なだけです。設定は好きに触ったらいいと思います。

最後に、動画を愛する善良なる先進ユーザーの皆様の動画ライフがますます充実する事をお祈りし、この記事を締めくくりたいと思います。

この記事への2件のコメントがあります

  1. kamedo2 says:

    5年前

    リンクありがとうございます。

    「-ab 128k -cutoff 17000」で満足いかないなら、素直にビットレートをあげるのがいいんじゃないかと思います。例えばビットレートを2倍にしたいなら、「-ab 256k -cutoff 20000」がおすすめです。ビットレートによって最適なcutoffの数値は変わります。ブログにビットレートとおすすめなcutoff値の表を載せてあります。それを利用するか、各自で試行錯誤してください。

  2. blog.rettuce.com » FBOをキャプりたい。 says:

    3年前

    […] ラる仕様になってる。 http://www.teradas.net/archives/3105/ […]

コメントを記入