我有两个同一事件的记录,不同的长度,在不同的时间开始。我想同步它们,时间偏移是已知的。我想实现以下目标:
答案 0 :(得分:0)
很抱歉没有回复,但我使用ffmpeg解决了我的问题。以下是我的完成方式:
ffmpeg -f lavfi -i aevalsrc=0:d=8.375 -i inputfile.wav -filter_complex "[0:0] [1:0] concat=n=2:v=0:a=1" -ss 0 -to 63.787 outputfile.wav
-i aevalsrc=0:d=8.375
会产生8.375秒的持续时间(d
)的沉默。
-filter_complex "[0:0] [1:0] concat=n=2:v=0:a=1
合并沉默和输入文件。 - Concatenation -ss 0 -to 63.787
修剪输出(从第一个文件的开头到第一个文件的长度,即63.787,如果输入比这个短,输出文件有输入文件的持续时间) - {{ 3}}
如果偏移值为负,那么它是:
ffmpeg -i inputfile.wav -ss 22.316 -t 54.213 outputfile.wav
因此输出文件是输入文件的开始从22.316秒持续54.213秒
我使用NReco.VideoConverter作为ffmpeg包装。
答案 1 :(得分:0)
这是一种使用NAudio以毫秒级写静音的方法:
public static void WriteSilence(WaveFormat waveFormat,
int silenceMilliSecondLength, WaveFileWriter waveFileWriter)
{
int bytesPerMillisecond = waveFormat.AverageBytesPerSecond / 1000;
//an new all zero byte array will play silence
var silentBytes = new byte[silenceMilliSecondLength * bytesPerMillisecond];
waveFileWriter.Write(silentBytes, 0, silentBytes.Length);
waveFileWriter.Dispose();
}