ffmpeg で H.264 エンコーディングの動画を作る
HTML5 のvideo要素で使えたり使えなかったりするH.264だが,使えるにこしたことはないと思い,ffmpegでエンコーディングしようとしてみた.少しコツが必要なので,メモしておく.
環境: Debian Squeeze, i686
ffmpeg:
FFmpeg version SVN-r25838, Copyright (c) 2000-2010 the FFmpeg developers built on Jan 21 2011 09:10:31 with gcc 4.4.5 configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
ffmpeg はaptで取得するだけでよかった.
AVI を H.264 でエンコードするコマンド例
ffmpeg -i input.avi -vcodec libx264 -b 500k -fpre /usr/share/ffmpeg/libx264-medium.ffpreset output.avi
ポイントは -vcodec libx264 オプション(h264 などではダメ)と, -fpre /usr/share/ffmpeg/libx264-medium.ffpreset オプション(ないとエラー).
仮に -vcodec h264 とかだと,
Unknown encoder 'h264'
というエラーを吐き,-fpre ... がないと,
[scale @ 0x83a1aa0] w:720 h:480 fmt:yuv411p -> w:720 h:480 fmt:yuv420p flags:0xa0000004 [libx264 @ 0x8355100] broken ffmpeg default settings detected [libx264 @ 0x8355100] use an encoding preset (e.g. -vpre medium) [libx264 @ 0x8355100] preset usage: -vpre <speed> -vpre <profile> [libx264 @ 0x8355100] speed presets are listed in x264 --help [libx264 @ 0x8355100] profile is optional; x264 defaults to high Output #0, avi, to 'hoge.avi': Stream #0.0: Video: libx264, yuv420p, 720x480 [PAR 8:9 DAR 4:3], q=2-31, 500 kb/s, 90k tbn, 29.97 tbc Stream mapping: Stream #0.0 -> #0.0 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
などというエラーを吐く.