web-dev-qa-db-ja.com

現在mplayerで再生されているMP3ファイルを削除することはできますか?

現在mplayerで再生されているMP3ファイルを削除したいと思います。可能であれば、mplayerコマンドを使用して実行したいと思います。そのため、mplayerを終了してこのファイルをrmで削除したり、別のターミナルを開いてそこでファイルを削除したりする必要はありません。

4
mabalenk

はい、可能で簡単です。以下の修正バージョンを使用して、メディアコレクションをキュレート/プルーニングします。

(1)次のbashスクリプト(rmplaying.sh)を保存します

#/bin/bash
# rmplaying.sh
# only works when exactly 1 instance of mplayer is running
function playing {
PID=`pidof mplayer`
WHICH=`which mplayer`
if [ $PID ]; then
    lsof -p $PID | awk '{ if ($5=="REG" && $4!="mem" && $9)print $0 }' | grep -v "$WHICH" | grep -oP '\/.*'
fi
}

FILE="$(playing)"
echo "file: $FILE"
if [ "$FILE" ]; then
  rm "$FILE" && echo "Removed '$FILE'"
fi

(2)実行を許可する権限を設定します

chmod +x rmplaying.sh

(3)ファイル「〜/ .mplayer/input.conf」を編集または作成し、行を追加します

Ctrl+d run "/path/to/rmplaying.sh"

それでおしまい。

テストするには、mplayerを使用してファイルを再生し、「Ctrl + d」を押します。ファイルは「rm」コマンドで削除されますが、メディアは引き続き再生されます。

ターミナルウィンドウからmplayerを起動した場合は、「Removed '/ path/to/media/file.mp3'」というメッセージが表示されます。ターミナルを使用して起動しなかった場合は、ファイルがディレクトリから削除されたことを確認してください。

*さらにカスタマイズするために、playing()関数を独自のユーティリティスクリプトに移動します

3
lkchoi

ファイルを削除することはできません。ユーザーができる唯一のことは、ディレクトリからファイル名を削除する unlink(2) (たとえば、 rm(1) を使用)を呼び出すことです。その結果、ハードリンクカウンターがデクリメントされます。ハードリンクカウンターがゼロに達し、このファイルのファイルハンドルを開いているアプリケーションがない場合にのみ、オペレーティングシステムはファイルを削除します。

mplayerでファイルを再生するため、開いているファイルハンドルがあり、ファイルを削除することはできません。 unlink(2) システムコールは、それでも成功するはずです。実際には、これはファイルで rm(1) を呼び出すことができることを意味しますが、mplayerを終了するまでスペースを解放することを期待しないでください。

3
Marco

これを解決するために、ファイル~/.mplayer/input.confに次の行を追加しました。

DEL run "rm '${path}'"

これにより、mplayerのdeleteキーは、mplayerが現在再生しているファイルの完全なパスでシェルコマンドrmを実行します。

${path}の部分はmplayer自体に置き換えられていることに注意してください。${path}notシェル変数の補間です。

ただし、残念ながら、mplayerがコマンドの実行にシェルの使用を主張しているという事実は、慎重に作成されたファイル名を削除すると、任意のシェルコードが実行される可能性があることを意味します。それを避けるためのアイデアは大歓迎です。

また、ファイルのパスにスペースを入れてこれを機能させるには一重引用符が重要ですが、名前に一重引用符が含まれているファイルでは機能しなくなります。

また、これにはシェルスクリプトやlsofをいじる必要がないため、UNIXオペレーティングシステムで実行し、同時に実行されているmplayerの複数のインスタンスで動作する必要があることにも注意してください。

正確なコマンドのドキュメントは、mplayerの スレーブモードのドキュメント にあります。

1
ndim

まず第一に、あなたはただtryそれを見てみませんか?とにかく、mplayer自体から削除することはおそらく不可能ですが、なぜメディアプレーヤーにファイル操作機能があるのでしょうか。これは、acroreadを使用してファイルをコピーできるかどうかを尋ねるようなものです。

再生中にファイルを削除しても問題はありません。ファイルはプログラムが開くとすぐにRAMにコピーされ、問題なくハードディスクからファイルを削除できます(mplayerを使用してこれをチェックしただけです)。Windowsはあなたを好きではありません。私が正しく覚えていればそれをしますが、Linuxでこの動作に遭遇したことはありません。

0
terdon

lkchoiとndimのソリューションは私にはうまくいきませんでした。

そこで、「Cesar」と呼ばれるシステムを作成します。曲が悪い場合は削除し、別のフォルダーに移動するのが良い場合は削除します。

これは、オーディオを選択するときに役立ちます。たとえば、重要な録音であるWhatAppバックアップですか。

私も使用した巨大なヘアメタルパッケージで曲をフィルタリングするのは簡単です。

mplayer */*/*3 | sed "s@Playing \(.*\).\$@\nrm \"\1\"\nmv \"\1\" ../saved\n@"

mplayerは「再生中」+曲名+ファイル拡張子+ダムドットをエコーし​​ます。それらを削除し、削除または移動するために必要なステートメントをマウントしました。

予想されるすべての情報がエコーされますが、代わりにPlaying ...と表示されます。

rm "Absolute HairMetalVol。56-111/ Absolute HairMetalVol。100/ 06Leatherwolf-The Calling.mp3" mv "Absolute HairMetalVol。56-111/ Absolute HairMetalVol。100/ 06Leatherwolf -Calling.mp3 "../saved

.。

マウスを2回クリックして貼り付けてから、Enterキーを押すのは面倒です。しかし、他のソリューションは機能しなくなり、セキュリティの問題もいくつかあります。

たぶん、\ nを\ rに変更する必要があります。結果:

mplayer */*/*3 | sed "s@Playing \(.*\).\$@\rrm \"\1\"\rmv \"\1\" ../saved\n@"
0
Rodrigo Gurgel