البحث عن توقيت البداية والنهاية لِـ مقطع صوتي فريد في الفيديو باستخدام لغة بايثون.

  • Kakarotto

السلام عليكم ورحمة الله وبركاته.

  • لديّ مقطع صوتي مدته حوالي الـ 5 ثوان استخرجته من الفيديو (نفس ملف الفيديو المذكور بالأسفل).
  • ليكن اسم الملف الصوتيّ:
 a.wav
  • الفيديو وليكن اسمه:
video.mp4
  • محتوى هذا الفيديو فيه يتكرّر المقطع الصوتي القصير السابق كيف يمكنني باستخدام لغة بايثون أن أجد مكان تواجد هذا الجزء من الصوت في الفيديو وطباعة وقت البداية ووقت النهاية؟

من لديه فكرة أو مكتبة أو كود يُفيد لهذا الغرض ليخبرنا جزاكم الله كلّ خير ♥


ربما عليك التفكير بطيرقة مختلفة ولكني لا تاعرف بشأن الاعلانات ,

لكن بالنسبة للكود

فسيكون بالشكل التالي

from scipy import signal
import numpy as np
import librosa


def get_loc_clib(full_clib, small_clib):
    y_full, sr_full = librosa.load(full_clib, sr=None) #load file
    y_small, sr_small = librosa.load(small_clib, sr=sr_full)#load file
    full_Duration = librosa.get_duration(y=y_full, sr=sr_full)
    small_Duration = librosa.get_duration(y=y_small, sr=sr_small)


    end_search = int(full_Duration)
    if end_search > small_Duration:
       parts = int(end_search + small_Duration)
       start_p=0
       for i in range(parts):
           start_p = end_search if start_p > end_search else start_p
           correlate = signal.correlate(y_full, y_small[start_p:sr_full*end_search], mode='valid', method='fft')
                      
           start = np.round(np.argmax(correlate) / sr_full, 2)
           end = start+small_Duration
           start_p = end+1


           print("item{} ,Start:{} |s".format(start_p+start-1))
           print("item{} ,End:{:.2f} | s".format(start_p+end-1))




if __name__ == '__main__':
   get_loc_clib("video.wav", "a.wav")


ظهر هذا الخطأ بعد تشغيل الكود:

  print("item{} ,Start:{} |s".format(start_p+start-1))
IndexError: Replacement index 1 out of range for positional args tuple