ビデオのダウンロード:  その後分かったこと
どうしても納得いかないので、突き詰めてみた

 (ご託は兎に角、ファイルサイズがそこそこで、画質もそれほど悪くなくダウンロードしたいだけという人はこちら
 前のページでも書いたとおり、Craving Explorerというビデオダウンロードソフトが気に入ったのだが、どうもファイルサイズが大きすぎてイマイチ。ビットレートを指定して変換すると小さくはなるが画質が、壊滅的に落ちてしまう。(下の写真を参照)

 ffmpeg.exe というコーデックライブラリを使っているのだが、同じコーデックを使っているはずの Superで変換するとかなり小さく変換されて、画質も劣化が分からない。
 当然、考えることとして、Craving Explorer(以下 CE) で一発で Superで変換したのと同様な小さなファイルをダウンロードしたい、・・・出来るはずだ、と思うともう 解析せずにはいられなくなった。

解析経過1: 変換確認とオプションのチェック
CEで、AVI/MP4形式でダウンロードすると、FLV形式に比べて 5~10倍近いファイルサイズになってしまう。CEでは一応、変換エンコーダー(ffmpeg)のオプションを設定してファイルサイズを抑えることが出来るようになっているのだが(ツール > オプション で ffmpegタブの中で指定できる)、ファイルサイズは何とか小さくなるものの、何故かひどい圧縮歪みになって見られない。オプションを幾つか変更して試して見たが、解決しない。
Superでも 動画形式変換のエンコーダーを ffmpeg と Mencoder と切り替えできるので、切替えて試してみたところ、同じパラメータで ffmpegの方が大きくなるがせいぜい 50%upくらい。何倍にもはならない。
その一方で、ダウンロードしたファイルによっては Super/Mencoder でAVIに変換すると、7分の動画が 数十秒で切れてしまうことがある。Super/ffmpeg で変換すると切れることはないが、PCで再生したときに File brokenエラーが出る。多分、投稿者が編集したときにおかしな操作かソフトを使って編集したために、プレーヤでは再生できるが エンコーダーではパラメータが違っており途中で変換を中止するか、変換してもヘッダーへのタグなどが正しく書き込まれずにエラーとなっている様子。

Craving Explr でダウンロードDL後のファイルを Superで変換
保存形式Download File SizeffmpegMencoder
FLV3.859MB17.496MB(*1)1.451(*2)
AVI38.952MB17.481MB(*3)8.60MB(*4)
AVI(*Opt1)5.864MB -vcodec mpeg4 -b 128 -r 15 -acodec copy
AVI(*Opt2)13.759MB -vcodec mpeg4 -acodec copy
AVI(*Opt3)9.524MB Superの ffmpegを利用 Optionは *Opt1と同じ
AVI(*Opt4)9.524MB CEの ffmpegを利用 Optionは
 -vcodec mpeg4 -b 128k -r 15 -acodec copy
*2:元の動画は 7分49秒だが、このファイルは最初の 1分02秒しか変換されていない。

上記表の上の2行は、FLV形式で保存したファイルを Superのそれぞれのエンコーダーで変換した場合のファイルサイズ(*1 *2)と、CEで一旦 AVI形式で保存したものを再度 Superのそれぞれの エンコーダーで再変換圧縮してみたサイズ(*3 *4)を比較したもの。
不思議なことに、一旦 Craving Explorerで (ffmpegエンコーダーで)AVIに変換したものを、再度 Superで ffmpeg/Mencoder で再圧縮しても、 フロックノイズは殆ど目立たずに、エラーも出ない。
そこで、更に オプションを幾つか変えてみたのが、上の表の下から 3-2行目。
何と、ビットレートをいくら上げてもファイルサイズも歪みも変わらないが、ビットレートを指定しない(デフォルトで 200kbpsになる)だと、ファイルサイズが増えて(それでもSuperで変換した場合よりは小さい)歪みは見られなくなる。
どうも、CEから ffmpeg.exe に渡される オプションに問題がありそうだ。

解析経過2: CEの Lib フォルダーにある ffmpeg.exeをコマンドラインで実行してみる
ffmpeg という変換用エンジンは、単体で動作させる場合はコマンドラインから利用する。その際、幾つかの情報が表示される。
D:\temp\0>ffmpeg -i d:\temp\0\A3.flv -vcodec mpeg4 -acodec copy out3.avi
のような感じでコマンドラインに打ち込んで、Enterキーを押すと変換経過が表示される。
 で、まず ビットレートのオプションを指定しないでデフォルトのまま実行すると、下の図の通り、Output #0 のところに 200kbps と表示される。
 次に、
D:\temp\0>ffmpeg -i d:\temp\0\A3.flv -vcodec mpeg4 -b 768 -acodec copy out3.avi
のように、ビットレートを指定して実行してみたら、
やっぱり、ffmpeg.exe には ビットレートの指定が入力されず 0bps と表示された。どうもその上のエラー表示によると ffmpeg.exe をコンパイルした コンパイラが原因かも知れない。
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. Do not report crashes to FFmpeg developers.

 で、試しに Superの中にある ffmpeg.exe を CEの Libフォルダーにコピーしてから、ビットレートを指定してダウンロードしてみると 上の表の 最下行の結果。一旦AVI形式でダウンロードしてから Superの Mencoderで再変換したファイルサイズと殆ど同じになった。このファイルは 画質も見た目変わらず、FLVファイルを Mencoderで再変換するように途中で途切れることもないが、PCの FLV Playerで再生すると最初に

というエラーが表示されて、Yes か No を押さないと再生しない。
で、このファイルを 手持ちの COWON D2で再生すると、一応再生が出来る。しかし上記エラーの表示の通りで、進行バーの上で再生箇所を指定すると次のファイルに飛んでしまう。(早送り、巻き戻しはOK)更に、再生時間の表示が 27分47秒 となってしまう。
上記エラーは私の場合、それほど気にならないし、動画の画質も問題にしないのでファイルサイズが小さくできる Superの ffmpeg.exe をとりあえずはこのまま使おうと思ったのだが、・・・ふと もしかして単位が落ちているのかな? と思いついた。
そこで、CEの Libフォルダーの ffmpeg.exe を元に戻して、オプションの指定に
-b 128K  としてみたところ、ピンポーン!!! で、Superの ffmpeg を使用した場合と同じファイルサイズでダウンロードできた。

イヤー 解析は長かったが、分かってみれば単純な問題。 <K>は要らないとどこかで読んで、そう思いこんだため レートの指定も 2000 くらいまでしかやらなかっただけの話。でも久しぶりにすっきり。


NAME.gif         Ftop_button.gif総アクセス数