Existem muitos players de áudio e vídeo, mas gostaria de usar uma ferramenta para muitos propósitos. Então, gostaria de usar ffplay como reprodutor de áudio e vídeo.

Para reproduzir um arquivo, o comando é assim.

 ffplay path_to_audio_file.mp3  

mas como reproduzir uma lista de arquivos de áudio ou uma lista de vídeos?

Tentei usar:

ffplay *.mp3 

mas sem sucesso, aparece um erro como este:

Argument "audiofileB.mp3" provided as input filename, but "audiofileA.mp3" was already specified. 

Resposta

ffplay parece suportar apenas um único arquivo de entrada, então você precisará usar o código para percorrer uma lista de arquivos de entrada (e possivelmente para embaralhá-los ); assumindo totalmente coreutils (para shuf), talvez algo como:

find musicdir -type f -name "*.mp3" | shuf | while read f; do ffplay -autoexit -- "$f"; done 

Isso, é claro, quebrará horrivelmente se houver espaços ou novas linhas nos nomes dos arquivos.

(Meu reprodutor de música atual é bastante semelhante, find ~/music -type f -name "*.mp3" | mpg123 --shuffle -Z --list -)

Comentários

  • Tentei sua solução e ' é quase boa, mas … há alguns problemas relacionados para ffplay que eu ' não tenho certeza se eles devem ser resolvidos nesta questão ou em outra. um dos problemas é que o ffplay não terminará de tocar a música atual e por esse motivo não irá para a próxima música no final da atual até que não usarei a combinação de teclado CTRL + c.
  • @Scantlight the -autoexit sinalizador parece relevante para esse problema.
  • -autoexit resolveu esse problema. Agora eu tenho outro que pode ser resolvido usando -nodisp … isso irá desativar a visualização da forma de onda e coisas semelhantes. Isso evitará a criação de uma nova janela e roubar o foco do aplicativo de trabalho atual (este era um comportamento muito irritante). gostaria de incluir esta opção em sua resposta, como uma opção possível para resolver o comportamento irritante.

Resposta

Eu encontrei este tópico enquanto escrevia uma GUI FFplay no Lazarus / FPC. Ele já podia reproduzir uma lista de arquivos descartados e pular para o arquivo anterior / seguinte, mas tive que encerrar o processo ffmpeg e criar um novo a cada vez. Eu estava tentando adicionar a capacidade de reproduzir uma lista de arquivos inteira. A solução alternativa mais simples que encontrei até o momento foi, é claro, usar -autoexit e criar um arquivo de lista de reprodução com este código Pascal:

begin AssignFile(tfOut, C_FNAME); try rewrite(tfOut); for i:= 0 to Fichiers.Items.Count - 1 do if Fichiers.Selected[i] then begin writeln(tfOut, "file " + #39 + conv(Fichiers.Items[i]) + #39) end; CloseFile(tfOut); except on E: EInOutError do ShowMessage ("File error") end; end; 

Então, lendo desta forma:

"ffplay -f concat -safe 0 -i flist.txt -autoexit" 

que é a mesma sintaxe que uso para concatenar arquivos com FFMPeg.

Agora estou procurando uma maneira adequada de adicionar um atraso se os arquivos forem arquivos de imagem…

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *