这两个 wav 文件有什么区别?
What is the difference between these 2 wav files?
我正在尝试使用名为 arss 的程序从 wav 文件创建频谱图。我有 2 个 wav 文件,一个有效,另一个无效(它是从 mp3 转换为 wav)。
arss 抛给我的错误是:
This WAVE file is not currently supported.
很好,但我不知道要更改我的 wav 文件的哪些部分,以便 得到支持。文档在这里没有帮助(据我所知)
当我在两个 wav 文件上 运行 mediainfo
时,我得到以下规格:
工作波形:
General
Complete name : working.wav
Format : Wave
File size : 1.15 MiB
Duration : 6 s 306 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 6 s 306 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 1.15 MiB (100%)
不工作 wav:
General
Complete name : not_working.wav
Format : Wave
File size : 5.49 MiB
Duration : 30 s 0 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Writing application : Lavf57.83.100
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 30 s 0 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 5.49 MiB (100%)
比较两个文件的音频规格,除了文件大小和持续时间外,我看不出任何区别。我什至使用 ffmpeg
更新了非工作 wav 的采样率,使其与 48.0kHz 的工作 wav 匹配,但运气不好。
有什么想法吗?
两个 wav 文件都可用 here。
默认情况下,FFmpeg 在数据块之前写入一个带有一些元数据的 LIST 块。 ARSS 有一个严格的解析器,并期望数据块从固定字节偏移量 (0x24) 开始。可以告诉 FFmpeg 使用 bitexact 选项跳过写入 LIST 块。
ffmpeg -i not_working.wav -c copy -bitexact new.wav
请注意,ARSS 不检查采样率,只检查 WAV 是否有小端 PCM。
这是一个相关的问题,不是完全重复,为未来的读者链接:
我有一个旧版本的 ffmpeg,仅 -bitextact
选项并没有帮助 。也就是说,它确实从 hunk 中删除了一些数据,但是 LIST
hunk 仍然存在 other data.
您可能还需要使用 -map_metadata
选项要求完全不提供元数据,如下所示:
ffmpeg ... -i <input> ... -flags +bitexact -map_metadata -1 ... <output>
(...根据您的情况使用其他命令行选项表示位置)
通过添加 -map_metadata -1
,它确实删除了所有内容,LIST
大块头现在完全消失了。
我正在尝试使用名为 arss 的程序从 wav 文件创建频谱图。我有 2 个 wav 文件,一个有效,另一个无效(它是从 mp3 转换为 wav)。
arss 抛给我的错误是:
This WAVE file is not currently supported.
很好,但我不知道要更改我的 wav 文件的哪些部分,以便 得到支持。文档在这里没有帮助(据我所知)
当我在两个 wav 文件上 运行 mediainfo
时,我得到以下规格:
工作波形:
General
Complete name : working.wav
Format : Wave
File size : 1.15 MiB
Duration : 6 s 306 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 6 s 306 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 1.15 MiB (100%)
不工作 wav:
General
Complete name : not_working.wav
Format : Wave
File size : 5.49 MiB
Duration : 30 s 0 ms
Overall bit rate mode : Constant
Overall bit rate : 1 536 kb/s
Writing application : Lavf57.83.100
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 30 s 0 ms
Bit rate mode : Constant
Bit rate : 1 536 kb/s
Channel(s) : 2 channels
Sampling rate : 48.0 kHz
Bit depth : 16 bits
Stream size : 5.49 MiB (100%)
比较两个文件的音频规格,除了文件大小和持续时间外,我看不出任何区别。我什至使用 ffmpeg
更新了非工作 wav 的采样率,使其与 48.0kHz 的工作 wav 匹配,但运气不好。
有什么想法吗?
两个 wav 文件都可用 here。
默认情况下,FFmpeg 在数据块之前写入一个带有一些元数据的 LIST 块。 ARSS 有一个严格的解析器,并期望数据块从固定字节偏移量 (0x24) 开始。可以告诉 FFmpeg 使用 bitexact 选项跳过写入 LIST 块。
ffmpeg -i not_working.wav -c copy -bitexact new.wav
请注意,ARSS 不检查采样率,只检查 WAV 是否有小端 PCM。
这是一个相关的问题,不是完全重复,为未来的读者链接:
我有一个旧版本的 ffmpeg,仅 -bitextact
选项并没有帮助 。也就是说,它确实从 hunk 中删除了一些数据,但是 LIST
hunk 仍然存在 other data.
您可能还需要使用 -map_metadata
选项要求完全不提供元数据,如下所示:
ffmpeg ... -i <input> ... -flags +bitexact -map_metadata -1 ... <output>
(...根据您的情况使用其他命令行选项表示位置)
通过添加 -map_metadata -1
,它确实删除了所有内容,LIST
大块头现在完全消失了。