Skip to content

Instantly share code, notes, and snippets.

@Rejdukien
Last active November 3, 2019 02:19
Show Gist options
  • Save Rejdukien/e88d728e62d098a9aad7a331cd4e2506 to your computer and use it in GitHub Desktop.
Save Rejdukien/e88d728e62d098a9aad7a331cd4e2506 to your computer and use it in GitHub Desktop.
Smooth Timelapse via structural similarity - modified reps.cc script
#!/usr/bin/env python3
# Requirements: pip install scikit-image joblib imageio
from joblib import Parallel, delayed
from skimage.metrics import structural_similarity as ssim
from skimage.io import imsave as saveImage
import imageio
startingFrame = 0
number = 120
print("Loading...")
vid = imageio.get_reader('video.mp4', 'ffmpeg')
#frame_count = 20400
frame_count = vid.count_frames()
print("Loaded %d images" % frame_count)
previous = vid.get_data(startingFrame)
file = 0
j = startingFrame
def ssim_task(img):
return ssim(img, previous, multichannel=True)
while(j < frame_count-number):
best_s = 0
results = Parallel(n_jobs=12)(delayed(ssim_task)(vid.get_data(i+j)) for i in range(1,number))
bestResult = max(results)
bestResultIndex = results.index(bestResult)
bestFrameIndex = j+bestResultIndex+1
bestFrame = vid.get_data(bestFrameIndex)
saveImage("intermediate/IMG_%06d.jpg" % file,bestFrame)
print("Image %d: %d(%d) with s %f (%d%%)" % (file, bestFrameIndex, bestResultIndex, bestResult, (float(bestFrameIndex)/frame_count*100)))
file += 1
j = bestFrameIndex
previous = bestFrame
print("Done!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment