默认情况下,mplayer 以秒为单位显示视频中的当前位置,这毫无用处。例如:
A:4086.2 V:4086.2 A-V: 0.000 ct: 0.039 0/ 0 17% 2% 2.1% 3 0
^--------^----- This is the current location in seconds.
好吧,那又怎么样?Mplayer 的默认设置很糟糕。还有什么新东西?但是 mplayer 的配置非常高,甚至到了最后的细节,所以一定有办法更改该行并将您想要的任何信息放在那里。不过,我仔细检查了手册页,找不到可以做到这一点的选项。理想的行为:
A:1:08:06.2 V:1:08:06.2 A-V: 0.000 ct: 0.039 0/ 0 17% 2% 2.1% 3 0
^-----------^----- This is the current location in hours:minutes:seconds.
有人想过这样做的办法吗?
答案1
我们来看看mplayer的源代码,播放器:
...
// Audio time
if (mpctx->sh_audio) {
saddf(line, &pos, width, "A:%6.1f ", a_pos);
if (!sh_video) {
float len = demuxer_get_time_length(mpctx->demuxer);
saddf(line, &pos, width, "(");
sadd_hhmmssf(line, &pos, width, a_pos);
saddf(line, &pos, width, ") of %.1f (", len);
sadd_hhmmssf(line, &pos, width, len);
saddf(line, &pos, width, ") ");
}
}
// Video time
if (sh_video)
saddf(line, &pos, width, "V:%6.1f ", sh_video->pts);
// A-V sync
if (mpctx->sh_audio && sh_video)
saddf(line, &pos, width, "A-V:%7.3f ct:%7.3f ", a_v, corr);
...
正如你所看到的,只有if (mpctx->sh_audio) AND if (!sh_video)
音频才会调用,sadd_hhmmssf()
才会打印时:分:秒格式化为 stdout。但是mpctx->sh_audio && sh_video
音频+视频则不会。
因此,如果您使用选项调用mplayer
命令-novideo
,它将包括时:分:秒格式:
[xiaobai@xiaobai example]$ mplayer -novideo example.mkv
MPlayer SVN-r37391-5.1.1 (C) 2000-2015 MPlayer Team
...
Video: no video
Position: 58 %
A: 90.5 (01:30.4) of 145.4 (02:25.4) 0.0%
[MPlayer-dev-eng] [PATCH] 纯音频文件的总时间解释了仅音频的由来:
附加的补丁使 MPlayer 在状态行中显示音频文件的总时间。我认为这对音频文件很有用,因为
1)状态行仍然很小
2)您不能直接激活 OSD 来查看总时间
从这个解释中,我们知道可以激活OSD来实现同样的目的。所以现在只需阅读man mplayer
并搜索OSD关键字:
...
o
Toggle OSD states: none / seek / seek + timer / seek + timer + total time.
...
P
Show progression bar, elapsed time and total duration on the OSD.
...
-osdlevel <0-3> (MPlayer only)
Specifies which mode the OSD should start in.
0 subtitles only
1 volume + seek (default)
2 volume + seek + timer + percentage
3 volume + seek + timer + percentage + total time
...
这意味着磷将动态切换当前时间/总时间,或调用mplayer -osdlevel 3 file
以一致显示当前时间/总时间:
[更新]
请记住,如果你连续按下o:
- 当前时间
- 当前时间/总时间 (作用类似
-osdlevel 3
) - OSD 已启用(尚无时间显示,但按磷是允许的)
- OSD 已禁用(按磷不会做任何事)
不知什么原因,-novideo
仍然接受o键,只介绍 2 个状态,即启用 OSD 和禁用 OSD。如果按o启用 OSD,然后按磷并且它会显示00:00:00/总时间。
答案2
我自己的解决方案最终是切换到名为 mpv 的 mplayer 分支,默认情况下,它可以更合理地处理实时终端时间显示。看来 mplayer 的开发已经完全停滞不前,因此 mpv 现在在各个方面都表现得更好。它已成为我的主要媒体播放器。