web-dev-qa-db-ja.com

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.

誰かがこれを行う方法を考え出しましたか?

4

Mplayerのソースコードを見てみましょうmplayer.c

_...
// 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)のみですが、audio-onlyはsadd_hhmmssf()を呼び出し、hh:mm:ss形式をstdoutに出力します。しかし、_mpctx->sh_audio && sh_video_であるのに対し、オーディオ+ビデオはそうではありません。

したがって、_-novideo_オプションを指定してmplayerコマンドを呼び出すと、hh:mm:ss形式が含まれます。

_[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
      ...
_

これは、[〜#〜] p [〜#〜]を押すと、現在の時間/合計時間がオンザフライで切り替わるか、_mplayer -osdlevel 3 file_現在の時間/合計時間を一貫して表示するには: enter image description here

[更新]

oを押し続けると、4つの状態があることに注意してください。

  1. 現在の時刻
  2. 現在の時間/合計時間(_-osdlevel 3_のように機能します)
  3. OSDが有効になっています(時間はまだ表示されていませんが、[〜#〜] p [〜#〜]を押すと許可されます)
  4. OSDが無効になっています([〜#〜] p [〜#〜]を押しても何も起こりません)

理由は不明ですが、_-novideo_は引き続きoキーを受け入れ、2つの状態、つまり有効なOSDと無効なOSDのみを導入します。 oを押してOSDを有効にしてから、[〜#〜] p [〜#〜]を押すとバグが発生しますそしてそれは00:00:00 /合計時間を表示します。

3
林果皞

私自身の解決策は、mpvと呼ばれるmplayerフォークへの切り替えでした。これは、デフォルトでリアルタイムのターミナル時間表示をはるかに賢明に処理します。深刻なmplayerの開発は完全に停滞しているようです。したがって、mpvは考えられるあらゆる点で優れています。それは私の主要なメディアプレーヤーになりました。

0