É possível excluir um arquivo MP3 atualmente reproduzido no mplayer?

4

Eu gostaria de remover um arquivo MP3 que está sendo reproduzido em mplayer . Se possível, gostaria de fazer isso com um comando mplayer . Para que eu não tenha que sair do mplayer e deletar esse arquivo com rm ou abrir outro terminal e deletar o arquivo lá.

    
por mabalenk 21.10.2013 / 18:46

6 respostas

3

Sim, é possível e fácil. Eu uso uma versão modificada dos seguintes itens para selecionar / podar minha coleção de mídia.

(1) Salve o seguinte script 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) Defina permissões para permitir que ele seja executado

chmod +x rmplaying.sh

(3) Edite ou crie o arquivo "~ / .mplayer / input.conf" e adicione a linha

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

É isso.

Para testar, use o mplayer para reproduzir um arquivo e pressione "Ctrl + d". O arquivo será removido por meio do comando "rm", mas a mídia continuará a ser reproduzida.

Se você iniciou o mplayer a partir de uma janela de terminal, deverá ver a mensagem "Removido '/path/to/media/file.mp3'". Se você não o iniciou usando terminal, verifique se o arquivo foi removido de seu diretório.

* Mova a função playing () para seu próprio script de utilitários para uma personalização adicional

    
por 18.02.2014 / 08:07
3

Você não pode excluir um arquivo. A única coisa que um usuário pode fazer é chamar unlink(2) (por exemplo, usando rm(1) ) que remove o nome do arquivo do diretório que resulta em um contador de hardlink decrementado. Somente quando o contador de link físico atingir zero e nenhum aplicativo tiver um identificador de arquivo aberto desse arquivo, o sistema operacional excluirá o arquivo.

Como você reproduz o arquivo em mplayer , haverá um identificador de arquivo aberto e o arquivo não poderá ser excluído. A unlink(2) chamada de sistema deve ser bem sucedida, no entanto. Na prática, isso significa que você pode chamar rm(1) no arquivo, mas não espere ter liberado o espaço até você sair mplayer .

    
por 21.10.2013 / 21:07
1

Para resolver isso, adicionei a seguinte linha ao arquivo ~/.mplayer/input.conf :

DEL run "rm '${path}'"

Isso faz com que a chave delete no mplayer execute o comando shell rm no caminho completo do arquivo que o mplayer está reproduzindo no momento.

Observe que a parte ${path} é substituída pelo próprio mplayer: ${path} é não uma interpolação de variável de shell.

Infelizmente, o fato de o mplayer insistir em usar o shell para executar o comando significa que um nome de arquivo cuidadosamente criado para excluir pode levar à EXECUÇÃO DO CÓDIGO SHELL ARBITRARY. Idéias para evitar isso são bem-vindas.

Observe também que as aspas simples são importantes para fazer com que isso funcione com espaços no caminho do arquivo, mas para de trabalhar com arquivos com aspas simples em seus nomes.

Note também que isto não requer scripts de shell ou mexer com lsof , e assim deve rodar em qualquer sistema operacional unix-y, e trabalhar com múltiplas instâncias do mplayer rodando concorrentemente.

A documentação exata do comando pode ser encontrada na documentação do modo escravo documentação do modo escravo .

    
por 18.12.2014 / 11:51
0

Primeiro, por que você não apenas tenta e vê? De qualquer forma, a exclusão de mplayer em si é provavelmente impossível, por que um media player teria habilidades de manipulação de arquivos? É como perguntar se você pode copiar arquivos usando acroread .

Excluir um arquivo enquanto está sendo reproduzido não deve ser um problema. O arquivo será copiado para a RAM assim que um programa for aberto e você poderá excluir o arquivo do seu disco rígido sem problemas (apenas verifique isso usando o mplayer). O Windows não gosta que você faça isso se lembrar corretamente, mas nunca encontrei esse comportamento no Linux.

    
por 21.10.2013 / 20:38
0

As soluções lkchoi e ndim não funcionaram para mim.

Então eu crio um sistema que chamo de "Cesar", se as músicas são ruins, eu removo, se é bom passar para outra pasta.

Isso é útil ao selecionar áudios, por exemplo, o backup do WhatApp, que é uma gravação importante?

Filtrando músicas em um enorme pacote Hair Metal que também usei, é simples:

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

mplayer echos "Tocando" + nome da música + extensão do arquivo + um ponto estúpido, eu os removi e montei a declaração necessária para remover ou mover.

Ele refletirá todas as informações esperadas, mas, em vez disso, mostrando "Reproduzir ...", será exibido:

rm "Absolute Hair Metal Vol. 56-111 / Absolute Hair Metal Vol. 100/06 Leatherwolf - O Chamado.mp3" mv "Absolute Hair Metal Vol. 56-111 / Absolute Hair Metal Vol. 100/06 Leatherwolf - O Chamado.mp3" ../ salvo

...

Eu sei que é irritante clicar duas vezes depois do mouse para colar e apertar enter. mas outras soluções pararam de funcionar e também há alguns problemas de segurança.

Talvez seja necessário alterar \ n para \ r. resultando:

mplayer */*/*3 | sed "s@Playing \(.*\).\$@\rrm \"\"\rmv \"\" ../saved\n@"
    
por 25.01.2015 / 00:50
-2

Eu não espero que isso seja possível. Embora eu não tenha usado o mplayer, acho que me deparei com uma situação semelhante com o Totem. Basicamente, como um aplicativo já está lendo / acessando o arquivo, você não pode excluí-lo. No mínimo, você precisará parar de reproduzir o arquivo antes de poder excluí-lo, quer isso aconteça a partir do mplayer ou não.

    
por 21.10.2013 / 19:00