2007年12月15日

ConvertMovieToFile:NewMovieFromFile Error


FFmpeg rev.11142あたりから、携帯動画変換君でこんなエラーが出るようになりました。
rev.11141までは出ていなかったエラーです。

A>ConvertMovieToFile:NewMovieFromFile Error
A>Dialog : 処理実行中にエラーが発生しました [Error:-8971]

rev.11141からrev.11142への変更の中に原因があるらしい?
ということで、以下のように修正したところ、エラーが出なくなりました。

2008/1/13
ひでぼさんの情報より、修正方法を追記しました。
修正方法は2パターンありますので、どちらか一方のみ適用してみてください。
ここに置いてあるFFmpeg rev.11436以降は、(2)の修正を適用しています。

(1)
libavcodec/opt.c 229行目(av_get_string関数中)の、変換文字を"0x%08X"から"%d"に変更します。
修正前) case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break;
修正後) case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "%d" , *(int *)dst);break;

(2)
libavcodec/opt.c 182行目の後(av_set_string関数中)に、文字列の先頭が"0x"の時の処理を追加します。
if (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d;
else if(cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d;
else if(buf[0] == '0' && buf[1] == 'x') d = strtoul(buf, NULL, 16);

エラーの原因を解明できたわけではなく、差分を取って、エラーが出る前に戻しただけです。
ご参考まで。
posted by あべちん at 21:36 | Comment(3) | TrackBack(0) | 携帯動画変換君

2007年12月09日

携帯動画変換君でWindowsMediaEncoderを使おう


P905i買っちゃいましたよ!
WMV9動画再生に対応してます!!
それなのにそれなのに、FFmpegはWMV9(WMV3)のデコードのみで、エンコードに対応してない!!!
ということで、携帯動画変換君でWindowsMediaEncoderを使ってみましょう。
WindowsMediaEncoderは先にインストールしておいてください。

映像 WMV9 320x240、29.97fps、VBR 平均ビットーレート800kbps
音声 WMA9 VBR 128kbps、44.1Khz、ステレオ2ch
の場合、以下のようになります。

Title=【動画】WME 320x240 800kbps 29.97fps 128kbps 44.1kHz
Command0="cscript "C:\Program Files\Windows Media Components\Encoder\WMCmd.vbs" -input "<%InputFile%>" -output "<%OutputFile%>" -v_mode 3 -v_bitrate 800000 -v_width 320 -v_height 240 -v_framerate 29.97 -a_mode 3 -a_setting 128_44_2"


YouTube、DailymotionのFLV動画など、WMEで直接読み込めない場合は、Huffyuv + WAVの中間ファイルを作ってからエンコードします。
無圧縮avi(-vcodec rawvideo)だと中間ファイルが巨大になります。
もしかして、Huffyuvはffdshowも必要かも?

Title=【動画】中間ファイル有り WME 320x240 800kbps 29.97fps 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec huffyuv -acodec pcm_s16le "<%TemporaryFile%>.avi""
Command1="cscript "C:\Program Files\Windows Media Components\Encoder\WMCmd.vbs" -input "<%TemporaryFile%>.avi" -output "<%OutputFile%>" -v_mode 3 -v_bitrate 800000 -v_width 320 -v_height 240 -v_framerate 29.97 -a_mode 3 -a_setting 128_44_2"
Command2="rm "<%TemporaryFile%>.avi""


コマンドラインオプションは、
C:\Program Files\Windows Media Components\Encoder\WMEncUtil.chm
高度なエンコード手法 -> コマンド ライン オプションを使う
に、詳しく書かれています。

映像のビットレートは1000kbpsでも再生できました。
あまりビットレートを高くしても、ファイルサイズが大きくなるだけで、800kbpsでも、携帯の画面で見た感じは大して変わらないと思います。
YouTubeやDailymotionの動画などは、4〜500kbps位でも良いかもしれません。
音も、YouTubeなら64kbps(-a_setting 64_44_2)、Dailymotionなら96kbps(-a_setting 96_44_2)で良いと思います。

WindowsMediaEncoderからだとバッチエンコードがめんどくさいですが、一度設定しておけば、携帯動画変換君の方が簡単なので、おすすめです。
posted by あべちん at 02:58 | Comment(0) | TrackBack(0) | 携帯動画変換君

2007年11月25日

携帯動画変換君をFFmpegのGUIとして使う


携帯動画変換君を、携帯用にこだわらず、FFmpegのGUIとして使ってみましょう。
例えば、音声がMP3のx264動画に変換したい場合、以下のような設定になります。
映像のビットレートは、元の映像によって、あまり高くしても意味がありませんので、適当に調整してください。

映像 x264 640x480 1500kbps、29.97fps、
音声 MP3 128kbps、サンプリングレート44.1kHz ステレオ

Title=の行から、携帯動画変換君のTranscoding.iniに、コピー&ペーストしてください。

Title=【動画】x264 + MP3
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libx264 -s 640x480 -r 29.97 -b 1500k -acodec libmp3lame -ac 2 -ar 44100 -ab 128k "<%OutputFile%>.avi""

CPUがDual Coreな環境の方は、-threads 2 を追加すると、エンコードが速くなります。

Title=【動画】x264 + MP3 (Dual Core用)
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libx264 -s 640x480 -r 29.97 -b 1500k -acodec libmp3lame -ac 2 -ar 44100 -ab 128k -threads 2 "<%OutputFile%>.avi""
posted by あべちん at 21:11 | Comment(0) | TrackBack(0) | 携帯動画変換君