ffmpeg编译

1,041 阅读2分钟

环境介绍

win10 + wsl(ubuntu系统)

简单编译

./configure \
	--prefix=/usr/local/ffmpeg \
	--disable-x86asm \
	--disable-stripping
make -j 8
make install
make examples

和大部分开源软件类似,ffmpeg的编译命令很简单。
--disable-x86asm是因为执行下面的命令报错

# ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

--disable-stripping可以保留so和exe中的符号表方便看堆栈和调试等,但同时会增加文件大小。
执行上面的命令完成后,就编译安装完成了。

doc/examples中的简单例子

make examples可以编译doc/examples中的例子程序。

输出ffmpeg的log

doc/examples/avio_reading.c一个解析不同视频封装格式的程序为例,添加

int main(int argc, char *argv[])
{
	...
    av_log_set_level(AV_LOG_TRACE);    // 设置详细的log级别
    av_log_set_callback(&callback_log);  // 设置log回调函数
    ...
}
    
// 自定义的log回调函数
static void callback_log(void*avcl, int level, const char*fmt, va_list vl)
{
    char infos[2048];
    vsnprintf((char *) infos, 2048, fmt, vl);

  #if defined(__ANDROID__)
    __android_log_print(gLevel[level],tag,"<%p,%s,%s,%d>%s",pThis,file,fun,line,infos);
  #else
    printf("[ffmpeg] <%p> %s\n",avcl, infos);
  #endif
}

执行即可看到log输出

# ./avio_reading /worker/video/c.mp4  |head -10
ptr:0x7f24f798a000 size:89112
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mov,mp4,m4a,3gp,3g2,mj2 score:100 size:2048

[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mp3 score:1 size:2048

[ffmpeg] <0x7fffe2aff040> <format.c av_probe_input_buffer2 290> Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100

[ffmpeg] <0x7fffe2aff040> <mov.c mov_read_default 6839> type:'ftyp' parent:'root' sz: 32 8 9223372036854775807

[ffmpeg] <0x7fffe2aff040> <mov.c mov_read_ftyp 1113> ISO: File Type Major Brand: isom
root@PF1YTXHH-ZTB:/worker/opensourcecode/ffmpeg-4.2.2/doc/examples# ./avio_reading /worker/video/c.mp4  |head -20
ptr:0x7f01ae6ca000 size:89112
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mov,mp4,m4a,3gp,3g2,mj2 score:100 size:2048

[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mp3 score:1 size:2048

[ffmpeg] <0x7ffff1ed5040> <format.c av_probe_input_buffer2 290> Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100

[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'ftyp' parent:'root' sz: 32 8 9223372036854775807

[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_ftyp 1113> ISO: File Type Major Brand: isom

[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'free' parent:'root' sz: 8 40 9223372036854775807

[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'mdat' parent:'root' sz: 86493 48 9223372036854775807

ffmpeg默认不输出文件名、函数名、行号的,需要修改log模块,下面给出修改的文件,具体的修改方法再次不做叙述。

./libavutil/log.h
./libavutil/log.c