Skip to content

Instantly share code, notes, and snippets.

@jakedowns
Last active March 16, 2024 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakedowns/6dfba5185665216d03774501bb57fccf to your computer and use it in GitHub Desktop.
Save jakedowns/6dfba5185665216d03774501bb57fccf to your computer and use it in GitHub Desktop.
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