# HG changeset patch # User Arne Babenhauserheide # Date 1620082579 -7200 # Tue May 04 00:56:19 2021 +0200 # Node ID fffe4b7971013001258fa14daed77b9f4c6cb105 # Parent b7c3e2ab3000a15b8d17e3dad668720b7dc7707f levenshtein is too slow. Just shuffle diff --git a/site/gms.scm b/site/gms.scm --- a/site/gms.scm +++ b/site/gms.scm @@ -62,30 +62,6 @@ (list char-set:symbol char-set:punctuation char-set:iso-control char-set:blank)))))) " ")) -(define levenshtein - (let ((cache '())) - (λ (s t) - (define key `(,s ,t)) - (or (and=> (assoc key cache) cdr) - (let ((res - (let lev ((s (string->list s)) - (sl (string-length s)) - (t (string->list t)) - (tl (string-length t))) - (cond ((zero? sl) tl) - ((zero? tl) sl) - (else - (min (+ (lev (cdr s) (- sl 1) t tl) 1) - (+ (lev s sl (cdr t) (- tl 1)) 1) - (+ (lev (cdr s) (- sl 1) (cdr t) (- tl 1)) - (if (char=? (car s) (car t)) 0 1)))))))) - (set! cache (alist-cons key res cache)) - res))))) - -(define (levenshtein-sort stream-files streamname) - (display 'stream-files) - (write stream-files) - (newline) (define (convert-video filename) "Convert a video file to a freenet stream" @@ -103,7 +79,7 @@ (inexact->exact (string->number (read-first-line (format #f "ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ~a" filename))))) (define (ffmpeg index start stop) - (when (and #false (< start duration-seconds)) ;; skip early when the video is finished. + (when (< start duration-seconds) ;; skip early when the video is finished. (close-pipe (open-input-pipe (format #f "ffmpeg -ss ~d -to ~d -accurate_seek -i ~a -y -g 360 -q:a 3 -q:v 3 -filter:v scale=640:-1 ~a-~3'0d.ogv" start stop filename basename-without-extension index))))) @@ -114,14 +90,11 @@ (when (not (equal? name filename)) (close-pipe (open-input-pipe (format #f "mv ~a ~a" filename name)))) ;; create stream playlist that continues with random other playlists after finishing. This might benefit from heuristics like sorting later streams by similarity to the original stream - (close-pipe (open-input-pipe (format #f "ls ~a-*ogv > ~a" basename-without-extension streamname))) - (let* ((stream-files (read-all-lines "ls *-stream.m3u")) - (sorted (levenshtein-sort stream-files streamname))) - (map (λ (filename)(format #f "echo '~a' >> ~a" filename streamname)) sorted) - (list (cons 'filename filename) - (cons 'basename name) - (cons 'streamname streamname) - (cons 'title (basename->title basename-without-extension))))) + (close-pipe (open-input-pipe (format #f "(ls ~a-*ogv; ls *-stream.m3u | shuf) > ~a" basename-without-extension streamname))) + (list (cons 'filename filename) + (cons 'basename name) + (cons 'streamname streamname) + (cons 'title (basename->title basename-without-extension)))) (define (add-video next-video) (define next-video-metadata (convert-video next-video))