Как записать видеофайл с помощью MoviepyPython

Программы на Python
Ответить
Anonymous
 Как записать видеофайл с помощью Moviepy

Сообщение Anonymous »

Я пытаюсь реализовать всплеск испуга в файле .mp4. Мне удалось сделать это успешно, но как я изменил исходные аудиорезультаты в массиве. Проблема, с которой я столкнулся, заключается в том, что функция write_videofile, похоже, использует только структуру определенного типа для записи аудиофайла. Это то, что у меня есть, любая помощь будет полезна.

Код: Выделить всё

#Necessary imports
import os as os
import moviepy.editor as mp
from playsound import playsound
import librosa as librosa
import librosa.display
import sounddevice as sd
import numpy as np
from moviepy.audio.AudioClip import AudioArrayClip

#Set working directory
os.chdir('/Users/matthew/Desktop/Python_startle')

#Upload the video and indicate where in the clip the burst should be inserted
vid = mp.VideoFileClip("37vids_balanced/Baby_Babble.mp4")
audio, sr = librosa.load('37vids_balanced/Baby_Babble.mp4')
librosa.display.waveplot(audio, sr = sr)
sd.play(audio, sr)

audio_duration = librosa.get_duration(filename = '37vids_balanced/Baby_Babble.mp4')
start_point_sec = 6
start_point_samp = start_point_sec * sr
burst_samp = int(sr * .05) #how many samples are in the noise burst
burst_window = audio[start_point_samp : start_point_samp + burst_samp].astype(np.int32) #Isolating part of the audio clip to add burst to

#Creating startle burst
noise = np.random.normal(0,1,len(burst_window))

#Inserting the noise created into the portion of the audio that is wanted
audio[start_point_samp : start_point_samp + burst_samp] = audio[start_point_samp : start_point_samp + burst_samp].astype(np.int64) + noise #Puts the modified segment into the original audio
librosa.display.waveplot(audio, sr = sr)
sd.play(audio, sr)

new_vid = vid.set_audio(audio)
sd.play(new_vid.audio, sr)

#Trying to get the  audio into the proper form to convert into a mp4

new_vid.audio = [[i] for i in new_vid.audio] #This makes the data into a list because the 'AudioArrayClip' could not take in an array because an array is not 'iterable' this might not be the best solution but it has worked so far
new_vid.audio = AudioArrayClip(new_vid.audio, fps = new_vid.fps)

new_vid.write_videofile('37vids_balanced_noise/Baby_Babble.mp4')

Возможно, есть более простой способ преобразовать массив в итерируемую форму.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»