試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

recordMyDesktopで保存した音声入り動画をステレオ音声でYouTubeにアップロードする覚え書き(後半)

recordMyDesktopで保存した音声入り動画をステレオ音声でYouTubeにアップロードする覚え書き(前半)」の続き。
(2008/9/13)前半のところにも書いたが、高画質版(fmt=18指定時)では、動画がサーバ上で再エンコードされた場合であっても、アップロードした動画がステレオ音声を含んでいれば、再生される動画もステレオ音声になる。

  1. ステレオ音声でアップロードするために手元でFLV形式にエンコード
    1. FFmpegで2passエンコード
    2. オプションの覚え書き

ステレオ音声でアップロードするために手元でFLV形式にエンコード

FFmpegで2passエンコード
GNU/Linux上で動作し、色々な調整ができてFLV形式で出力するためのエンコーダとして、FFmpeg(http://ffmpeg.org/)がある。これを使用して(Sorenson H.263+MP3).flvのコンテナ形式にするのだが、ファイルサイズと再生時間の比率を許容範囲内におさめるにはオプションの調整が不可欠で、比率の計算とアップロード後の確認も欠かせない。
試行錯誤の後、今回の動画では、下のようにしてエンコードを2pass*1で行った結果、無事に再エンコードを回避できた。

$ ffmpeg -i [入力ファイル] -f flv -vcodec flv -b 200k -g 300 -s 320x240 -r 50 -aspect 4:3 -an -pass 1 -y [FLVファイル]
$ ffmpeg -i [入力ファイル] -f flv -vcodec flv -b 200k -g 300 -s 320x240 -r 50 -aspect 4:3 -acodec libmp3lame -ar 44100 -ab 96k -ac 2 -pass 2 -y [FLVファイル]
$ rm ffmpeg2pass-0.log -f

上の中での数値は必ずしも再エンコード回避を保証するものとはならず、元の動画の内容によっても適正値は異なる。音声重視か映像重視か*2などの用途や好みなどにも合わせて、エンコードする動画ごとに調整することになる。
2passの補足として、1回目の分析後ffmpeg2pass-0.log*3という解析結果のファイルが生成され、エンコード時にこれが使用される。

オプションの覚え書き
全体に比べると、ここで使用したオプションはほんの一部。

なども参考に。

ffmpegでFLVエンコードする際に使用したオプション
オプション(群)意味
-i入力ファイル指定
-gGroup Of Picture(GOP)のサイズをフレーム数指定
-s映像のサイズ(横x縦)
-r1秒ごとのフレーム数(Hz)
-y出力ファイルを強制的に上書き
-f flv -vcodec flvFLVのコンテナ形式を使用し、ビデオにSorenson H.263(FLV1)コーデックを使用する
-acodec libmp3lame -ar 44100 -ab 96k -ac 2「MP3/44.1kHz/96kbps/Stereo」のオーディオを書き出す(必要に応じて値は調整)
-an出力ファイルにオーディオを含めない(2passエンコードの1回目で使用)
-aspect 4:3アスペクト比の情報を「4:3」に指定する
-pass [1 もしくは 2]2passエンコードをする際に指定し、1回目(分析)には「1」、2回目(エンコード)には「2」を付ける

完成したものがこれ*4。時間は14秒しかないが、実験としてはちょうどよかった。

0:11のあたりで「ガチャン」という音がするのだが、ここがステレオと分かりやすい部分かもしれない。

ファイルサイズは583,746バイトで、14秒として計算すると、ビットレート

583,746[byte] x 8[bit/byte] / 14[s] / 1000[1/k] ≒ 333.57[kbit/s]

となっている。

1passでエンコードを通す*5と659,189バイトになり、ビットレートは約376.68kbpsとなってしまった。

使用したバージョン:

  • recordMyDesktop 0.3.6
  • FFmpeg 0.4.9_p20070616

*1:ファイルを2回走査し、1回目に解析、2回目にエンコードを行うことで圧縮率や品質を改善させる。時間はかかるが、元のファイルを大きく劣化させた上で制約も厳しい中でのエンコードでは、大きなメリットがある

*2:音質の良いオーディオを提供する目的なら、映像の品質を下げたり静止画を使用したりしてその分オーディオの品質を上げられる。逆に、画質優先なら、音声を含めないようにすればよい

*3:-passlogfileオプションで、ファイル名の「ffmpeg2pass」の部分を別の名前に指定することも可能

*4:実際に作成したのは1月上旬

*5:ffmpeg -i [入力ファイル] -f flv -vcodec flv -b 200k -g 300 -s 320x240 -r 50 -aspect 4:3 -acodec libmp3lame -ar 44100 -ab 96k -ac 2 -y [FLVファイル]