9866e44445
Shells out to system ffmpeg with the same luma-key pipeline as ghostify.sh. Produces a VP9+alpha WebM (browser-decoded primary) and an animated WebP fallback. No new npm dependency; fails gracefully if ffmpeg is absent.
1 line
5.4 KiB
JavaScript
1 line
5.4 KiB
JavaScript
aW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnOwppbXBvcnQgeyBleGlzdHNTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnOwppbXBvcnQgeyBiYXNlbmFtZSwgZXh0bmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7CgovKgogKiBnaG9zdC1tZWRpYS5qcyDigJQgc2VydmVyLXNpZGUgZ2hvc3Qgc3ByaXRlIGNvbnZlcnNpb24uCiAqCiAqIFR1cm5zIGFuIHVwbG9hZGVkIGJsYWNrLWJhY2tncm91bmQgZ2hvc3QgTVA0IGludG8gYSB0cmFuc3BhcmVudCBhbmltYXRlZAogKiBXZWJNIChWUDkgKyBhbHBoYSkgcGx1cyBhbiBhbmltYXRlZCBXZWJQIGZhbGxiYWNrLCB1c2luZyBsdW1hIGtleWluZyBzbyB0aGUKICogYmxhY2sgYmVjb21lcyB0cmFuc3BhcmVudCBhbmQgdGhlIGdsb3cga2VlcHMgc29mdCBzZW1pLXRyYW5zcGFyZW50IGVkZ2VzLgogKgogKiBTaGVsbHMgb3V0IHRvIHRoZSBzeXN0ZW0gYGZmbXBlZ2AgYmluYXJ5IChubyBucG0gZGVwZW5kZW5jeSkuIElmIGZmbXBlZyBpcwogKiBub3QgaW5zdGFsbGVkLCBjb252ZXJzaW9uIGZhaWxzIGdyYWNlZnVsbHkgYW5kIHRoZSBjYWxsZXIga2VlcHMgdGhlIG9yaWdpbmFsLgogKgogKiBUaGlzIG1pcnJvcnMgdGhlIHN0YW5kYWxvbmUgZ2hvc3RpZnkuc2ggcGlwZWxpbmUgc28gbG9jYWwgYW5kIHNlcnZlciBvdXRwdXQKICogbWF0Y2guCiAqLwoKY29uc3QgRkZNUEVHID0gcHJvY2Vzcy5lbnYuRkZNUEVHX1BBVEggfHwgJ2ZmbXBlZyc7CgovLyBUdW5hYmxlcyAoZW52LW92ZXJyaWRhYmxlKSDigJQga2VwdCBpbiBzeW5jIHdpdGggZ2hvc3RpZnkuc2ggZGVmYXVsdHMuCmNvbnN0IFRIUkVTSCA9IHByb2Nlc3MuZW52LkdIT1NUX0tFWV9USFJFU0hPTEQgfHwgJzAuMDYnOwpjb25zdCBUT0wgPSBwcm9jZXNzLmVudi5HSE9TVF9LRVlfVE9MRVJBTkNFIHx8ICcwLjEwJzsKY29uc3QgU09GVCA9IHByb2Nlc3MuZW52LkdIT1NUX0tFWV9TT0ZUTkVTUyB8fCAnMC4xNSc7CmNvbnN0IEZQUyA9IHByb2Nlc3MuZW52LkdIT1NUX0ZQUyB8fCAnMTUnOwpjb25zdCBNQVhXID0gcHJvY2Vzcy5lbnYuR0hPU1RfTUFYVyB8fCAnNTEyJzsKY29uc3QgV0VCUF9RID0gcHJvY2Vzcy5lbnYuR0hPU1RfV0VCUF9RVUFMSVRZIHx8ICc4MCc7CmNvbnN0IFZQOV9DUkYgPSBwcm9jZXNzLmVudi5HSE9TVF9WUDlfQ1JGIHx8ICczMCc7CgovLyBUaGUgc2hhcmVkIGx1bWEta2V5ICsgZG93bnNjYWxlIGZpbHRlciBjaGFpbi4KZnVuY3Rpb24ga2V5Q2hhaW4oKSB7CiAgY29uc3Qga2V5ID0gYGZvcm1hdD1yZ2JhLGx1bWFrZXk9dGhyZXNob2xkPSR7VEhSRVNIfTp0b2xlcmFuY2U9JHtUT0x9OnNvZnRuZXNzPSR7U09GVH1gOwogIGNvbnN0IHNjYWxlID0gYHNjYWxlPSdtaW4oaXcsJHtNQVhXfSknOi0xOmZsYWdzPWxhbmN6b3NgOwogIHJldHVybiBgJHtrZXl9LGZwcz0ke0ZQU30sJHtzY2FsZX1gOwp9CgpmdW5jdGlvbiBydW4oYXJncykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCBwcm9jID0gc3Bhd24oRkZNUEVHLCBhcmdzLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAncGlwZSddIH0pOwogICAgbGV0IHN0ZGVyciA9ICcnOwogICAgcHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoZCkgPT4geyBzdGRlcnIgKz0gZC50b1N0cmluZygpOyB9KTsKICAgIHByb2Mub24oJ2Vycm9yJywgcmVqZWN0KTsgLy8gZS5nLiBmZm1wZWcgbm90IGZvdW5kIChFTk9FTlQpCiAgICBwcm9jLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7CiAgICAgIGlmIChjb2RlID09PSAwKSByZXNvbHZlKCk7CiAgICAgIGVsc2UgcmVqZWN0KG5ldyBFcnJvcihgZmZtcGVnIGV4aXRlZCAke2NvZGV9OiAke3N0ZGVyci5zbGljZSgtNTAwKX1gKSk7CiAgICB9KTsKICB9KTsKfQoKLyoqIFRydWUgaWYgYSB1c2FibGUgZmZtcGVnIGJpbmFyeSBpcyBvbiBQQVRILiAqLwpleHBvcnQgZnVuY3Rpb24gZmZtcGVnQXZhaWxhYmxlKCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY29uc3QgcHJvYyA9IHNwYXduKEZGTVBFRywgWyctdmVyc2lvbiddLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTsKICAgIHByb2Mub24oJ2Vycm9yJywgKCkgPT4gcmVzb2x2ZShmYWxzZSkpOwogICAgcHJvYy5vbignY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID09PSAwKSk7CiAgfSk7Cn0KCmZ1bmN0aW9uIG91dE5hbWUoc3JjRmlsZW5hbWUsIGV4dCkgewogIC8vIHdyYWl0aC0xNzE4Lm1wNCAtPiB3cmFpdGgtMTcxOC53ZWJtIC8gLndlYnAsIHdyaXR0ZW4gYWxvbmdzaWRlIHRoZSBzb3VyY2UuCiAgY29uc3Qgc3RlbSA9IGJhc2VuYW1lKHNyY0ZpbGVuYW1lLCBleHRuYW1lKHNyY0ZpbGVuYW1lKSk7CiAgcmV0dXJuIGAke3N0ZW19LiR7ZXh0fWA7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc291cmNlIE1QNCAoYWxyZWFkeSBzYXZlZCBpbiB1cGxvYWREaXIpIGludG8gdHJhbnNwYXJlbnQgd2VibSt3ZWJwLgogKgogKiBAcGFyYW0ge3N0cmluZ30gdXBsb2FkRGlyICBhYnNvbHV0ZSB1cGxvYWRzIGRpcmVjdG9yeQogKiBAcGFyYW0ge3N0cmluZ30gc3JjRmlsZW5hbWUgdGhlIG11bHRlciBmaWxlbmFtZSBvZiB0aGUgdXBsb2FkZWQgbXA0CiAqIEByZXR1cm5zIHtQcm9taXNlPHsgd2VibTogc3RyaW5nfG51bGwsIHdlYnA6IHN0cmluZ3xudWxsIH0+fSBuZXcgZmlsZW5hbWVzCiAqICAgICAgICAgIChub3QgZnVsbCBwYXRocykuIEVpdGhlciBtYXkgYmUgbnVsbCBpZiB0aGF0IGVuY29kZSBmYWlsZWQuCiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydEdob3N0TXA0KHVwbG9hZERpciwgc3JjRmlsZW5hbWUpIHsKICBjb25zdCBzcmNQYXRoID0gam9pbih1cGxvYWREaXIsIHNyY0ZpbGVuYW1lKTsKICBpZiAoIWV4aXN0c1N5bmMoc3JjUGF0aCkpIHRocm93IG5ldyBFcnJvcihgc291cmNlIG5vdCBmb3VuZDogJHtzcmNQYXRofWApOwoKICBjb25zdCB2ZiA9IGtleUNoYWluKCk7CiAgY29uc3QgcmVzdWx0ID0geyB3ZWJtOiBudWxsLCB3ZWJwOiBudWxsIH07CgogIC8vIC0tLSBXZWJNIChWUDkgKyBhbHBoYSk6IHRoZSBwcmltYXJ5LCBicm93c2VyLWRlY29kZWQgc3ByaXRlIC0tLQogIGNvbnN0IHdlYm1OYW1lID0gb3V0TmFtZShzcmNGaWxlbmFtZSwgJ3dlYm0nKTsKICB0cnkgewogICAgYXdhaXQgcnVuKFsKICAgICAgJy1oaWRlX2Jhbm5lcicsICctbG9nbGV2ZWwnLCAnZXJyb3InLCAnLXknLCAnLWknLCBzcmNQYXRoLAogICAgICAnLXZmJywgdmYsICctYW4nLAogICAgICAnLWM6dicsICdsaWJ2cHgtdnA5JywgJy1waXhfZm10JywgJ3l1dmE0MjBwJywKICAgICAgJy1iOnYnLCAnMCcsICctY3JmJywgVlA5X0NSRiwgJy1hdXRvLWFsdC1yZWYnLCAnMCcsCiAgICAgIGpvaW4odXBsb2FkRGlyLCB3ZWJtTmFtZSksCiAgICBdKTsKICAgIGlmIChzdGF0U3luYyhqb2luKHVwbG9hZERpciwgd2VibU5hbWUpKS5zaXplID4gMCkgcmVzdWx0LndlYm0gPSB3ZWJtTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlLmVycm9yKCdbZ2hvc3QtbWVkaWFdIHdlYm0gZW5jb2RlIGZhaWxlZDonLCBlLm1lc3NhZ2UpOwogIH0KCiAgLy8gLS0tIFdlYlAgZmFsbGJhY2s6IGZvciBpT1MgU2FmYXJpIC8gbm8tVlA5LWFscGhhIGJyb3dzZXJzIC0tLQogIGNvbnN0IHdlYnBOYW1lID0gb3V0TmFtZShzcmNGaWxlbmFtZSwgJ3dlYnAnKTsKICB0cnkgewogICAgYXdhaXQgcnVuKFsKICAgICAgJy1oaWRlX2Jhbm5lcicsICctbG9nbGV2ZWwnLCAnZXJyb3InLCAnLXknLCAnLWknLCBzcmNQYXRoLAogICAgICAnLXZmJywgdmYsICctbG9vcCcsICcwJywgJy1hbicsCiAgICAgICctYzp2JywgJ2xpYndlYnBfYW5pbScsICctbG9zc2xlc3MnLCAnMCcsICctcTp2JywgV0VCUF9RLAogICAgICAnLXByZXNldCcsICdkcmF3aW5nJywgJy1jb21wcmVzc2lvbl9sZXZlbCcsICc2JywKICAgICAgam9pbih1cGxvYWREaXIsIHdlYnBOYW1lKSwKICAgIF0pOwogICAgaWYgKHN0YXRTeW5jKGpvaW4odXBsb2FkRGlyLCB3ZWJwTmFtZSkpLnNpemUgPiAwKSByZXN1bHQud2VicCA9IHdlYnBOYW1lOwogIH0gY2F0Y2ggKGUpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ1tnaG9zdC1tZWRpYV0gd2VicCBlbmNvZGUgZmFpbGVkOicsIGUubWVzc2FnZSk7CiAgfQoKICByZXR1cm4gcmVzdWx0Owp9Cg== |