Last active
March 16, 2024 20:03
-
-
Save jakedowns/6dfba5185665216d03774501bb57fccf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import subprocess | |
import sys | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from scipy.io import wavfile | |
def create_visualization(audio_file, output_image): | |
# Load the audio file | |
samplerate, data = wavfile.read(audio_file) | |
if data.ndim > 1: # Stereo | |
data = data.mean(axis=1) # Convert to mono by averaging channels | |
# Perform a Fourier transform to get frequency spectrum | |
freqs = np.fft.rfftfreq(len(data), 1/samplerate) | |
fft_spectrum = np.abs(np.fft.rfft(data)) | |
# Simplified visualization: plot a logarithmic spectrum | |
plt.figure(figsize=(10, 4)) | |
plt.semilogx(freqs, fft_spectrum) | |
plt.xlabel('Frequency (Hz)') | |
plt.ylabel('Amplitude') | |
plt.title('Audio Spectrum') | |
plt.savefig(output_image) | |
plt.close() | |
def extract_audio(video_file, audio_file): | |
subprocess.call(['ffmpeg', '-i', video_file, '-q:a', '0', '-map', 'a', audio_file, '-y']) | |
def combine_video_audio(original_video, visualization_video, output_file): | |
subprocess.call(['ffmpeg', '-i', original_video, '-i', visualization_video, '-filter_complex', "[0:v][1:v] overlay=0:0", '-c:v', 'libx264', '-crf', '18', '-preset', 'veryfast', output_file, '-y']) | |
if __name__ == "__main__": | |
if len(sys.argv) < 2: | |
print("Usage: python script.py <input_video.mp4>") | |
sys.exit(1) | |
input_video = sys.argv[1] | |
audio_file = "extracted_audio.mp3" | |
visualization_video = "visualization.mp4" | |
output_video = "output_with_visualization.mp4" | |
# Step 1: Extract the audio from the video | |
print("Extracting audio...") | |
extract_audio(input_video, audio_file) | |
# Step 2: Generate a visualization for the audio | |
# Note: This step is not implemented here. You should replace the next print statement | |
# with your method of generating a visualization video file named "visualization.mp4" | |
print("Generating audio visualization... (This step is not implemented in the script)") | |
# Assuming "visualization.mp4" is created and exists. | |
# Step 3: Combine the original video with the audio visualization | |
print("Combining video with visualization...") | |
combine_video_audio(input_video, visualization_video, output_video) | |
print("Process completed. The output video is:", output_video) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment