让 mplayer 以小时和分钟显示当前时间

让 mplayer 以小时和分钟显示当前时间

默认情况下,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

  1. 当前时间
  2. 当前时间/总时间 (作用类似-osdlevel 3)
  3. OSD 已启用(尚无时间显示,但按是允许的)
  4. OSD 已禁用(按不会做任何事)

不知什么原因,-novideo仍然接受o键,只介绍 2 个状态,即启用 OSD 和禁用 OSD。如果按o启用 OSD,然后按并且它会显示00:00:00/总时间

答案2

我自己的解决方案最终是切换到名为 mpv 的 mplayer 分支,默认情况下,它可以更合理地处理实时终端时间显示。看来 mplayer 的开发已经完全停滞不前,因此 mpv 现在在各个方面都表现得更好。它已成为我的主要媒体播放器。

相关内容