Прежде всего, большое спасибо заранее, я не являюсь экспертом в области редактирования видео и музыки c.
Я хочу сделать видео, которое показывает полосу прогресса над спектрограммой определенного трека. Сначала я генерирую спектрограмму трека. 
После этого я генерирую видео через ffmpeg, чтобы получить правильный размер
ffmpeg -loop 1 -y -i 'image.jpg' -i 'track.wav' -shortest -acodec copy -vcodec mjpeg 'image_plus_track_spectrogram_video.avi'
В следующей процедуре я написал небольшой opencv- python Скрипт для включения полосы прогресса в видео на основе номера видеокадра. Поэтому я использовал opencv для редактирования каждого кадра и объединил их в новое видео. После этого я слил «новое» видео с предыдущим аудиофайлом через ffmpeg для генерации конечного продукта.
import numpy as np
import math
import cv2
import glob
import subprocess
video_file = r"image_plus_track_spectrogram_video.avi")
video_to_manipulate = video_file
cap = cv2.VideoCapture(video_to_manipulate)
alpha = 0.4
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(length)
count = 0
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(video_file[:-4]+"_V2.mp4", fourcc, 25, (1875,938))
#start and end pixel position
pos1 = 230
pos2 = 1593
fps = 25
pos = pos2 - pos1
frame_pos_gain = pos / length;
curr_pos = pos1
spectrogram_height_max_position = 835
spectrogram_height_min_position = 70
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
height, width, channels = frame.shape
overlay = frame.copy()
output = frame.copy()
curr_pos = curr_pos + frame_pos_gain
pos = int(curr_pos)
print(pos)
## generate and overlay a red dotted line over the frame based on framenumber, in this case a thick red line
cv2.rectangle(overlay,(pos, spectrogram_height_max_position),(pos,spectrogram_height_min_position),(0, 0, 255),5)
cv2.addWeighted(overlay, alpha, output, 1 - alpha, 0, output)
cv2.imshow("Output", output)
out.write(output)
if cv2.waitKey(fps) & 0xFF == ord('q'):
break
else:
break;
cap.release()
out.release()
cv2.destroyAllWindows()
#merge the new video with the old audio file
subprocess.call(["ffmpeg", "-y", "-i", video_file[:-4]+"_V2.mp4", "-i", video_file[:-4]+".wav", "-c:a", "aac", "-vf", "scale=600:-1", "-strict", "experimental", video_file[:-4]+"_V2_with_sound_rescaled.mp4"],shell=True)
Конечный результат видеокадра не совпадает c с воспроизводимым звуком. Любые предложения, как оптимизировать мой процесс?
Приветствия