Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中自动同步两个录音_Python_Audio - Fatal编程技术网

在python中自动同步两个录音

在python中自动同步两个录音,python,audio,Python,Audio,我想使用我的摄像机从摄像机的内部麦克风录制高质量的视频,不幸的是低于标准的音频,同时将音频录制到一个单独的设备上,该设备配有质量更好的麦克风 然后自动同步外部音频,使其与视频匹配 在我看来,这似乎类似于bpm检测的问题,但更简单,因为您不需要找到相似的循环,而基本上只是覆盖音频通道,看看它们在哪里匹配最好。或者检测某个“同步声音”事件 我更喜欢用python编程,任何指向某些python代码的指针,无论是这样做的,还是可以作为起点的,我都非常感激 更新:我发现这个可以做的把戏。它似乎通过同步视频

我想使用我的摄像机从摄像机的内部麦克风录制高质量的视频,不幸的是低于标准的音频,同时将音频录制到一个单独的设备上,该设备配有质量更好的麦克风

然后自动同步外部音频,使其与视频匹配

在我看来,这似乎类似于bpm检测的问题,但更简单,因为您不需要找到相似的循环,而基本上只是覆盖音频通道,看看它们在哪里匹配最好。或者检测某个“同步声音”事件

我更喜欢用python编程,任何指向某些python代码的指针,无论是这样做的,还是可以作为起点的,我都非常感激

更新:我发现这个可以做的把戏。它似乎通过同步视频文件和外部音频文件中记录的特殊声音来工作

更新II:这里是用python编写的,用于同步在同一场音乐会上录制的Yotube视频。

我现在已经测试过(在问题的“更新II”下也有链接),它似乎可以完成这项工作

在其git目录的根目录中有一个名为“alignment\u by\u row\u channels.py”的文件。如果您在该文件末尾的测试代码中添加注释,则可能需要两个mp4视频,并打印两个视频中音频之间的时间偏移

我用一台佳能HF200摄像机和一部LG G2安卓手机对其进行了测试,该手机配有通话和手指抓拍功能,摄像机的音量非常小。然后我大胆地手动分析了这些音轨

对齐_by_row_channels.py脚本表示两个轨迹之间的偏移为15.1893秒。我通过查看波形进行的手动分析给出了15.181秒(audacity的输出分辨率不低于毫秒,至少在默认情况下是这样)

差异只有8.3毫秒左右,这似乎表明“按行对齐\u通道.py”完成了这项工作


(请注意,git回购非常庞大,可能是因为删除了大对象)

使用了此文档,它对我很有用:

Praat脚本:

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'

找不到同步视频/音频录制开始的工具, 但发现更多这样的问题, 我决定自己做一个工具:syncstart。
它现在处于打开状态。

Python 3/ffmpeg版本可在in sync/offset.py中找到。请注意,它已经解释了8.3毫秒(或大约8.3毫秒)的偏移量,这对于每秒60帧的视频来说至关重要。我还没有找到偏移的原因,但从经验上证实了这一点。通过一些调整和简化,您可以直接使用sync_video.py脚本,而不需要OpenCV(摆脱
find_calibration_conversion_range
calib.data
导入,用
find_offset_range
替换调用,不要翻转,设置-te=0,等等)更正上述评论:原始代码没有任何错误。偏移似乎是每个视频文件中视频和音频之间延迟差异的直接结果。在我的例子中,我手动测量它为~9毫秒。我修改了代码,将其作为一个参数,因此,为了在高fps视频上获得最高精度,您仍然需要手动测量这些延迟(传统智慧建议在捕获过程中拍手)。我今天尝试使用它,但似乎找不到convert_to_webm库。你还可以使用它吗?我已经根据她的东西做了我自己的回购协议,但是有点改变,两周前我测试了它,它看起来很有效,尽管我在两个相同的文件上测试了它。尽管如此,这应该贯穿所有代码,也许你问过格雷格,我才意识到,但你的评论出现在我的邮箱里:)
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'