Python "Typeerror arrays to stack must be passed as a "sequence" type such as list or tuple." hatası

Sesi atma imkanınız var mı?

En üste proje yazanda var.

Sesi atma imkanınız var mı?

Python:
import numpy as np.
import librosa.
from scipy.signal import correlate.

main_audio, sr_main = librosa.load('search.wav', sr=None)

target_audio, sr_target = librosa.load('klaket.mp3', sr=None)

main_audio /= np.max(np.abs(main_audio))
target_audio /= np.max(np.abs(target_audio))

correlation = correlate(main_audio, target_audio, mode='valid')

max_correlation_value = np.max(correlation)
max_correlation_index = np.argmax(correlation)

start_time_seconds = max_correlation_index / sr_main.

print(f"En yüksek korelasyon değeri: {max_correlation_value}")
print(f"En yüksek korelasyonun başladığı saniye: {start_time_seconds}")

threshold = 0.7
if max_correlation_value > threshold:
 print("Aranan ses dosyası bulundu!")
else:
 print("Aranan ses dosyası bulunamadı.")

Benim istediğim bu değil.
 
Amaç bunun otomatik olması😀
Otomatik olacak zaten. Dediğim her şeyi kodda yap zor olanı ben sana verdim zaten.
Klip.mp4'ü alacaksın, mp3'e dönüştüreceksin -> clip.mp3,
Elinde sample.mp3 zaten var. Bir de aradığın ses var ona da search.mp3 diyelim.

Daha sonra verdiğim kodu fonksiyonlaştır.
fonk(clip.mp3) yaparak clip'in başlangıç saniyesini bul atıyorum 15.
fonk(sample.mp3) yaparak sample'ın başlangıç saniyesini bul.

Daha sonra farklı bir kütüphane ile bu saniyelerden öncesini Klip.mp4'de ve sample.mp3'te kes. Bu iki dosyayı yine farklı bir kütüphane bulup birleştir.
 
Otomatik olacak zaten. Dediğim her şeyi kodda yap zor olanı ben sana verdim zaten.
Klip. MP4'ü alacaksın, MP3'e dönüştüreceksin -> clip. MP3,
Elinde sample. MP3 zaten var. Bir de aradığın ses var ona da Search. MP3 diyelim.

Daha sonra verdiğim kodu fonksiyonlaştır.
fonk(clip.mp3) yaparak Clip'in başlangıç saniyesini bul atıyorum 15.
fonk(sample.mp3) yaparak Sample'ın başlangıç saniyesini bul.

Daha sonra farklı bir kütüphane ile bu saniyelerden öncesini klip. MP4'de ve sample. MP3'te kes. Bu iki dosyayı yine farklı bir kütüphane bulup birleştir.

Hocam yapmaya çalıştım yine bir hata çıktı bakarsanız çok sevinirim.
Python sürümü: 3.10.11 ama 3.9 sürümündede yapabiliriz.
Kod:

Python:
import os
import numpy as np
import librosa
from scipy.signal import correlate
from pydub import AudioSegment
import cv2
import subprocess

def find_start_time(audio_path, target_audio_path):
 main_audio, sr_main = librosa.load(audio_path, sr=None)
 target_audio, sr_target = librosa.load(target_audio_path, sr=None)

 main_audio /= np.max(np.abs(main_audio))
 target_audio /= np.max(np.abs(target_audio))

 correlation = correlate(main_audio, target_audio, mode='valid')

 max_correlation_value = np.max(correlation)
 max_correlation_index = np.argmax(correlation)

 start_time_seconds = max_correlation_index / sr_main
 return start_time_seconds

def cut_and_merge_video(audio_path, video_path, start_time, output_path):
 audio = AudioSegment.from_file(audio_path)
 start_time_ms = int(start_time * 1000)
 trimmed_audio = audio[start_time_ms:]

 trimmed_audio.export(output_path, format="mp3")

def get_audio_frame_rate(audio_path):
 audio, sr = librosa.load(audio_path, sr=None)
 return sr

def convert_to_mp3(input_path, output_path):
 audio = AudioSegment.from_file(input_path)
 audio.export(output_path, format="mp3")

def merge_video_audio(video_path, audio_path, output_path):
 video = cv2.VideoCapture(video_path)
 video_fps = int(video.get(cv2.CAP_PROP_FPS))

 audio_fps = get_audio_frame_rate(audio_path)
 audio = AudioSegment.from_file(audio_path, frame_rate=audio_fps)

 audio = audio.set_frame_rate(video_fps)
 audio = audio[:int(video.get(cv2.CAP_PROP_FRAME_COUNT))]

 final_audio = audio._data
 fourcc = cv2.VideoWriter_fourcc(*'mp4v')
 output_video = cv2.VideoWriter(output_path, fourcc, video_fps, (int(video.get(3)), int(video.get(4))))

 while True:
 ret, frame = video.read()
 if not ret:
 break

 output_video.write(frame)

 output_video.release()

 video.release()

# Örnek kullanım
clip_path = "klip.mp4"
sample_path = "ses.wav"
klaket_path = "klaket.wav"
output_path = "final.mp4"

# "klaket.wav" ve "ses.wav" dosyalarını ".MP3" formatına dönüştür
convert_to_mp3(klaket_path, "klaket.mp3")
convert_to_mp3(sample_path, "ses.mp3")

# Başlangıç saniyelerini bulun
clip_start_time = find_start_time(clip_path, "klaket.mp3")
sample_start_time = find_start_time(sample_path, "ses.mp3")

# Klip ve örnek dosyalarını kesin ve birleştirin
cut_and_merge_video(clip_path, clip_path, clip_start_time, "trimmed_clip.mp3")
cut_and_merge_video(sample_path, sample_path, sample_start_time, "trimmed_sample.mp3")

# Ses ve video dosyalarını birleştirin ve video ve ses akımlarını etiketleyin
merge_video_audio(clip_path, "trimmed_clip.mp3", "output_clip.mp4")
merge_video_audio(sample_path, "trimmed_sample.mp3", "output_sample.mp4")

# Ses ve video dosyalarını birleştirin
os.system(f'ffmpeg -i output_clip.mp4 -i output_sample.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v];[0:a][1:a]amerge=inputs=2[a]" -map "[v]" -map "[a]" {output_path}')

# Geçici dosyaları temizle
os.remove("klaket.mp3")
os.remove("ses.mp3")
os.remove("trimmed_clip.mp3")
os.remove("trimmed_sample.mp3")
os.remove("output_clip.mp4")
os.remove("output_sample.mp4")

Hata:

Kod:
Exception has occurred: error
sampling rate not > 0
 File "/Users/dorukmacdo/Desktop/STD5_SES_ESLEME/main.py", line 46, in merge_video_audio
 audio = audio.set_frame_rate(video_fps)
 File "/Users/dorukmacdo/Desktop/STD5_SES_ESLEME/main.py", line 84, in <module>
 merge_video_audio(sample_path, "trimmed_sample.mp3", "output_sample.mp4")
audioop.error: sampling rate not > 0

Proje dosyaları ilk baştaki mesajda bilginiz olsun.
@özgün deniz dostum bakabilir misin?
 
Son düzenleme:
Akşam bakacağım.

Dostum böyle bir şey yazdım ama "yeni_ses_kaydi. WAV" dosyasında sıkıntı var çözümünü biliyor musun? Ekstra olarak bu kod şu an Python 3.9.13 için yazdım.

Python:
import librosa.
import numpy as np.
from moviepy.editor import VideoFileClip, AudioFileClip.
import wave.

def find_klaket_time(audio_file, klaket_file, threshold=0.1):
 # Ses kaydı ve klaket sesi verilerini yükle.
 audio_data, sample_rate_audio = librosa.load(audio_file, sr=None)
 klaket_data, sample_rate_klaket = librosa.load(klaket_file, sr=sample_rate_audio) # Örnekleme hızını ayarla.

 # Şablon eşleştirmeyi çapraz-korelasyon kullanarak yap.
 correlation = np.correlate(audio_data, klaket_data, mode='same')

 # Maksimum korelasyonun olduğu zamanı bul.
 klaket_time_index = np.argmax(correlation)
 klaket_time = klaket_time_index / sample_rate_audio.

 return klaket_time, klaket_data.

# Video dosyasından sesi çıkar.
video_file = "klip.mp4"
audio_file = "klip_ses.wav"

try:
 clip = VideoFileClip(video_file)
 audio_clip = clip.audio
 audio_clip.write_audiofile(audio_file)

 print(f"Video dosyasından ses başarıyla çıkarıldı ve ses dosyası oluşturuldu: {audio_file}")
except Exception as e:
 print("Hata:", e)

# Ses kaydı dosyası ve klaket sesi dosyası.
audio_file_1 = "klip_ses.wav"
audio_file_2 = "ses_kaydi.wav"
klaket_file = "k1.wav"

try:
 # İlk ses dosyasında klaket sesinin zamanını bul.
 klaket_time_1, klaket_data = find_klaket_time(audio_file_1, klaket_file)
 print(f"Klaket sesi {klaket_time_1:.2f} saniyede klip_ses.wav dosyasında çaldı.")

 # İkinci ses dosyasında klaket sesinin zamanını bul.
 klaket_time_2, _ = find_klaket_time(audio_file_2, klaket_file)
 print(f"Klaket sesi {klaket_time_2:.2f} saniyede ses_kaydi.wav dosyasında çaldı.")

 # "klip_ses.wav" dosyasında klaket sesinin çaldığı zaman ile "ses_kaydi.wav" dosyasındaki klaket sesinin çaldığı zaman arasındaki farkı hesapla.
 time_difference = klaket_time_2 - klaket_time_1.

 print(f"Ses dosyaları arasındaki zaman farkı: {time_difference:.2f} saniye")

 # "ses_kaydi.wav" dosyasını belirtilen zaman farkı kadar kaydır.
 audio_data_2, sample_rate_audio_2 = librosa.load(audio_file_2, sr=None)
 shifted_audio_data = np.roll(audio_data_2, int(time_difference * sample_rate_audio_2))

 # Yeni klaket sesiyle eşlenmiş sesi içeren yeni .wav dosyası oluştur.
 new_audio_file = "yeni_ses_kaydi.wav"
 with wave.open(new_audio_file, 'wb') as wf:
 wf.setnchannels(1)
 wf.setsampwidth(2)
 wf.setframerate(sample_rate_audio_2)
 wf.writeframes(shifted_audio_data.tobytes())

 print(f"Yeni ses dosyası oluşturuldu: {new_audio_file}")

 # Yeni klaket sesiyle eşleşmiş sesi içeren yeni .mp4 dosyası oluştur.
 new_video_file = "yeni_klip.mp4"
 new_audio_clip = AudioFileClip(new_audio_file)
 new_video_clip = clip.set_audio(new_audio_clip)
 new_video_clip.write_videofile(new_video_file, codec='libx264', audio_codec='aac')

 print(f"Yeni .mp4 dosyası oluşturuldu: {new_video_file}")

