我想将.ogg文件存储在bash脚本中,并稍后在脚本中播放。我尝试过:
将.ogg归档为.7z文件(节省一些空间),将.7z归档文件编码为base64,将该base64存储到我的脚本中,然后解码->解压缩->播放原始.ogg流。
将.ogg编码为base64,将该base64存储到我的脚本中,然后解码->播放原始ogg流。
创建.ogg文件的十六进制转储,并将该十六进制存储到我的脚本中,使用sed将\x
放置在十六进制的每两个字符之前,并使用printf打印十六进制和{{1 }}放入<<<
(我的Ogg播放器)
将.ogg归档为.7z文件(节省一些空间),创建.7z文件的十六进制转储,将其存储到我的脚本中,使用sed将ogg123
每隔两个十六进制字符,使用printf打印十六进制,将输出通过管道\x
和7za e -si
进入<<<
(我的ogg播放器)
这些都不起作用。我拥有的最成功的方法是:
ogg123
但是,我真的更希望没有文件写入磁盘(希望将其全部存储在脚本中),并且如果可能的话,不要使用变量来存储任何原始数据。
另一个问题是,ogg123 <<< cat sound.ogg
不支持从stdin进行读取,因此我无法将任何原始的ogg数据通过管道传输到其中。
我尝试过的命令:(十六进制和base64当然会被截断)
ogg123
我确实尝试了其他几个命令,但是我不小心退出了Terminal,而这两个命令是保存在我的.bash_history中的唯一命令。但是,请相信我,但是,我尝试的所有事情都无济于事(我已经花了3.5个小时在此上一直没有成功)。
使用macOS High Sierra 10.13.6,bash 3.2.57(1)-发行版,vorbis-tools 1.4.0中的ogg123、7za 16.02(x64),$ ogg123 <<< printf 'xae\x0f\x00\xad\x83' # .ogg data
/usr/local/bin/ogg123: Argument list too long
$ ogg123 <(printf 'xae\x0f\x00\xad\x83') # .ogg data
Error opening /dev/fd/63 using the oggvorbis module. The file may be corrupted.
$ S=<<SOUND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SOUND
$ ogg123 <(echo $S | openssl base64 -d)
Error opening /dev/fd/63 using the oggvorbis module. The file may be corrupted.
$ ogg123 <<< echo $S | openssl base64 -d
5?w?k譸?
(LibreSSL 2.2.7)。
答案 0 :(得分:0)
不是一个完整的修复程序,但是我确实可以将其与以下内容一起使用:
mplayer <(openssl base64 -d <<SND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SND
)
支持mplayer
读取这样的原始数据(也可以从stdin读取!)