关于 ffmpeg 更新 libavformat57 之后的问题

苏姐及各位大大好:
原本的问题是来自于 [已解决]ffmpeg 要如何分割 mp4 视频文件 ,经过苏姐释疑之后,使用
zypper install --from packman libavformat57
的作法重新安装 libavformat57 ,但是结果使用命令测试

ffmpeg -i test.mp4 test2.avi

出现了以下的状况:

 libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
ffmpeg: relocation error: /usr/lib64/libavformat.so.57: symbol avpriv_dnxhd_parse_header_prefix, version LIBAVCODEC_57 not defined in file libavcodec.so.57 with link time reference

然后我移除了 ffmpeg ,并且重新使用
zypper install --from packman ffmpeg
的方式安装了 ffmpeg,但结果依然。
想请教下问题出在哪?以及该如何解决?

建议你把所有 ffmpeg 相关的包都换成 packman 源的,设置源的时候最好也设置 packman 源优先级高于官方源的优先级。

哈哈,symbol error 是由于没有完全切换到 packman 或者 packman 软件包的版本不一致(比如一部分更新了,另一部分没更新)导致的。它那个重定位错误是告诉你,libavformat57 需要的一个 symbol 是 libavcodec57 中没有定义,因此链接外部库的时候无法引用的。就是它们两个不是一次编译出来的,甚至不是在一个地方编译出来的,ABI 不兼容。

好在我已经考虑到了这种情况,你去跑一下我那个 pkmswitch100 工具吧。

感谢苏姐做了这么好的工具~

我的 ruby 版本是:

ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux-gnu]

不过按照苏姐提供的说明,我使用了之后,有下面的状况:

Close this application before trying again.
System management is locked by the application with pid 23986 (zypper).
Close this application before trying again.
System management is locked by the application with pid 23986 (zypper).
Close this application before trying again.
======================= Packages not from Packman =========================
Good! All packages are from Packman!
======================= Packman Packages need updates =====================
libavcodec57

FIX: Run 'sudo zypper up libavcodec57'.

是会一直出现因为 zypper 运行而干扰,但是我检查了,确实 zypper 没有在运作。
不过按照提示更新完 libavcodec57 之后,终于一切顺利了~~~ :sunglasses: ,感谢苏姐~~