except ValueError as e:
 print("Hata:", e)

Dostum böyle bir şey yazdım ama "yeni_ses_kaydi. WAV" dosyasında sıkıntı var çözümünü biliyor musun? Ekstra olarak bu kod şu an Python 3.9.13 için yazdım.

Python:
import librosa.
import numpy as np.
from moviepy.editor import VideoFileClip, AudioFileClip.
import wave.

def find_klaket_time(audio_file, klaket_file, threshold=0.1):
 # Ses kaydı ve klaket sesi verilerini yükle.
 audio_data, sample_rate_audio = librosa.load(audio_file, sr=None)
 klaket_data, sample_rate_klaket = librosa.load(klaket_file, sr=sample_rate_audio) # Örnekleme hızını ayarla.

 # Şablon eşleştirmeyi çapraz-korelasyon kullanarak yap.
 correlation = np.correlate(audio_data, klaket_data, mode='same')

 # Maksimum korelasyonun olduğu zamanı bul.
 klaket_time_index = np.argmax(correlation)
 klaket_time = klaket_time_index / sample_rate_audio.

 return klaket_time, klaket_data.

# Video dosyasından sesi çıkar.
video_file = "klip.mp4"
audio_file = "klip_ses.wav"

try:
 clip = VideoFileClip(video_file)
 audio_clip = clip.audio
 audio_clip.write_audiofile(audio_file)

 print(f"Video dosyasından ses başarıyla çıkarıldı ve ses dosyası oluşturuldu: {audio_file}")
except Exception as e:
 print("Hata:", e)

# Ses kaydı dosyası ve klaket sesi dosyası.
audio_file_1 = "klip_ses.wav"
audio_file_2 = "ses_kaydi.wav"
klaket_file = "k1.wav"

try:
 # İlk ses dosyasında klaket sesinin zamanını bul.
 klaket_time_1, klaket_data = find_klaket_time(audio_file_1, klaket_file)
 print(f"Klaket sesi {klaket_time_1:.2f} saniyede klip_ses.wav dosyasında çaldı.")

 # İkinci ses dosyasında klaket sesinin zamanını bul.
 klaket_time_2, _ = find_klaket_time(audio_file_2, klaket_file)
 print(f"Klaket sesi {klaket_time_2:.2f} saniyede ses_kaydi.wav dosyasında çaldı.")

 # "klip_ses.wav" dosyasında klaket sesinin çaldığı zaman ile "ses_kaydi.wav" dosyasındaki klaket sesinin çaldığı zaman arasındaki farkı hesapla.
 time_difference = klaket_time_2 - klaket_time_1.

 print(f"Ses dosyaları arasındaki zaman farkı: {time_difference:.2f} saniye")

 # "ses_kaydi.wav" dosyasını belirtilen zaman farkı kadar kaydır.
 audio_data_2, sample_rate_audio_2 = librosa.load(audio_file_2, sr=None)
 shifted_audio_data = np.roll(audio_data_2, int(time_difference * sample_rate_audio_2))

 # Yeni klaket sesiyle eşlenmiş sesi içeren yeni .wav dosyası oluştur.
 new_audio_file = "yeni_ses_kaydi.wav"
 with wave.open(new_audio_file, 'wb') as wf:
 wf.setnchannels(1)
 wf.setsampwidth(2)
 wf.setframerate(sample_rate_audio_2)
 wf.writeframes(shifted_audio_data.tobytes())

 print(f"Yeni ses dosyası oluşturuldu: {new_audio_file}")

 # Yeni klaket sesiyle eşleşmiş sesi içeren yeni .mp4 dosyası oluştur.
 new_video_file = "yeni_klip.mp4"
 new_audio_clip = AudioFileClip(new_audio_file)
 new_video_clip = clip.set_audio(new_audio_clip)
 new_video_clip.write_videofile(new_video_file, codec='libx264', audio_codec='aac')

 print(f"Yeni .mp4 dosyası oluşturuldu: {new_video_file}")

except ValueError as e:
 print("Hata:", e)
Dostum gerek kalmadı ben çözdüm yinede teşekkürler.
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı