Istnieje wiele odtwarzaczy audio i wideo, ale chciałbym użyć jednego narzędzia do wielu propozycji. Dlatego chciałbym użyć ffplay jako odtwarzacza audio i wideo.

Aby odtworzyć jeden plik, polecenie wygląda tak.

 ffplay path_to_audio_file.mp3  

ale jak odtworzyć listę pliki audio czy lista filmów?

Próbowałem użyć:

ffplay *.mp3 

ale bez powodzenia, pojawia się następujący błąd:

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

Odpowiedź

ffplay wydaje się obsługiwać tylko jeden plik wejściowy, więc będziesz musiał użyć kodu, aby zapętlić listę plików wejściowych (i być może tasować je ); szalenie zakładając coreutils (dla shuf), być może coś takiego:

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

To oczywiście strasznie się zepsuje, jeśli w nazwach plików będą spacje lub znaki nowej linii.

(Mój obecny odtwarzacz muzyki jest dość podobny, find ~/music -type f -name "*.mp3" | mpg123 --shuffle -Z --list -)

Komentarze

  • Wypróbowałem rozwiązanie i ' jest prawie dobre, ale … są pewne problemy z tym związane do ffplay, które ' nie jestem pewien, czy powinny zostać rozwiązane w tej czy innej kwestii. jednym z problemów jest to, że ffplay nie zakończy odtwarzania bieżącego utworu iz tego powodu nie przejdzie do następnego utworu pod koniec bieżącego, dopóki nie użyję kombinacji klawiszy CTRL + c.
  • @Scant Podświetl -autoexit wydaje się mieć związek z tym problemem.
  • -autoexit rozwiązało ten problem. Teraz mam inny, który można rozwiązać za pomocą -nodisp … to wyłączy wizualizację przebiegu i tym podobnych rzeczy. Pozwoli to uniknąć tworzenia nowego okna i kradzieży fokusu z aktualnie działającej aplikacji (było to bardzo irytujące zachowanie). czy chcesz uwzględnić tę opcję w swojej odpowiedzi jako możliwą opcję rozwiązania irytującego zachowania.

Odpowiedź

Znalazłem ten wątek podczas pisania GUI FFplay w Lazarus / FPC. Mógł już odtwarzać upuszczoną listę plików i przeskoczyć do następnego / poprzedniego pliku, ale musiałem zabić proces ffmpeg i za każdym razem tworzyć nowy. Próbowałem dodać możliwość odtwarzania całej listy plików. Najprostszym obejściem, jakie znalazłem do tej pory, było oczywiście użycie -autoexit i utworzenie pliku listy odtwarzania z tym kodem 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; 

Następnie przeczytałem go w ten sposób:

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

To jest ta sama składnia, której używam do łączenia plików z FFMPeg.

Teraz szukam właściwego sposobu dodawania opóźnienie, jeśli pliki są plikami graficznymi…

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *