プログラミング > FFmpeg > コンパイル


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

FFmpegコンパイル


FFmpegのコンパイルとついでにデバッグについて


コンパイルと実行

  • 今回バージョンは、0.5を使いました。
  • コンパイルは、
    $ wget http://ffmpeg.org/releases/ffmpeg-0.5.tar.bz2
    $ bzip2 -dc ffmpeg-0.5.tar.bz2 | tar xvf -
    $ cd ffmpeg-0.5/
    $ ./configure
    $ make 
    
  • 実行(test.mpgをBMPへエンコードする場合)は、
    $ ./ffmpeg -i "test.mpg" -vcodec bmp "%05d.bmp"
    

configureオプションによる違い

  • 特にFFmpegをデバッグする際に必要なconfigureオプションについて確認しておきます。
  • 何もつけず
    $ ./configure
    $ make
    ...
    gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -fomit-frame-pointer -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -O3 -fno-math-errno -fno-signed-zeros       -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c
    ...
    gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl
    cp -p ffmpeg_g ffmpeg
    strip ffmpeg
    ...
    
  • --disable-optimizations
    $ ./configure --disable-optimizations
    $ make
    ...
    gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -fno-math-errno -fno-signed-zeros       -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c
    ...
    gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl
    cp -p ffmpeg_g ffmpeg
    strip ffmpeg
    ...
    
    • コンパイル時にO3とfomit-frame-pointerがつかなくなる。
  • --disable-optimizations --disable-stripping
    $ ./configure --disable-optimizations --disable-stripping
    $ make
    ...
    gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -fno-math-errno -fno-signed-zeros       -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c
    ...
    gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl
    cp -p ffmpeg_g ffmpeg
    echo ignoring strip ffmpeg
    ...
    
    • ffmpegにstrip(シンボルの削除)が行われなくなる。

デバッグ

  • emacsでgdbを使うと楽です。
  • M-x gdbで以下のようにffmpegを指定します。
    Run gdb (like this): gdb --annotate=3 ffmpeg
    
  • main関数にブレークポイントを張っておきます。
    b main
    
  • デバッグを始めるには、以下のコマンドを入力します。
    r -i "test.mpg" -vcodec bmp "%05d.bmp"