ffmpeg编译错误

ffmpeg compilation Error

我一直在尝试在我的 raspberry-pi 上编译 ffmpeg,但它给了我很多警告,例如(编解码器已弃用),尤其是在 运行 sudo make 时。

 pi@raspberrypi:/usr/src/ffmpeg $ sudo make && sudo make install

....... lots of successful execution here ...... 


CC  libavfilter/avf_showfreqs.o
libavfilter/lavfutils.c: In function ‘ff_load_image’:
libavfilter/lavfutils.c:53:5: warning: ‘codec’ is deprecated (declared at    ./libavformat/avformat.h:880) [-Wdeprecated-declarations]
 codec_ctx = format_ctx->streams[0]->codec;
 ^
libavfilter/lavfutils.c:79:5: warning: ‘avcodec_decode_video2’ is deprecated   (declared at ./libavcodec/avcodec.h:4763) [-Wdeprecated-declarations]
 ret = avcodec_decode_video2(codec_ctx, frame, &frame_decoded, &pkt);
 ^
CC  libavfilter/lswsutils.o
CC  libavfilter/opencl_allkernels.o
CC  libavfilter/pthread.o
CC  libavfilter/setpts.o
CC  libavfilter/settb.o
CC  libavfilter/split.o
CC  libavfilter/src_movie.o
libavfilter/src_movie.c: In function ‘movie_push_frame’:
libavfilter/src_movie.c:524:9: warning: ‘avcodec_decode_video2’ is deprecated (declared at ./libavcodec/avcodec.h:4763) [-Wdeprecated-declarations]
     ret = avcodec_decode_video2(st->codec_ctx, frame, &got_frame, pkt);
     ^
libavfilter/src_movie.c:527:9: warning: ‘avcodec_decode_audio4’ is deprecated (declared at ./libavcodec/avcodec.h:4714) [-Wdeprecated-declarations]
     ret = avcodec_decode_audio4(st->codec_ctx, frame, &got_frame, pkt);
     ^
CC  libavfilter/transform.o
CC  libavfilter/trim.o
CC  libavfilter/vaf_spectrumsynth.o
libavfilter/vaf_spectrumsynth.c: In function ‘try_push_frame’:
libavfilter/vaf_spectrumsynth.c:370:19: warning: variable ‘ret’ set but not used [-Wunused-but-set-variable]
 int ch, n, i, ret;                 ^
CC  libavfilter/vf_alphamerge.o
CC  libavfilter/vf_aspect.o
CC  libavfilter/vf_atadenoise.o
CC  libavfilter/vf_colorlevels.o
CC  libavfilter/vf_colorspace.o
libavfilter/vf_colorspace.c: In function ‘fill_rgb2xyz_table’:
libavfilter/vf_colorspace.c:360:22: warning: passing argument 1 of ‘invert_matrix3x3’ from incompatible pointer type
 invert_matrix3x3(rgb2xyz, i);
                  ^
libavfilter/vf_colorspace.c:277:13: note: expected ‘const double (*)[3]’ but argument is of type ‘double (*)[3]’
 static void invert_matrix3x3(const double in[3][3], double out[3][3])
         ^
libavfilter/vf_colorspace.c: In function ‘fill_whitepoint_conv_table’:
libavfilter/vf_colorspace.c:424:21: warning: passing argument 3 of ‘mul3x3’   from incompatible pointer type
 mul3x3(tmp, ma, fac);
libavfilter/vf_colorspace.c:376:13: note: expected ‘const double (*)[3]’ but argument is of type ‘double (*)[3]’
static void mul3x3(double dst[3][3], const double src1[3][3], const double src2[3][3])
         ^
libavfilter/vf_colorspace.c:425:17: warning: passing argument 2 of ‘mul3x3’ from incompatible pointer type
 mul3x3(out, tmp, mai);
             ^
libavfilter/vf_colorspace.c:376:13: note: expected ‘const double (*)[3]’ but argument is of type ‘double (*)[3]’
static void mul3x3(double dst[3][3], const double src1[3][3], const double src2[3][3])
         ^
libavfilter/vf_colorspace.c:425:22: warning: passing argument 3 of ‘mul3x3’ from incompatible pointer type
 mul3x3(out, tmp, mai);
                  ^
