内蔵AACのエンコード(出力)はまだ音が変です。
まともに動作するようになるまでは、Nero AAC コーデックを使用した、音声AAC動画の作成方法を、こちらの記事に書きましたので、参考にしてください。
ffmpeg_bin-20024.zip
ffmpeg_bin_pentium4-20024.zip (Pentium4最適化版)
ffmpeg_bin_core2-20024.zip (Core2最適化版)
ffmpeg_bin_athlon64-20024.zip (Athlon64最適化版)
ffmpeg_bin_phenom-20024.zip (Phenom最適化版)
以下のライブラリをアップデートしました。
opencore-amr-0.1.2
x264 rev.1271
バイナリはどれを使っても大丈夫だと思いますが、SSE2に対応していないCPU(Sempronの一部、Pentium3など)をお使いの方は、最適化無し版を使ってみてください。
最適化無し版でもエラーが出る場合は、サポート外とします。
zipファイルを解凍すると、ffmpeg.exeが出てきますので、携帯動画変換君のcoresフォルダに置くなり、単体で使うなりしてください。
pthreadGC2.dllは不要です。
携帯動画変換君のffmpeg.exeとは、オプションの互換性がありませんので、上書きする際はご注意ください。
FFmpegのコンパイルは、こちらの記事を参考にしてください。
コンパイル環境:MinGW gcc4.4.1
各ライブラリのバージョンは、以下の通りです。
nasm-2.07
yasm-0.8.0
pthreads-w32 release 2.9.0
zlib-1.2.3
bzip2-1.0.5
faad2-2.7
gsm-1.0.13
lame-398-2
libnut-662
opencore-amr-0.1.2
libogg-1.1.4
libvorbis-1.2.3
libtheora-1.0
x264 rev.1271
xvidcore-1.2.2
最適化オプションは、以下のようにしています。
configureのオプションに--enable-smallを付けると、gccのオプションに-Osが付きます。
--enable-smallを付けなければ、gccのオプションに-O3が付きます。
最適化無し版
--extra-cflags="-mtune=generic -mno-sse2 -fno-strict-aliasing"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse -fno-strict-aliasing"
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse -fno-strict-aliasing"
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse -fno-strict-aliasing"
configureオプションは以下の通りです。
$ ./configure --enable-memalign-hack --enable-postproc --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfaad --disable-decoder=aac --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libx264 --disable-ffserver --disable-ffplay --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"
※--extra-cflagsは、最適化の種類により異なります。
configureのメッセージはこちら。
最近久しぶりに動画の変換をしたのですが、ffmpegの最新版だとエンコードすらされず古めのrev.18302ではx264でエンコードしても出力されたファイルはなぜか普通のmpeg4になります。
設定がおかしいのでしょうか?
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "<%TemporaryFile%>" -threads 2 -timestamp "<%TimeStamp%>" -flags bitexact -rc_eq "blurCplx^(1-qComp)" -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -keyint_min 0 -sc_threshold 70 -vcodec libx264 -s 640x480 -r 30.00 -b 8000k -acodec aac -ac 2 -ar 44100 -ab 192k -f ipod -level 13 "<%TemporaryFile%>.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "<%TemporaryFile%>" -threads 2 -timestamp "<%TimeStamp%>" -flags bitexact -rc_eq "blurCplx^(1-qComp)" -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -keyint_min 0 -sc_threshold 70 -vcodec libxvid -s 640x480 -r 30.00 -b 8000k -acodec aac -ac 2 -ar 44100 -ab 192k -f ipod -level 13 "<%OutputFile%>.mp4""
Command2="rm "<%TemporaryFile%>"-0.log"
golgolさんが以前コメントしてくださったのを参考にしてみてください。
http://blog.k-tai-douga.com/article/30430899.html#comment
Command0とCommand1のどこかに、
-me_range 16
などを追加すると、エンコードできると思います。
あと、
-rc_eq "blurCplx^(1-qComp)"
は、無くても問題なくなっています。
せっかく良い情報をいただいても、コメントだと埋もれてしまうので、もったいないですね。
なんとかせねばと考えてはいるのですけど。
-me_range 16
を追加すると無事エンコードできました。
何かあればそのときはまたよろしくお願いします。
rev.19754 以降で BonTsDemux が停止してしまうようになりました。
しばらくビルドごとに確認していたのですが、変化が無かったため書き込みさせていただきました。
ツールの影響の可能性も高いのですが、何か ffmpeg のオプションなどおかしいのでしょうか。
アドバイスがいただければ幸いです。
-f mp4 -vtag mp4v -vcodec libx264 -b 896k -bt 896k -qmin 24 -qmax 36 -qdiff 8 -s 720x480 -coder 1 -level 13 -nr 48 -g 256 -keyint_min 8 -sc_threshold 72 -mbd 2 -me_method umh -me_range 32 -subq 6 -refs 4 -trellis 2 -bf 8 -b_strategy 1 -bidir_refine 1 -directpred 3 -partitions parti4x4+parti8x8+partp8x8+partb8x8 -cmp chroma -flags ilme+ildct+alt+mv4+loop -flags2 bpyramid+wpred+mixed_refs+dct8x8+fastpskip -acodec libmp3lame -ac 2 -ar 48000 -ab 128k -y -threads 6 -copyts
libopencore_amrnbを使いたかったのですが、どうしても
「Error while opening encoder for output stream #0.1 - maybe incorrect parameters such as bit_rate,rate,width or height」
という表示が出てしまい、変換することが出来ません。
cpuがphenomU955BEで、使用したffmpegは最適化なし版と、Phenom最適化版です。iniは下のように設定しています。
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -ss 0 -t 540 -timestamp "<%TimeStamp%>" -vcodec mpeg4 -s 320x240 -r 9.99 -b 138k -acodec libopencore_amrnb -ac 1 -ar 8000 -ab 12 -f 3gp -threads 4 "<%TemporaryFile%>.3gp""
何か解決策はないでしょうか?
ちなみにamrwbは「unknown encoder」とエラーが出ました。
書き込んだ後で色々検索したり試したりして解決出来ました。abの値がおかしかったようで。
失礼しました。
BonTsDemuxは使ったことがないのでわかりませんが、こちらで配布しているFFmpegは、rev.19754とそれ以降では、libx264関連で違いがあります。
FFmpeg rev.19310のlibavcodec/libx264.cの変更によって、x264でエンコードされた動画が他のツールなどで不正なデータと判断されてしまうことがあるとのことで、libavcodec/libx264.cだけ、変更前のrev.19309相当のものにrevertしていました。
ですが、rev.19883あたりから上記のようなことをすると、libx264のエンコードがエラーで落ちるようになってしまったため、revertするをやめてオリジナルのものを使用するようになりました。
ということで、画質がよくなるとか劇的に早くなるなどということもありませんので、今まで使えていたものを使っていただくのが良いかと思います。
私も最初libopencore_amrnbでハマりました。
AMR NBの規格で、以下の値しか受け付けないようです。
-ac 1 :1ch モノラル
-ar 8000 :サンプリングレート 8kHz固定
-ab 4.75k, 5.15k, 5.9k, 6.7k, 7.4k, 7.95k, 10.2k or 12.2k :ビットレート 8種類のいずれか
他にも困っている方がいるかもしれませんので、ご参考まで。