ffmpegで動画をエンコードしていたら、気になる事があったのでメモ。誰か解決策を知っていたら教えてください(TxT)
困っていること
frapsで撮影したとある動画をx264に変換すると酷いことになる。
before
after
beforeの動画はこちらです。1GB以上あるので注意。
変換コマンドは以下の通り
./ffmpeg -i test.avi -c:v libx264 -preset slow test.mp4
この動画は現バージョンのffmpegを通すと、以下のエラーが発生します。
Too long VLC (31) in init_vlc Error building tree Error decoding plane 2 Error while decoding stream #0:0: Operation not permitted9
このエラーはlibavcodec/huffman.h
のFF_HUFFMAN_BITS
を増やす修正でFIXできます。なお、元々は9
だったものが10
に修正された経緯がありますが、この動画は12
くらいにしないと駄目でした。なお、16
にすると出力ファイルが異常に大きくなり、24
にすると12
と同じサイズになります。・・・なんで?(;´Д`)
というわけで、まずはこのエラーを回避するためにFF_HUFFMAN_BITS
を12
に変更してビルドしました。
次に試したのは以下のコマンド。pix_fmt
を指定しました。
./ffmpeg -i test.avi -c:v -pix_fmt rgb24 libx264 -preset slow test.mp4
多少マシになったものの、やっぱりおかしな感じになります。
ちなみに、エンコードする時にサイズを変更すると大丈夫なのです。
./ffmpeg -i test.avi -s 720x480 -c:v libx264 -preset slow test.mp4
ffmpegのバージョンはこんな感じ↓です。
# ./ffmpeg -version ffmpeg version 2.0.1 built on Aug 30 2013 16:30:36 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3) configuration: --enable-gpl --enable-version3 --enable-avisynth --enable-fontconfig --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxvid --disable-outdev=sdl --disable-ffprobe --disable-ffserver --optflags='-O2 -finline-functions' libavutil 52. 38.100 / 52. 38.100 libavcodec 55. 18.102 / 55. 18.102 libavformat 55. 12.100 / 55. 12.100 libavdevice 55. 3.100 / 55. 3.100 libavfilter 3. 79.101 / 3. 79.101 libswscale 2. 3.100 / 2. 3.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 3.100 / 52. 3.100
ffmpegのビルドの記事は別途かきます。 → 書きました。
うーん・・。わからん(´・ω・`)