libavfilter/vf_colorspace.c:376:13: note: expected ‘const double (*)[3]’ but argument is of type ‘double (*)[3]’
static void mul3x3(double dst[3][3], const double src1[3][3], const double src2[3][3])
         ^
libavfilter/vf_colorspace.c: In function ‘convert’:
libavfilter/vf_colorspace.c:480:20: warning: passing argument 7 of ‘s->yuv2yuv’ from incompatible pointer type
                s->yuv2yuv_coeffs, s->yuv_offset);
                ^
libavfilter/vf_colorspace.c:480:20: note: expected ‘const int16_t (*)[3][8]’ but argument is of type ‘int16_t (*)[3][8]’
libavfilter/vf_colorspace.c:480:39: warning: passing argument 8 of ‘s->yuv2yuv’ from incompatible pointer type
                s->yuv2yuv_coeffs, s->yuv_offset);
                                   ^
libavfilter/vf_colorspace.c:480:39: note: expected ‘const int16_t (*)[8]’ but argument is of type ‘int16_t (*)[8]’
libavfilter/vf_colorspace.c:502:20: warning: passing argument 7 of ‘s->yuv2rgb’ from incompatible pointer type
                s->yuv2rgb_coeffs, s->yuv_offset[0]);
                ^
libavfilter/vf_colorspace.c:502:20: note: expected ‘const int16_t (*)[3][8]’ but argument is of type ‘int16_t (*)[3][8]’
libavfilter/vf_colorspace.c:506:62: warning: passing argument 5 of ‘s->dsp.multiply3x3’ from incompatible pointer type
             s->dsp.multiply3x3(rgb, s->rgb_stride, w, h, s->lrgb2lrgb_coeffs);
                                                          ^
libavfilter/vf_colorspace.c:506:62: note: expected ‘const int16_t (*)[3][8]’ but argument is of type ‘int16_t (*)[3][8]’
libavfilter/vf_colorspace.c:511:28: warning: passing argument 7 of ‘s->rgb2yuv_fsb’ from incompatible pointer type
                        s->rgb2yuv_coeffs, s->yuv_offset[1], s->dither_scratch);
                        ^
libavfilter/vf_colorspace.c:511:28: note: expected ‘const int16_t (*)[3][8]’ but argument is of type ‘int16_t (*)[3][8]’
libavfilter/vf_colorspace.c:514:24: warning: passing argument 7 of ‘s->rgb2yuv’ from incompatible pointer type
                    s->rgb2yuv_coeffs, s->yuv_offset[1]);
                    ^
libavfilter/vf_colorspace.c:514:24: note: expected ‘const int16_t (*)[3][8]’ but argument is of type ‘int16_t (*)[3][8]’
libavfilter/vf_colorspace.c: In function ‘create_filtergraph’:
libavfilter/vf_colorspace.c:614:30: warning: passing argument 1 of ‘invert_matrix3x3’ from incompatible pointer type

                 ^

而且还在继续....

如何解决?此警告可能有什么问题?

首先,不要以 root 身份编译

您应该 运行 make 作为您的普通用户,没有 sudo

只有 运行 sudo make install 如果您安装在 root 拥有的位置(例如 /usr/usr/local)。


至于你的问题,警告似乎来自 ffmpeg 代码,而不是你通过编译完成的。

可能是因为您使用的 gcc 比 ffmpeg 开发人员更新,并且您的新版本报告了过去认为正常的内容的警告。或者可能是您使用了一些打开某些警告的 g​​cc 选项,而 ffmpeg 开发人员关闭了这些选项。或者可能是 ffmpeg 在编译时也看到了这些警告,并决定忽略它们。

但这些只是警告,即编译器告诉您 « 这有问题,您可能想检查一下,但它可能没问题 »。因此,除非您确定实际问题,否则您可以忽略它们,或者向上游发送一个补丁,以警告消失的方式更改代码(当然,代码仍然正确)。

例如,我看到 warning: variable ‘ret’ set but not used [-Wunused-but-set-variable] 的实例。好吧,您可以向上游发送一个删除该变量定义的补丁,这样一来,一个警告就会消失。 :)

虽然你提供的输出没有错误,所以我假设你的编译成功了,你现在很高兴地使用你新构建的 ffmpeg。

或者您没有在此处粘贴的实际错误?