
にmpv
あります--start
スキップ時間(秒)を提供できるスイッチです。これにより、単一のファイル内でランダムに再生を開始できます。
しかも--shuffle
これにより、指定されたプレイリストからランダムなファイルの再生を開始できます。
私は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スクリプトです。socat
、jq
および以下が必要です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
答え2
プレイリストファイルの時間オフセットにM3Uコマンドを使用する
プレイリストが次の場所にあるとしましょう。M3Uフォーマット次のようないくつかのオーディオファイルが含まれています。M3U実施例1ウィキペディアで:
#EXTM3U
#EXTINF:123, Sample artist - Sample title
C:\Documents and Settings\I\My Music\Sample.mp3
#EXTINF:321,Example Artist - Example title
C:\Documents and Settings\I\My Music\Greatest Hits\Example.ogg
その後、プレイリスト(ファイルごとではない)に一度適用される開始オフセットを追加できます。拡張M3U命令時間オフセットの場合#EXT-X-START: TIME-OFFSET=0
、どこ
TIME-OFFSETの値は、符号付き10進浮動小数点数の秒数です。
プレイリストに時間オフセットを挿入する
2行目に与えられた環境変数と共にオフセットディレクティブを挿入するには、$POSITION
次のようにします。sedコマンドラインから:
sed "2 i #EXT-X-START: TIME-OFFSET=$POSITION" /tmp/list.m3u
これにより、時間オフセット秒などのカスタム時間オフセット位置が適用された変更されたプレイリストが作成されます1873
。
#EXTM3U
#EXT-X-START: TIME-OFFSET=1873
#EXTINF:123, Sample artist - Sample title
C:\Documents and Settings\I\My Music\Sample.mp3
#EXTINF:321,Example Artist - Example title
C:\Documents and Settings\I\My Music\Greatest Hits\Example.ogg
オーディオプレーヤーを使用してプレイリストを起動するとき。ユーティリティ車両目的のオフセット1873
秒に直接移動する必要があります。
したがって、リストが123分の場合、31分13秒から始まります。