%matplotlib inline
import os, subprocess
import numpy as np
import matplotlib.pyplot as plt
def read_frame(filename, timestamp, w=1920, h=1080, extra_cmd=[]):
cmd = (['ffmpeg', '-i', filename, '-ss', str(timestamp), '-vframes', '1'] + extra_cmd +
['-f', 'rawvideo', '-pix_fmt', 'yuv420p10le', '-'])
out = subprocess.run(cmd, stdout=subprocess.PIPE, check=True)
len_y = w*h*2
len_uv = len_y//4
y = np.frombuffer(out.stdout[:len_y], dtype='int16').reshape(h,w)
u = np.frombuffer(out.stdout[len_y:-len_uv], dtype='int16').reshape(h//2,w//2)
v = np.frombuffer(out.stdout[-len_uv:], dtype='int16').reshape(h//2,w//2)
return (y, u, v)
y1, cb1, cr1 = read_frame('Pete Fire Hand.MP4', 36)
y2, cb2, cr2 = read_frame('Pete Fire Hand.MP4', 36, extra_cmd=['-vf','hqdn3d'])
y3, cb3, cr3 = read_frame('Pete Fire Hand.MP4', 36, extra_cmd=['-vf','atadenoise=s=5'])
plt.imshow(y1, cmap='gray')
plt.show()
plt.imshow(y1-y2)
plt.colorbar()
plt.title("hqdn3d Y-Differenz")
plt.show()
plt.imshow(cb1-cb2)
plt.colorbar()
plt.title("hqdn3d Cb-Differenz")
plt.show()
plt.imshow(cr1-cr2)
plt.colorbar()
plt.title("hqdn3d Cr-Differenz")
plt.show()
plt.imshow(y1-y3)
plt.colorbar()
plt.title("atadenoise Y-Differenz")
plt.show()
plt.imshow(cb1-cb3)
plt.colorbar()
plt.title("atadenoise Cb-Differenz")
plt.show()
plt.imshow(cr1-cr3)
plt.colorbar()
plt.title("atadenoise Cr-Differenz")
plt.show()
print("--- Y ---")
print("roh: ", np.unique(np.fmod(y1, 4), return_counts=True))
print("hqdn3d: ", np.unique(np.fmod(y2, 4), return_counts=True))
print("atadenoise:", np.unique(np.fmod(y3, 4), return_counts=True))
print("--- Cb ---")
print("roh: ", np.unique(np.fmod(cb1, 4), return_counts=True))
print("hqdn3d: ", np.unique(np.fmod(cb2, 4), return_counts=True))
print("atadenoise:", np.unique(np.fmod(cb3, 4), return_counts=True))
print("--- Cr ---")
print("roh: ", np.unique(np.fmod(cr1, 4), return_counts=True))
print("hqdn3d: ", np.unique(np.fmod(cr2, 4), return_counts=True))
print("atadenoise:", np.unique(np.fmod(cr3, 4), return_counts=True))
plt.title('Y')
v, fr = np.unique(np.fmod(y1, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(y2, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(y3, 4), return_counts=True)
plt.bar(v, fr, fill=False)
plt.show()
plt.title('Cb')
v, fr = np.unique(np.fmod(cb1, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(cb2, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(cb3, 4), return_counts=True)
plt.bar(v, fr, fill=False)
plt.show()
plt.title('Cr')
v, fr = np.unique(np.fmod(cr1, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(cr2, 4), return_counts=True)
plt.bar(v, fr, fill=False)
v, fr = np.unique(np.fmod(cr3, 4), return_counts=True)
plt.bar(v, fr, fill=False)
plt.show()
print(" Y Cb Cr")
print("roh: ", len(np.unique(y1)), len(np.unique(cb1)), len(np.unique(cr1)))
print("hqdn3d: ", len(np.unique(y2)), len(np.unique(cb2)), len(np.unique(cr2)))
print("atadenoise: ", len(np.unique(y3)), len(np.unique(cb3)), len(np.unique(cr3)))
print("\n--- roh ---")
print("Y:\n", np.unique(y1), "\nCb:\n", np.unique(cb1), "\nCr:\n", np.unique(cr1))
print("\n--- hqdn3d ---")
print("Y:\n", np.unique(y2), "\nCb:\n", np.unique(cb2), "\nCr:\n", np.unique(cr2))
print("\n--- atadenaoise ---")
print("Y:\n", np.unique(y3), "\nCb:\n", np.unique(cb3), "\nCr:\n", np.unique(cr3))