将缺失的长度标头添加到通过流式传输创建的 flac 文件中

将缺失的长度标头添加到通过流式传输创建的 flac 文件中

正如我所拥有的最近学到的,通过将编码的 flac 数据传输到 STDOUT 创建的 flac 文件缺少某些元数据,特别是有关录音长度的信息。

是否可以追溯添加此数据无需解码为 wav 并重新编码数据(数据是对于 wav 文件来说太大,而 flac 会很乐意解码为 wav,但随后会抛出错误并拒绝随后重新编码为 flac)?我知道录音的确切长度,如果这有帮助的话。


出于好奇:这就是我将 7 天的音频录音从 flac 解码并重新编码为 wav 并返回时所发生的情况。

flac --decode test.flac 

flac 1.3.1, Copyright (C) 2000-2009  Josh Coalson, 2011-2014  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.

test.flac: WARNING, cannot check MD5 signature since it was unset in the STREAMINFO
done         
test.flac: ERROR: stream is too big to fit in a single WAVE file

现在我有一个 wav 文件,可以在 VLC 中正常播放并包含适当的长度信息。尝试重新编码:

flac test.wav --best --output-name="test2.flac"

flac 1.3.1, Copyright (C) 2000-2009  Josh Coalson, 2011-2014  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.

test.wav: ERROR: 'data' chunk has size of 0

答案1

我找到的唯一解决方案是使用 sox 重新编码整个内容:

sox test.flac test_full.flac --show-progress

这将获取完整的录音,对其进行解码,然后将其重新编码回 flac。虽然效率低下,但还是能完成工作。如果有更好的解决方案可以避免 10 分钟的编码过程,请随意添加另一个答案,我会接受该答案。

相关内容