mpvでプレイリストのランダムな瞬間に再生を開始するには?

mpvでプレイリストのランダムな瞬間に再生を開始するには?

mpvあります--startスキップ時間(秒)を提供できるスイッチです。これにより、単一のファイル内でランダムに再生を開始できます。

しかも--shuffleこれにより、指定されたプレイリストからランダムなファイルの再生を開始できます。

私は2つを組み合わせます:

  1. 任意のファイルを選択して
  2. ファイル内の任意の瞬間に再生を開始

次のコマンドラインを使用してください。

mpv --shuffle --start $POSITION --playlist=/tmp/list.m3u

質問

ただし、--startリストの後半にある各ファイルもこのパラメータを考慮し、そのファイルの最初のX秒もスキップします。私はそれをしたくありません。

私が試したこと

現在、私はmpvそれを順番に2回呼び出していますが、これは醜いです。

質問

--start再生された最初のファイルにのみ影響を与える方法はありますか?

あるいは、より良い方法は、ランダムプレイリストから完全にランダムな瞬間にmpvを取得することです。したがって、リストが123分の場合、ファイルの長さに関係なく31分13秒で始まります。

ベストアンサー1

ソケットを使用すると、バックグラウンドで一時停止した状態でプレーヤーを起動できます。

# with playlist
mpv --shuffle --pause --input-ipc-server=/tmp/mpvsocket test.m3u &

# without playlist, load a playlist
mpv --shuffle --pause --idle=yes --input-ipc-server=/tmp/mpvsocket &
echo '{ "command": [ "loadfile", "test.m3u" ] }' | socat - /tmp/mpvsocket

次に、現在のタイトルの開始位置を探します。 (長さより長い場合は、次のタイトルの開始位置にジャンプします。)

# seek 100s forward (relative)
echo '{ "command": [ "seek", "+100" ] }' | socat - /tmp/mpvsocket

# seek to 1:30 (absolute)
echo '{ "command": [ "seek", "1:30", "absolute" ] }' | socat - /tmp/mpvsocket

プレーヤーの一時停止を解除します。

echo '{ "command": [ "set_property", "pause", false ] }' | socat - /tmp/mpvsocket

mpvplay.sh以下は、任意の場所で最初のタイトルを探し、上記のコマンドを含む小さなbashスクリプトです。socatjqおよび以下が必要ですshuf

# start player in background
mpv --shuffle --pause --input-ipc-server=/tmp/mpvsocket "$@" &

# wait until socket exists
while [ ! -S /tmp/mpvsocket ]; do :; done

sleep 0.5 # hack: wait a little longer

# get duration of current title in seconds with fractional part, save as integer
duration=$(echo '{ "command": ["get_property", "duration"] }' | socat - /tmp/mpvsocket |
    jq -r '.data | floor')
echo "title duration: $duration"

# get random start position of title
duration=$(shuf -n1 -i0-"$duration")
echo "random seek: $duration"

# seek to position
echo '{ "command": [ "seek", "+'"$duration"'" ] }' | socat - /tmp/mpvsocket

# unpause player
echo '{ "command": [ "set_property", "pause", false ] }' | socat - /tmp/mpvsocket

# player to foreground
fg

プレイリストをパラメータとして使用してスクリプトをインポートします。

. ./mpvplay.sh playlist.m3u

おすすめ記事