今回も、大きな変更はありませんので、前回まで使用できていた方は、問題なく動作すると思います。
ffmpeg_bin_pentium4-18607.zip (Pentium4最適化版)
ffmpeg_bin_core2-18607.zip (Core2最適化版)
ffmpeg_bin_athlon64-18607.zip (Athlon64最適化版)
ffmpeg_bin_phenom-18607.zip (Phenom最適化版)
2013/02/09 faac入り最終版ですが、ライセンス上、再配布できないため削除しました。
以下のライブラリをアップデートしました。
yasm-0.8.0
x264 rev.1140
今回も自前でビルドしたMinGW gcc4.3.3を使用しています。
バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Sempronの一部など)をお使いの方は、最適化無し版を使ってみてください。
zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
pthreadGC2.dllは不要です。
携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。
携帯動画変換君の設定は、こちらの記事を参考にしてください。
FFmpegのコンパイルは、こちらの記事を参考にしてください。
コンパイル環境:MinGW gcc4.3.3
各ライブラリのバージョンは、以下の通りです。
nasm-2.05.1
yasm-0.8.0
pthreads-w32 release 2.9.0
zlib-1.2.3
faac-1.28
faad2-2.7
gsm-1.0.12
lame-398-2
libnut-661
libogg-1.1.3
libvorbis-1.2.0
libtheora-1.0
x264 rev.1140
xvidcore-1.2.1
最適化オプションは、以下のようにしています。
configureのオプションに--enable-smallを付けると、gccのオプションに-Osが付き、-O4にしても無駄なことが分かりましたので、-O4は外しました。
--enable-smallを付けなければ、gccのオプションに-O3が付きます。
最適化無し版
--extra-cflags="-mtune=generic -mno-sse2"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse"
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse"
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse"
configureオプションは以下の通りです。
$ ./configure --enable-memalign-hack --enable-postproc --enable-swscale --enable-gpl --enable-libfaac --disable-decoder=aac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-ffserver --disable-ffplay --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-tree-ch -fno-common"
※--extra-cflagsは、最適化の種類により異なります。
configureのメッセージはこちら。
コメントありがとうございます。
コメントいただけると、とても励みになります。
時々更新していますので、またどうぞ。
18302より前からmpeg-tsに対応していたようですが、コピー制限のないファイル(TS抜きのCM)をエンコードすると音声が登録されるのですが、同じ手段で取り込んだコピー制限のあるファイルをエンコードを行う(x264/AAC)とAACの部分が抜け落ちたファイルが出力されるようです。
どの部分のライブラリに関わる話か分からないので一応報告まで。
なお、同設定でmpeg-psファイルにコンバートした後なら全く問題ありません。
非常に便利使いさせていただいております。
世間ではGW突入
僕にはあまり関係ないようです_no
gcc4.40出ましたね
さくっとコンパイルしようとしたら
libgompでエラーが・・・
ちょこちょこある休みで調べて挑戦してみたいとおもいますー
昨晩コンパイルをしていると、configureでこんなエラーが…
libfaac is nonfree and --enable-nonfree is not specified.
どうも、rev.18715あたりから、libfaacがGPLではなくなったようです。
mp4のエンコードに便利だったのに…
情報ありがとうございました。
コメントがないだけで、他にも困っている方がいらっしゃるんでしょうかね?
また何か情報がありましたら、よろしくお願いいたします。
蓄電さんはGW中もお仕事ですか?
ちなみに、私は7月いっぱいで無職になる予定です(汗
gcc4.40のコンパイル挑戦してみましたが、やっぱりlibgompでコケました。
TDMさんのところではgcc4.4.0上がってますね。
クロスコンパイルみたいなので、何か違うんでしょうけど。
解決策が分かったら、ぜひご報告お願いいたします。
情報ありがとうございました。
libfaacが使えないと、ffmpegの便利さがあまりなくなっちゃいますね…。
映像と音声を分離して、音はNeroのAACエンコーダでエンコードして、結合なんてことになるんでしょうか。
ffmpegの更新も、しばらく様子を見て考えます。
エンコードの設定に何か違いがあるのでしょうか?
エンコードの設定に何か違いがあるのでしょうか?
以下は携帯動画変換君の設定例です。
問題のない動画を作成できます。
Command0=""<%AppPath%>\cores\ffmpeg-18302" -threads 2 -y -i "<%InputFile%>" -timestamp "<%TimeStamp%>" -deinterlace -vcodec libx264 -coder 1 -flags bitexact -s 640x480 -r 29.97 -b 1500k -aspect 4:3 -acodec libfaac -ac 2 -ar 48000 -ab 192k -f mp4 "<%OutputFile%>.mp4""
上記設定で問題ありません。
が、エンコードする条件が不明なのですが、15972あたりでは全く音ズレがなかったのですが、音ズレが結構激しく使えない状態です。
当分バージョンアップを見合わせると言うことなのでちょっと残念ではありますが、全く対処方法がない訳ではないのでバージョンの使い分けをしたいと思います。
libfaacの件は、FFmpegのコンパイルの時に関わるものです。
libfaacのライセンスの問題で、libfaacを含むバイナリを配布できなくなったということです。
FFmpegの設定には関係ありませんので、気になさらなくて良いと思います。
お騒がせしました。
それにしても困った問題ですね(^^;;)
GWも仕事ありき遊びありきな連休でした
しかしgcc 4.4.0なかなかうまくいきません
書いてあるのがクロスコンパイル用ばっかで・・・
それにしてもlibfaacはこまりましたねー・・・
自分も gcc-4.4 のコンパイルで libgomp でこけました。
libtool の定義が MSVC っぽくされてしまって、shared と static の両方をビルドする場合におかしくなってました。
そのときはビルド時に libgomp にはいって Makefile と libtool の shared を no にして make で無理やり通りましたが、インストールされるライブラリが libgomp.lib のような感じで拡張子がおかしかったです。
その後で気がついたのですが、 fortran のソースも展開して有効にすると、ちゃんと .a, .dll. .dll.a の3つができて正しく生成されました。
omp は fortran も対象なのでその辺が関係しているのかもしれません。
あと、出来上がった gcc で x264 を configure しようとしたらアセンブラがテンポラリファイルを作れないとエラーを吐くトラブルもありました。
こちらの方は TDM 版の make-temp-file.patch を参考にして、以下のようなパッチを当ててビルドしなおしたら解決しました。
Index: libiberty/make-temp-file.c
===================================================================
--- libiberty/make-temp-file.c (revision 147315)
+++ libiberty/make-temp-file.c (working copy)
@@ -59,7 +59,7 @@
#define TEMP_FILE "ccXXXXXX"
#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
-#if !defined(_WIN32) || defined(__CYGWIN__)
+#if !defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
/* Subroutine of choose_tmpdir.
If BASE is non-NULL, return it.
@@ -106,7 +106,7 @@
{
if (!memoized_tmpdir)
{
-#if !defined(_WIN32) || defined(__CYGWIN__)
+#if !defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
const char *base = 0;
char *tmpdir;
unsigned int len;
@@ -130,10 +130,24 @@
/* Append DIR_SEPARATOR to the directory we've chosen
and return it. */
len = strlen (base);
- tmpdir = XNEWVEC (char, len + 2);
- strcpy (tmpdir, base);
- tmpdir[len] = DIR_SEPARATOR;
- tmpdir[len+1] = '\0';
+ if (base[len - 1] != '/'
+#if defined (_WIN32) || defined (__MSDOS__) \
+ || defined (__DJGPP__) || defined (__OS2__)
+ && base[len - 1] != '\\'
+#endif
+ )
+ {
+ tmpdir = XNEWVEC (char, len + 2);
+ strcpy (tmpdir, base);
+ tmpdir[len] = DIR_SEPARATOR;
+ ++len;
+ }
+ else
+ {
+ tmpdir = XNEWVEC (char, len + 1);
+ strcpy (tmpdir, base);
+ }
+ tmpdir[len] = '\0';
memoized_tmpdir = tmpdir;
#else /* defined(_WIN32) && !defined(__CYGWIN__) */
DWORD len;
一つ前のコメントの続きでgccのビルドからffmpegのビルドまで試したのでご報告です。
自分のはまったところは
・mingw の gcc 3.4.5 だと ppl のビルドでこけたので全工程を TDM 氏の 4.3.3 でやりました
・gmp のビルドのときに CPPFLAGS=-fexceptions を指定 (pplをビルドするときにconfigureでWarningがでました) して、--enable-cxx でビルドする
・cloog のビルドのときに Makefile の LIBS のところに -lstdc++ を追加する
gcc は iconv, gmp, mpfr, ppl, cloog 全部 static リンクで、msys 上でビルドです。一応、configure のオプションも書いておきます。
../gcc-4.4/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --with-tune=generic --enable-languages=c,c++,fortran,objc,obj-c++ --enable-sjlj-exceptions --enable-fully-dynamic-string --enable-libgomp --enable-libstdcxx-debug --enable-threads --enable-version-specific-runtime-libs --disable-nls --disable-werror --disable-win32-registry --program-suffix=-4.4.1 --with-ppl=/mingw --with-cloog=/mingw --disable-bootstrap
configure 後にビルドディレクトリの top にある Makefile の HOST_PPLLIBS と HOST_CLOOBLIBS のところに -lstdc++ を追加してからビルドします。
このタイミングで追加しないと、後のほうの gcc 本体のビルドで未定義シンボルエラーが大量に出ます (ppl や cloog が dll ならこの問題は発生しないと思います)。
あと、検索していたら
http://alohakun.blog7.fc2.com/blog-entry-990.html
このように msys 上で native ビルドすると c++ の pch のところでこけるような記事を見つけたのですが、自分の試したときは特に問題なく通りました。
できた gcc をインストールして、ffmpeg の svn head を吸って、とりあえず外部ライブラリ無しで、
--enable-memalign-hack --enable-postproc --enable-gpl --enable-pthreads
で (pthreads は shared です) ビルドしてみたところ、とりあえず make test は通過しました。
4.3.3 のときと変わったのは、
・-O3 で -fno-tree-ch 無しでも落ちなくなった
・gcc 4.2 の頃に出ていた strict-aliasing の Warning が出るようになった
という感じです。
連投 & 長くてすいませんが、ひとまずご報告まで。
詳しい情報ありがとうございました!
pplとcloogはまだ上手く行かないのですが、gcc4.4.0のビルドは、gmp-4.3.0、mpfr-2.4.1、libiconv-1.13などを入れて、libgompも通るようになりました。
しかし、fortranが原因とは盲点でした…。
とりあえず、今回よりfaacなしでコンパイルした物をアップすることにします。
AACのエンコードは、何か代わりの方法探すしかないですね。