有很多音频和视频播放器,但我更喜欢使用一种工具来实现多种目的。所以我想到ffplay
同时用作音频和视频播放器。
要播放文件,命令如下。
ffplay path_to_audio_file.mp3
很好,但是如何播放音频文件列表或视频列表?
我尝试使用:
ffplay *.mp3
但无济于事。它给了我以下错误:
Argument 'audiofileB.mp3' provided as input filename, but 'audiofileA.mp3' was already specified.
答案1
ffplay
似乎只支持单个输入文件,因此您需要使用代码来循环输入文件列表(并可能对它们进行洗牌);疯狂地假设coreutils
(对于shuf
),也许是这样的:
find musicdir -type f -name "*.mp3" | shuf | while read f; do ffplay -autoexit -- "$f"; done
如果文件名中有空格或换行符,这当然会严重破坏。
(我现在的音乐播放器非常相似,find ~/music -type f -name "*.mp3" | mpg123 --shuffle -Z --list -
)
答案2
我从这个发现https://ubuntuforums.org/showthread.php?t=2068478
for f in *.mp3 ; do ffplay -autoexit "$f"; done
答案3
我在 Lazarus/FPC 中编写 FFplay GUI 时发现了这个线程。它已经可以播放删除的文件列表并跳到下一个/上一个文件,但我必须终止 ffmpeg 进程并每次创建一个新进程。我试图添加播放整个文件列表的功能。我目前发现的最简单的解决方法当然是使用 -autoexit,并使用以下 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;
然后这样读:
'ffplay -f concat -safe 0 -i flist.txt -autoexit'
这与我使用 FFMPeg 连接文件的语法相同。
我现在正在寻找一种适当的方法来添加延迟(如果文件是图像文件)......
答案4
ffplay
可以使用类似于 的 concat demuxer ffmpeg
。
创建一个列出您要播放的文件的文件:
# list.txt
file 'audiofileA.mp3'
file 'audiofileB.mp3'
然后运行ffplay:
ffplay -f concat -i list.txt
其他有用的选项:
- 用于
-autoexit
使其在完成后退出 - 用于
-loop 0
永远循环(按q退出)。 -safe 0
如果文件路径是绝对路径(或包含其他特殊字符),则使用。
请参阅 ffmpeg wiki 关于连接解复用器更多细节。