我想使用我的摄像机录制高质量视频,不幸的是从相机的内置麦克风录制低音频,同时将音频录制到具有更高品质麦克风的独立设备上。
然后自动同步外部音频,使其与视频匹配。
在我看来,这类似于bpm检测的问题,但更简单,因为你不需要找到相似的循环,但基本上只是覆盖音频通道,看看它们匹配的最佳位置。或者检测某种"同步声音"事件
我更喜欢在python中编程,并且任何指向某些python代码的指针都可以作为起点,非常感谢。
更新:我发现这个python application和matching Android clapboard可以解决问题。它似乎可以通过同步到视频文件和外部音频文件中记录的特殊声音来工作。
更新II:这里是another one在python中,用于同步在同一场音乐会上录制的Yotube视频。
答案 0 :(得分:6)
我现在已经测试Allison Deal's Video sync(也在问题中的“更新II”下链接),它似乎完成了这项工作。
在其git目录的根目录中有一个名为“alignment_by_row_channels.py”的文件。如果您在该文件末尾的测试代码中发表评论,则可能需要两个mp4视频并打印两个视频中音频之间的时间偏移。
我用佳能HF200摄像机和LG G2安卓手机进行了测试,配有通话和手指按键,摄像机的音量很小。然后我用大胆手动分析了音轨。
alignment_by_row_channels.py脚本指示两个轨道之间的偏差为15.1893秒。通过查看波形进行手动分析得出15.181秒(大胆度输出的分辨率不会低于毫秒,至少不是默认值)。
差异只有8.3毫秒左右,似乎表明“alignment_by_row_channels.py”可以胜任这项工作。
(请注意,git repo很大,可能是由于删除了大对象)
答案 1 :(得分:0)
使用了此文档,它对我有用:
http://www.dsg-bielefeld.de/dsg_wp/wp-content/uploads/2014/10/video_syncing_fun.pdf
praat_command = '{} {} {} {}'.format(
praat, praat_script, sound, sound_studio)
sound_offset_time = check_output(
praat_command, shell=True).decode("utf-16")
普拉特脚本:
form Cross Correlate two Sounds
sentence input_sound_1
sentence input_sound_2
real start_time 0
real end_time 30
endform
Open long sound file... 'input_sound_1$'
Extract part: 0, 30, "no"
Extract one channel... 1
sound1 = selected("Sound")
Open long sound file... 'input_sound_2$'
Extract part: 0, 30, "no"
Extract one channel... 1
sound2 = selected("Sound")
select sound1
plus sound2
Cross-correlate: "peak 0.99", "zero"
offset = Get time of maximum: 0,0, "Sinc70"
writeInfoLine: 'offset'
答案 2 :(得分:0)