I am trying to sync the raspberry pi camera (revision 1.3) to an external microphone. The sync is fine for the first 5 minutes or so, but around the 20 minute mark, the difference becomes really noticeable.
I believe the issue might be because the camera is not actually recording at 25 fps, but I'm not sure why the difference in sync worsens as the video duration increases.
How would I go about fixing this?
with picamera.PiCamera() as camera: camera.annotate_background = True camera.framerate = 25 camera.resolution = (1280,720) videofilename = file_timestamp + "_" + species + "_mytest.h264" audiofilename = file_timestamp + "_" + species + "_mytest.wav" mergefilename = file_timestamp + "_" + species + "_mytest.mov" syncfilename = "sync_" + mergefilename start = dt.datetime.now() command = "~/alsa-utils/bin/arecord -Dhw:sndrpiwsp -d %s -c 2 -f s16_LE -r 8000 %s" % (length, audiofilename) camera.start_preview() camera.start_recording(videofilename) video_start_time = dt.datetime.utcnow() # print str(video_start_time) + ' -- started video recording!' psub = subprocess.Popen(command , shell=True, stderr=subprocess.PIPE, bufsize=1, universal_newlines=True) while psub.poll() is None: line = psub.stderr.readline() if line[0:14] == 'Recording WAVE': #audio_start_time = dt.datetime.utcnow() print str(audio_start_time) + ' -- started audio recording!' if line[0:12] == 'Writing WAVE': audio_accurate_start_time = dt.datetime.utcnow() print str(audio_accurate_start_time) + ' -- started writing audio!' audio_accurate_start_delay = audio_accurate_start_time - video_start_time #version numbering (v.2) the_accurate_delay = float(str(audio_accurate_start_delay)[5:14])`merge = "avconv -i %s -i %s -c copy %s" % (videofilename, audiofilename, mergefilename) sync = "avconv -itsoffset %s -i %s -i %s -map 0:1 -map 1:0 -c:v copy -c:a copy %s" % (the_accurate_delay, mergefilename, mergefilename, syncfilename)`