我用来mencoder
捕捉来自安可 ENLTV-FM3视频捕获设备。我最近注意到,自一周前由于断电而强制重启机器以来,所有录音都略有失真,播放速度也比应有的速度慢。
我将问题缩小到以下命令行:
$ time mencoder -really-quiet -tv driver=v4l2:device=/dev/video1:chanlist=us-cable:audiorate=32000:alsa:adevice=hw.1:input=0:amode=1:normid=11 -endpos 00:10:00 -ovc copy -oac pcm -of rawaudio -o test-32000.wav tv://69
real 9m54.886s
user 0m5.536s
sys 0m1.740s
$ ls -l test-32000.wav
-rw-r--r--@ 1 martin martin 76800000 Mar 15 17:20 test-32000.wav
不知怎么的,竟然mencode
能在 9 分 55 秒内精确收集到 10 分钟的原始音频。这在物理上是不可能的,除非捕获设备的 A/D 转换器“超频”。除了硬件故障,我想不出任何其他解释。会这样吗?会不会是断电时有东西烧坏了,导致捕获设备的内部时钟失灵?
自从机器重新启动以来,我还注意到dmesg
充斥着如下条目:
CE: hpet increased min_delta_ns to XXX nsec
这似乎表明计算机的高精度事件计时器不知何故不同步。这与音频问题有关吗?音频转换器的采样率是否与 HPET 有关?我完全搞不懂。有人遇到过类似的事情吗?
答案1
您提供的信息很少。这没什么帮助。您应该提供:
- 内核版本
- 有任何定制吗?.mplayer/config 是什么
- min_delta_ns 是什么?
- cat /proc/timer_list 的输出是什么
根据这些有限的信息,我做出了以下猜测:
以下之一或其组合:
- 更新已应用到您的机器
- mplayer 使用 RTC 而不是 hpet 。
- min_delta_ns 大于 3.000.000 纳秒
我认为 mplayer 使用 RTC 是最可能的情况。尝试在编码和播放期间附加到您的选项中:
-rtc-device /dev/hpet
尝试在编码和播放期间强制执行。
如果这仍然不能解决问题,请尝试使用
-rtc-device /dev/rtc
但这确实不符合我对你的问题的看法。
答案2
您已设置 audiorate=32000,您确定它正常工作吗?卡是否真的切换到 32kHz 采样率?输出文件是 32kHz 吗?如果您尝试 audiorate=33075(这似乎是 22050 和 44100 之间的下一个合乎逻辑的步骤),会发生什么。
这可能是固件问题,或者是硬件中某些未正确初始化的异常,但正常关机 + 关闭电源然后重新启动应该可以解决这个问题。
否则,您可能必须删除 -really-quiet 并查看是否显示任何有用的警告。