【问题标题】:Save only last x MB of audio stream downloaded with curl仅保存使用 curl 下载的最后 x MB 音频流
【发布时间】:2020-02-14 15:21:19
【问题描述】:

我想下载一个音频流(curl STREAM > out.mp3)并分析它。但是,我不想存储所有内容,而只想存储此流的最后 x MB,之后可以删除所有内容。所以out.mp3 文件的最大大小是 x MB,它包含流的当前最后 x MB。

我可以使用 bash 标准工具执行此操作,因此不自己分析文件大小并使用 if-else 语句吗?

【问题讨论】:

  • 不确定你认为什么是“Bash 标准工具”,但ffmpeg 可能会做你想做的事。
  • 我认为这可能有点费力才能一直运行ffmpeg。解决方案本身也不必依赖 mp3 文件,URL 可以例如是一个连续的系统日志或类似的东西。

标签: linux bash curl download wget


【解决方案1】:

tail 显示“文件的最后一部分”。默认显示最后 10 个,您可以使用-c number 参数使其显示最后一个number 字节。作为一个优秀的 UNIX 公民,您可以将数据流通过管道传递给它,而不是处理文件。

长话短说,您可以像这样存储流的最后 1 兆字节:

curl -s URL | tail -c 1048576 > last1mb.mp3

【讨论】:

  • 对于有限流,这会很好,谢谢!但我忘了提到流是无限的(即无线电流),所以它永远不会结束。因此,tail 永远不会被执行(至少对我来说)。我只想存储广播流的最后 x MB。
  • @NiklasWünsche oopsie,一个重要的细节! ;-) 我应该已经看到它的到来:-/ ...我担心这充满了很多问题。该过程必须定期重写文件。这种情况应该多久发生一次?当文件被重写时,读者应该怎么办?他们应该被打断,还是应该把旧内容读完,即使它已经过时了?
  • 你能把MP3文件的一部分剪掉,得到一个有效的MP3文件吗?没有标题之类的吗?
  • 所以我想做的是检查给定的音频序列是否在这个流中播放。因此请检查test.mp3 的内容是否已在此流中播放。但是,我不想保留所有数据,而是在检查此条件后将其删除。我还没想好要给读者做什么。如果一个文件被完全检查,也许可以使用 2 个文件并在它们之间跳转?
猜你喜欢
  • 1970-01-01
  • 2019-11-26
  • 2013-02-24
  • 2017-04-26
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多