Skip to content

Instantly share code, notes, and snippets.

@Filarius
Created December 23, 2024 15:10
Show Gist options
  • Select an option

  • Save Filarius/6881efdfb0030fa84a96d8b8ca6de380 to your computer and use it in GitHub Desktop.

Select an option

Save Filarius/6881efdfb0030fa84a96d8b8ca6de380 to your computer and use it in GitHub Desktop.
ffmpeg av1 metric testing
from time import time
import csv
from ffmpeg import output
from ffmpy import FFmpeg
from ffmpeg_quality_metrics import FfmpegQualityMetrics as metric
#crfs = [str(i) for i in range(27,40,5)]+
crfs = [str(i) for i in range(25,41,5)]
#presets = [str(i) for i in range(13,6,-1)]
presets = [str(i) for i in range(13,4,-1)]
inputs = ['path to video source']
ffmpeg_path = 'path to ffmpeg'
#s = metr.calculate(["ssim", "psnr","vmaf"])
#a = 2
for crf in crfs:
for preset in presets:
input = inputs[0]
output = f"av1_svt_{crf}_{preset}.mkv"
ff = FFmpeg(
ffmpeg_path,
# {'-y -hide_banner -loglevel info':None},
{'-y -hide_banner': None},
inputs={input:""},
#outputs={output:f'-vf trim=duration=180 -c:v libsvtav1 -crf {crf} -preset {preset} -an'}
outputs={output: f'-c:v libsvtav1 -crf {crf} -preset {preset} -an'}
)
print(ff.cmd)
time_start = time()
for i in range(5):
try:
ff.run()
except:
continue
break
time_end = time()
duration = time_end-time_start
time_end = None
time_start = None
metr = metric(input, output, framerate=10)
for i in range(5):
try:
data = metr.calculate(['psnr', 'ssim'])
except:
continue
break
mse = (sum([frame["mse_avg"] for frame in data["psnr"]]) / len(data["psnr"]))
psnr = (sum([frame["psnr_avg"] for frame in data["psnr"]]) / len(data["psnr"]))
ssim = (sum([frame["ssim_avg"] for frame in data["ssim"]]) / len(data["ssim"]))
with open ('text.csv','a',newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([crf,preset,mse,psnr,ssim,duration])
print(crf,preset)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment