AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1600403
Accepted
Sridhar Sarnobat
Sridhar Sarnobat
Asked: 2020-11-08 13:08:09 +0800 CST2020-11-08 13:08:09 +0800 CST 2020-11-08 13:08:09 +0800 CST

Por que a substituição de processo não funciona com listas de reprodução VLC?

  • 772

Faz o que eu espero

  • cat <(shuf my_ordered_playlist.m3u)
  • echo <(shuf my_ordered_playlist.m3u)
  • vlc my_ordered_playlist.m3u

Não faz o que eu espero

  • vlc <(shuf my_ordered_playlist.m3u)

O que eu quero fazer

  • Reproduza os elementos da minha lista de reprodução em uma ordem não determinística em cada invocação de vlc e
  • ser capaz de retroceder ao pressionar o botão Voltar (que --randomfornece um suporte ruim para).

Outras notas

  • Posso conseguir o que quero com um documento aqui ou <<<?
bash vlc-media-player
  • 2 2 respostas
  • 540 Views

2 respostas

  • Voted
  1. Kamil Maciorowski
    2020-11-08T14:02:51+08:002020-11-08T14:02:51+08:00

    Por que a substituição de processo não funciona com listas de reprodução VLC?

    Porque vlc é mal concebido nesta matéria. Pior, ele é mal projetado duas vezes :
    provavelmente tem suas razões* para funcionar de uma maneira que cria as duas desvantagens a seguir:

    • inotifywait -m my_ordered_playlist.m3urevela que após vlc my_ordered_playlist.m3uo arquivo é aberto e lido várias vezes. Não investiguei se há buscas envolvidas. Quando você usa <(shuf my_ordered_playlist.m3u) vlcobtém dados canalizados shufe é capaz de lê-los exatamente uma vez. Aparentemente isso não é suficiente. Em um mundo perfeito vlcleria os dados apenas uma vez e deveria ser suficiente.

    • vlcse recusa a trabalhar com uma lista de reprodução sem extensão. No Zsh existe uma =()sintaxe semelhante a <(); a diferença é que o shell cria um arquivo regular temporário em vez de um pipe. Esse arquivo pode ser lido várias vezes e é pesquisável. Parece uma boa solução para o seu problema (se você estiver bem com o Zsh), mas normalmente o nome do arquivo está sem a extensão, então vlc =(shuf my_ordered_playlist.m3u)ainda não funciona.

      Mas tem um jeito :

      # in zsh
      TMPSUFFIX=.m3u; vlc =(shuf my_ordered_playlist.m3u)
      

      Execute os comandos em um subshell se desejar que a alteração TMPSUFFIXnão afete o shell principal.


    *A declaração " vlcé mal projetado" recebeu um comentário útil:

    Suspeito que pelo menos uma das buscas no arquivo é determinar se o arquivo é ANSI, UTF-8 ou UTF-16 (com ou sem uma marca de ordem de byte) e, em seguida, redigitalizar o arquivo com um formato apropriado aplicado internamente. Claro que isso não impede o fato de que o VLC está esperando uma extensão, o que não é tão estúpido quando você considera o número de formatos que o VLC pode ver... Você não pode realmente esperar que ele escaneie o arquivo primeiro, e esfregue-o contra cada decodificador interno para ver qual funciona, cuja ação esvaziaria o tubo após a primeira busca e tornaria os dados inúteis novamente ...

    • 7
  2. Best Answer
    Mokubai
    2020-11-08T13:21:20+08:002020-11-08T13:21:20+08:00

    Uma opção alternativa é fazer isso em duas etapas e passar uma lista de reprodução já embaralhada para o VLC em um arquivo em vez de na linha de comando.

    shuf my_ordered_playlist.m3u > /tmp/random_playlist.m3u && vlc /tmp/random_playlist.m3u
    

    Você pode até estendê-lo para

    shuf my_ordered_playlist.m3u > /tmp/random_playlist.m3u && vlc /tmp/random_playlist.m3u && rm /tmp/random_playlist.m3u 
    

    Para limpar após a saída do VLC.

    Você pode até usar um alias bash

    alias shuf_vlc="shuf my_ordered_playlist.m3u > /tmp/random_playlist.m3u && vlc /tmp/random_playlist.m3u && rm /tmp/random_playlist.m3u"
    

    e depois é só correr shuf_vlcpara embaralhar sua playlist.


    A razão pela qual seu comando não funciona é porque ainda é um pipe e está sujeito às limitações de um pipe.

    Limitações da Substituição do Processo

    A substituição do processo tem algumas limitações:

    • Sem busca de arquivo: os "arquivos" criados não são pesquisáveis, o que significa que o processo de leitura ou gravação no arquivo não pode realizar acesso aleatório; ele deve ler ou escrever uma vez do início ao fim. Programas que verificam explicitamente o tipo de arquivo antes de abri-lo podem se recusar a trabalhar com substituição de processo, pois o "arquivo" resultante da substituição de processo não é um arquivo comum.

    • Sem códigos de saída : "Não é possível obter o código de saída de um comando de substituição de processo do shell que criou a substituição de processo."

    Dependendo do comportamento que você está vendo, pode ser que o VLC esteja procurando por uma lista de reprodução válida (para verificar UTF-8/16 etc ou que o arquivo foi construído corretamente), mas não está realmente lendo a lista de reprodução no primeiro passar. Ele tenta voltar para realmente carregar os arquivos e, devido a "nenhuma busca de arquivo", não consegue ler a lista de reprodução. A primeira passagem esvazia efetivamente o pipe que recebe um descritor de arquivo e, em seguida, não há nada com que trabalhar.

    Alternativamente, o VLC verifica se o arquivo é "real" e capaz de ser seekeditado e ao descobrir que não pode simplesmente se recusar a abri-lo, pois não poderá analisar tanto para frente quanto para trás no arquivo.

    Seus dois primeiros comandos são simples e não esperam nada mais do que um fluxo legível, o VLC quer algo real que possa segurar.

    • 5

relate perguntas

  • Tendo problemas para definir variáveis ​​de ambiente no Terminal no macOS High Sierra

  • Áudio VLC para Bluetooh, vídeo para Chromecast?

  • Existe um equivalente a cd - para cp ou mv?

  • Notificar-enviar notificações aparecendo na janela

  • como abrir um arquivo de escritório do WSL

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve