在 Ubuntu 10.04 服务器上,我使用 apt 安装了 ffmpeg 包。之后 ffmpeg 就可以正常工作了。差不多了。
为了测试,我上传了一些音频文件。其中一个 aif 文件没有被正确解释。在我的主力机(Mac SnowLeopard)上,ffmpeg 告诉格式为
Stream #0.0: Audio: pcm_s24be, 44100 Hz, 2 channels, s32, 2116 kb/s
我的 Ubuntu 服务器显示:
Stream #0.0: Audio: pcm_s24be, 44100 Hz, stereo, s16, 2116 kb/s
这是错误的位深度。Ubuntu 无法转换文件并显示错误消息
[pcm_s24be @ 0xcd4b580]invalid PCM packet
Error while decoding stream #0.0
这当然不是事实。该文件完全有效。
ffmpeg 解释 aif 格式时是否存在任何已知问题?如何才能知道 ffmpeg 使用的是哪个版本的 aif-codec?有什么方法可以解决这个问题吗?
ffprobe 输出:
FFprobe version SVN-r20090707, Copyright (c) 2007-2009 Stefano Sabatini
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 1
libavformat 52.31. 0 / 52.31. 0
built on Jan 20 2010 00:13:01, gcc: 4.4.3 20100116 (prerelease)
Input #0, aiff, from 'testfile.aif':
Duration: 00:00:04.00, start: 0.000000, bitrate: 2117 kb/s
Stream #0.0: Audio: pcm_s24be, 44100 Hz, stereo, s16, 2116 kb/s
更新 2:使用 -sample_fmt s32 强制转换不会改变任何东西。
奇怪的是:即使不使用 -sample_fmt s32,我也意识到转换正在运行并创建了有效的音频文件。只是上面有错误消息。
答案1
是的。根据 ffmpeg 用户组的信息,ffmpeg 和 libav 的维护者之间一直在进行“战争”。Ubuntu 开发团队中的某些人似乎站在了 libav 一边,故意为 ffmpeg 提供损坏的软件包。
不知道这是否都是真的,但至少我知道使用 apt 安装 ffmpeg 不起作用,而从源代码构建则起作用。
该主题的摘要可以在这里找到:
http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html
尽管这只是故事的 ffmpeg 方面。