苏姐及各位大大好:
原本的问题是来自于 [已解决]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 源优先级高于官方源的优先级。
嗯,想把一些想法实现了…目前主要有以下三个:
installed packages,instdpkg 想要解决这么一个情境:我就更新了一下,就不能用了。我也不知道/忘了更新过什么。其实 zypper 的 log 一直都存着,只是许多人不会看(能这么提问自然不会看日志的居多)。
主要结构就是一个 filter + parser,按日期和时间把那次操作安装的包筛选出来,然后用漂亮的格式显示在终端上面。结合下面要说一个想法到时甚至能把文件变动都找出来。
这样不但方便了用户(提供信息更加靠谱),也方便了帮忙的人(更稳了,也不用肉眼去筛日志了)。
packman switcher,pkmswch 想要解决的情境是:我把解码器包切到 packman 源了,但是可能没有切换完全,造成比如之前解决过的一个问题那样,ffmpeg 能剪切视频但是因为用的 oss 的 libavformat57 导致不能封装成 mp4。这样的问题很难调试,尤其在用户言之凿凿地告诉你他用的就是 packman 的包时。一个 pkmswch 甩过去,全知道了。
做起来也挺方便的,就是把 oss 里对应包的版本找出来,只要 release number 一样就可以判断是同一个包啦(在 packman 编译和 obs 编译出的包的 release number 鲜有相同)
tw-wayback,wayback 想要解决的事情就是,给 openSUSE_Tumbleweed 加一个 rollback machine。但要足够简单,像 Arch Linux Archive 那样的是不行的,因为第一没有服务器,第二运维的工作量太大。
目前的想法是做一个在服务区和本地都能跑的。目标是在本地存储的东西尽量少。想法是先存一下 tumbleweed 的 metadata,里面包括了那个基准版本的源里所有软件的版本号,下次 tw 更新时(这个没必要做 watchdog,因为用户自行运行的话,只需要现在所用系统的关键软件的版本号,也就是说,他升级完了自己存一份 metadata 就行了,服务器另当别论),再下一份最新的 metadata,与老的比较,把更新的软件筛出来,然后利用 deltarpm 工具做一个可以用它把新版本降为老版本的差值rpm,保存即可。tw 每次更新都不大,所以存储空间应该也不大。
这样,某个包出问题就可以回退,甚至直接回滚到上一个版本的 tumbleweed。当然用 snapper 更好一些,可是不是每个人都会用也不是每个人都有 btrfs 分区。
从我的 iPhone 发送,使用 Tapatalk
哈哈,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 之后,终于一切顺利了~~~ ,感谢苏姐~~