我正在尝试使用 录制音频arecord
,使用该工具将其编码为 .flac flac
,然后通过更多进程(gzip、gpg,但此处不相关)将其传输。
flac
如果我使用参数将结果写入文件-o
,则一切正常:
arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -o test.flac
如果我改为使用-c
参数并将输出重定向到文件:
arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -c > test.flac
...生成的文件可以正常播放(声音有效),但 VLC 不显示音频录制的长度,并且 audacity 开始导入过程,预计到达时间稳定增加几个小时,并挂在取消状态。
两个命令之间的唯一区别是-o test.flac
vs -c > test.flac
。为什么这会破坏文件?
如果有区别的话:flac 1.3.2,arecord 1.1.3,在带 USB 麦克风的 Pi3 上的最新 raspbian 上运行。
答案1
它无法通过pipe计算最终长度,因此无法将其写入flac的标头。它不会破坏文件,它会保存为直播,您不应该知道直播何时结束,并且标题位于文件的开头。