无法将原始数据发送到命令(重击)

时间:2019-07-10 23:17:03

标签: bash macos base64 7zip ogg

我想将.ogg文件存储在bash脚本中,并稍后在脚本中播放。我尝试过:

  • 将.ogg归档为.7z文件(节省一些空间),将.7z归档文件编码为base64,将该base64存储到我的脚本中,然后解码->解压缩->播放原始.ogg流。

  • 将.ogg编码为base64,将该base64存储到我的脚本中,然后解码->播放原始ogg流。

  • 创建.ogg文件的十六进制转储,并将该十六进制存储到我的脚本中,使用sed将\x放置在十六进制的每两个字符之前,并使用printf打印十六进制和{{1 }}放入<<<(我的Ogg播放器)

  • 将.ogg归档为.7z文件(节省一些空间),创建.7z文件的十六进制转储,将其存储到我的脚本中,使用sed将ogg123每隔两个十六进制字符,使用printf打印十六进制,将输出通过管道\x7za 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)。

1 个答案:

答案 0 :(得分:0)

不是一个完整的修复程序,但是我确实可以将其与以下内容一起使用:

mplayer <(openssl base64 -d <<SND
dGhpcyBiYXNlNjQgd291bGQgYmUgdGhlIGJhc2U2NCBvZiBteSBvZ2cgZmlsZQ==
SND
)

支持mplayer读取这样的原始数据(也可以从stdin读取!)