This is a simple tool to allow you to create WebM files with changing aspect ratios.

Overview

WackyWebM

WackyWebM is a tool that allows you to create WebM video files with changing aspect ratios.

If you're having issues, want to share your custom modes, or learn from the community join the Discord at the bottom of this readme.

Dependencies

NodeJS

To begin installation, you must install NodeJS first. You can find the NodeJS download here.

Select your OS, and use the installer. After finished installing, click the finish button.

image

FFmpeg

After installing NodeJS, you need to download FFmpeg next. To install FFmpeg you need to go to this link and select the green Download button.

image

Windows

To download FFmpeg for Windows, navigate to the Windows logo and select Windows builds by BtbN after that, it is recommended to select ffmpeg-master-latest-win64-gpl-shared.zip

Once downloaded, unzip the file and move it to somewhere safe.

Select that folder, then rename it to ffmpeg

image

Copy the unzipped folder, direct to This PC, enter your C: drive and paste the ffmpeg folder in there.

image

After moving the ffmpeg folder into your C: drive, open Command Prompt with administrator and run this: setx /m PATH "C:\ffmpeg\bin;%PATH%" (If, for some reason, you are unable to run Command Prompt with administrator permissions, you can hit the windows key, then type "edit environment variables for your account" and hit enter, then you need to click "Path", then click "Edit," then you click "New" and paste in "C:\ffmpeg\bin" and then make sure to click "Ok" in both windows).

Now, type in "ffmpeg" to the command prompt. If you get an error, you need to log out and log back in, run ffmpeg inside of the command prompt window once more, and if you do not get an error you're all set. If you still get an error, you can try restarting your computer, and typing "ffmpeg" into the command prompt again. If it still doesn't work, you can get help in #support in this discord server.

MacOS

For MacOS users, refer to this tutorial for FFmpeg installation.

Linux

For Linux users, refer to this tutorial for FFmpeg installation.

How to Run

After you have finished installing the dependencies, download the WackyWebM folder by clicking the Code button in the top right of this page, followed by clicking Download ZIP

image

Once the ZIP is fully installed, you need to extract the folder inside. After doing this, you are set.

On Windows, use the run.bat file to start WackyWebM.

On MacOS and Linux, use chmod +x run.sh then sh run.sh file to start WackyWebM

If you're on windows, you can simply double-click run.bat, as long as it's in the same folder as wackywebm.js.

You can also tweak the script to taste if you want to adjust how your file is generated.

You can also change the bitrate of the output file by tweaking -b (Default is 1M, which means 1 MB/s. If the file is too large, consider lowering this value.)

Modes

  • Bounce (Default): The video bounces up and down.
  • Shutter: The video bounces left to right.
  • Sporadic: The video glitches and wobbles randomly.
  • Shrink: The video shrinks vertically until it's just one pixel thin.
  • AudioBounce: The video's vertical height changes relative to the current audio level verses the highest within the video.
  • AudioShutter: The video's horizontal width changes relative to the current audio level verses the highest within the video.
  • Jumpscare: The video shrinks down small, then gets big at the specified frame.
  • Keyframes: The video's height and width change based on a number of keyframes outlined in the file given as an argument. The format is as follows:
    • Every line consists of 4 comma-seperated values:
      • first, the time in the video of the keyframe; either one integer representing seconds, or two, seperated by any one of the characters ., : or -, where the first still represents seconds, and the second represents frames.
      • next, the width, then the height at that keyframe (in pixels)
      • finally, the interpolation with which to advance towards the next keyframe (currently, only linear is supported.)
    • If it isn't overwritten, an implicit keyframe at 0 frames into the video is added with linear interpolation and the video's original size.
    • To use this mode, add -k with the path to your csv file.

Additionally, any 2 modes can be combined using a + symbol, like Bounce+Shutter. If one only specifies width, and one only specifies height, then those respective values are used. If there is a conflict, the value from the latter of the 2 modes is used (so Shrink+Bounce would result in the same effect as just Bounce)

Support

If you encounter bugs, issues, or have recommendations, feel free to join the Discord here.Discord Invite Widget

Comments
  • Files output larger than 8MB

    Files output larger than 8MB

    A lot of files output bigger than 8MB. Could you implement compressing the video after? If you compress it with FFmpeg it removes the wacky aspect ratios.

    enhancement 
    opened by Loganbogan9 7
  • Keyframes not working

    Keyframes not working

    Is there an existing issue for this?

    • [X] I have searched the existing issues

    Current Behavior

    File: video.mov Arguments: --keyframes = "5, 0, 480" Error: No such file or directory '../WackyWebM-main/5, 0, 480'

    Expected Behavior

    I expected the output to be a video that would shrink horizontally after 5 seconds

    Steps To Reproduce

    1. Select Keyframes
    2. Press X
    3. Type 5, 0, 480
    4. Press Enter and select any video thats longer than 5 seconds
    5. See error

    Environment

    - OS: Windows 10
    - Node: 16.16.0
    - ffmpeg: g23758380d0
    

    Anything else?

    No response

    question 
    opened by MRMANSCRIpt 5
  • "Grow" feature

    The video starts small then grow larger this is done by initially setting the height and width small then increasing the size. The *2 for the max resolution values is because for small videos, it will not ever grow because the Math.floor() results in it being set to 0.

    enhancement modes 
    opened by itsomort 5
  • I get an error when trying to use it.

    I get an error when trying to use it.

    image

    PS C:\Users\Minoa\Desktop\WebM-Maker-Thing-Idk-main> node .\wackywebm.js bounce .\mt.mp4 C:\Users\Minoa\Desktop\WebM-Maker-Thing-Idk-main\wackywebm.js:67 async function main() { ^^^^^^^^

    SyntaxError: Unexpected token function at createScript (vm.js:56:10) at Object.runInThisContext (vm.js:97:10) at Module._compile (module.js:549:28) at Object.Module._extensions..js (module.js:586:10) at Module.load (module.js:494:32) at tryModuleLoad (module.js:453:12) at Function.Module._load (module.js:445:3) at Module.runMain (module.js:611:10) at run (bootstrap_node.js:387:7) at startup (bootstrap_node.js:153:9) PS C:\Users\Minoa\Desktop\WebM-Maker-Thing-Idk-main> node .\wackywebm.js Shutter .\mt.mp4 C:\Users\Minoa\Desktop\WebM-Maker-Thing-Idk-main\wackywebm.js:67 async function main() { ^^^^^^^^

    invalid question 
    opened by M1noa 5
  • [Enhancement] Function to automatically crop frames based on transparency

    [Enhancement] Function to automatically crop frames based on transparency

    Suggestion to add functionality to automatically crop frames based on alpha/transparency

    Example: Export a video or image sequence with alpha from After Effects with transformations already applied to the content layers within the composition, then have a script crop the edges of each frame to the first solid/non-translucent pixels.

    More advanced functionality would be to allow setting a key hex color, for green-screened video

    enhancement modes 
    opened by nrsolo 4
  • WebM Maker Not Working

    WebM Maker Not Working

    First of all thank you for making a Maker for this... Now I can annoy my friends on discord. Second of All.. I am getting this error. I followed a Tutorial by "No Text to Speech" On YouTube to see how I can properly install this... I followed everything but then this error is popping up [Image1] image I am not much good with JavaScript so yeah idk what's wrong.

    Tutorial I am following: https://www.youtube.com/watch?v=ZjGMjv1Gv94 OS: Windows 11

    bug 
    opened by MR-DERP-YT 4
  • Run.bat opening for a split second then closing.

    Run.bat opening for a split second then closing.

    Followed this https://www.youtube.com/watch?v=DfQboH_VUJw Tutorial, Did everything perfectly until the run.bat. It just does not work. Any Fixes? Thanks.

    question 
    opened by 6861560 3
  • Sharing Preset/Modes community

    Sharing Preset/Modes community

    Hello there, i really like this project, and i see that more presets/modes are being added. In the readme you state that we can tweak the script and make a mode. (Atleast, that's how i get it.) I thought that having a discord community for sharing user-created modes would be nice :)

    question modes 
    opened by MirayXS 3
  • Check for dependencies and direct the user to install them if not present

    Check for dependencies and direct the user to install them if not present

    I'm back from the dead, here's a pull request.

    Right now, it just checks if there is a node_modules folder, and if there is not, it stops the program and directs the user to type npm install, but it may be possible to automatically install them in the future.

    Either way, this will solve a massive issue with people not reading the readme then asking in support.

    enhancement 
    opened by OIRNOIR 2
  • Change color space and other attributes at specifc frame

    Change color space and other attributes at specifc frame

    Related area

    new modes

    Is your feature request related to a problem?

    I want to change color space duration framerate etc. at a specific frame to create something like slap.mp4 tis this possible?

    Describe the solution you'd like

    I'd like to have a (bunch) of new mode(s) to change color space framerate etc. at a specific frame/second

    Additional context

    No response

    I have checked existing list of Feature requests

    • [x] I confirm I have checked existing list of Feature requests
    enhancement 
    opened by Leo-Aqua 2
  • Turkish language

    Turkish language

    Related area

    Turkish language

    Is your feature request related to a problem?

    no

    Describe the solution you'd like

    tr.json

    {
    	"no_translation": "ÇEVİRİLMEMİŞ DİZİN",
    	"select_mode_arrows": "Ok tuşlarıyla kullanmak için Modu seçin, ardından onaylamak için enter tuşuna basın.",
    	"change_options": "Herhangi bir seçeneği (tümü isteğe bağlıdır) değiştirmek için ilgili düğmeye basın. İşiniz bittiğinde enter'a basın.",
    	"change_options_k": "Herhangi bir seçeneği değiştirmek için (ana kare dosyası dışında tümü isteğe bağlıdır), ilgili düğmeye basın. İşiniz bittiğinde enter'a basın.",
    	"current_arg_values": "şu anda ayarlanmış argüman değerleri:",
    	"enter_arg_value": "Lütfen \"{arg}\" bağımsız değişkeni için istediğiniz değeri girin ve ardından onaylamak için enter tuşuna basın. İptal etmek için ESC tuşuna basın.",
    	"enter_file_path": "Lütfen dönüştürmek istediğiniz dosyanın yolunu girin (dosya adı ve varsa uzantı dahil)",
    	"review_settings": "Bunlar seçtiğiniz ayarlardır. Devam etmek istiyorsanız Enter'a basın. Değilse, programdan çıkın (Q veya Ctrl+C)",
    	"r_s_mode": "Mod:",
    	"r_s_args": "Değiştirilmiş Argümanlar:",
    	"r_s_file": "Seçilen dosya:",
    	"tui_done": "Tamamlandı! Bu arayüzü kapatmak için herhangi bir tuşa basın.",
    	"file_not_found": "Dosya bulunmuyor!",
    	"keyframes_file_needed": "Anahtar kareler bağımsız değişkenini ayarlamanız gerekir.",
    	"warning_template": "[WARNING] %s",
    	"error_template": "[ERROR] %s",
    	"parsing_keyframes": "{file} Ana Kare Dosyası ayrıştırılıyor...",
    	"load_mode_failed": "mod: {mode} yükleme başarısız",
    	"flag_locale_desc": "Kullanılan dili belirler",
    	"illegal_argument": "Geçersiz argüman: {arg}",
    	"arg_cannot_be_set": "{arg} bağımsız değişkeni ayarlanamıyor.",
    	"no_mode_selected": "Varsayılan \"{default}\ kullanılarak mod seçilmedi"",
    	"kf_file_not_found": "{file} KeyFrame dosyası bulunamadı.",
    	"kf_file_required": "KeyFrame dosyası gerekli, ancak hiçbiri verilmedi.",
    	"no_video_file": "Giriş video dosyası verilmedi.",
    	"video_file_not_found": "Video dosyası bulunamadı: \"{file}\"",
    	"info1": "Giriş dosyası: {video}.\nMinimum w/h {delta}px kullanılarak.\nGerekli giriş dosyası bilgileri ayıklanıyor...",
    	"info2": "Çözünürlük {w}x{h}.\nKare hızı {framerate} ({decframerate}).\nGiriş Bit Hızı {bitrate}.",
    	"config_header": "=========Yapılandırma=========",
    	"config_footer": "==============================",
    	"config_mode_list": "Modlar: {modlar}",
    	"bounce_speed": "Sıçrama Hızı: Saniyede {tempo} kez",
    	"rotate_speed": "Dönme Hızı: Saniyede {angle}°",
    	"keyframe_file": "Ana kare dosyası: {file}",
    	"output_bitrate": "Çıktı Bit Hızı: {bit hızı}",
    	"creating_temp_dirs": "Geçici dizinler oluşturuluyor...",
    	"splitting_audio": "Ses geçici bir dosyaya bölünüyor...",
    	"no_audio": "Ses algılanmadı.",
    	"splitting_frames": "Dosyayı çerçevelere bölme...",
    	"starting_conversion": "Çerçeveleri webm'ye dönüştürüyor...",
    	"convert_progress": "{framecount} kareyi webm'ye dönüştürülüyor (frames {startframe}-{endframe} / {batch_size}) - %{percent}",
    	"done_conversion": "Tüm {framecount} kareleri {time}ms cinsinden başarıyla dönüştürdü",
    	"writing_concat_file": "Concat dosyası yazılıyor...",
    	"concatenating": "Segmentleri son webm dosyasında birleştiriliyor",
    	"concatenating_audio": "Segmentleri birleştirme ve son webm dosyasına ses uygulanıyor",
    	"done_removing_temp": "Bitti!\nGeçici dosyalar kaldırılıyor...",
    	"error_during_update": "Güncellemeleri kontrol etmeye çalışırken bir hata oluştu: {error}",
    	"newer_version_available": "Daha yeni bir sürümü mevcut. Lütfen güncellemeyi düşünün.",
    	"excess_keyframes": "{time} karesinde fazla KeyFrame bulundu!",
    	"unrecognized_interpolation": "Başlangıç genişliği/yüksekliği kullanılarak tanınmayan enterpolasyon modu {which}."
    }
    

    Additional context

    No response

    I have checked existing list of Feature requests

    • [x] I confirm I have checked existing list of Feature requests
    enhancement 
    opened by anonimbiri 2
  • Running

    Running

    Related area

    New Mode: Running

    Is your feature request related to a problem?

    I recently thought of WEBM's that will literally run in your discord. Like it will run.

    Describe the solution you'd like

    The video will move using the width thing and make the video "run".

    Additional context

    No response

    I have checked existing list of Feature requests

    • [X] I confirm I have checked existing list of Feature requests
    enhancement 
    opened by 1nfameArts 0
  • run.sh saying ffmpeg is not installed Even tho it is in the linux terminal

    run.sh saying ffmpeg is not installed Even tho it is in the linux terminal

    Is there an existing issue for this?

    • [X] I have searched the existing issues

    Current Behavior

    I was trying out this it said ffmpeg not installed what the heck? I used sudo apt-get install ffmpeg and it said its already installed + newest version I currently run linux on my chromebook Can you help me? Screenshot 2022-11-07 5 54 07 PM Bruh

    Expected Behavior

    Run the script and i could make those bouncy webms*

    Steps To Reproduce

    No response

    Environment

    - OS:chromeOS*
    - Node:Already Have Nodejs*
    - ffmpeg:Installed on chromeOS automatically*
    

    Anything else?

    Help me bruh*

    WHY CANT I USE IT

    bug 
    opened by RockyYT1 4
  • Stretch

    Stretch

    Related area

    New mode

    Is your feature request related to a problem?

    No

    Describe the solution you'd like

    I want the ability to have the video stretch whether sideways or vertically

    Additional context

    No response

    I have checked existing list of Feature requests

    • [X] I confirm I have checked existing list of Feature requests
    enhancement 
    opened by Hedwig7s 1
  • Suggestion: More Keyframe interpolation modes

    Suggestion: More Keyframe interpolation modes

    for example, we might have a bounce interpolation mode that essentially does a similar thing to the bounce regular mode - while this would be easy to implement, I believe we would have to adjust the keyframe syntax to allow some parameters (perhaps something like this?)

    <time>, <width>, <height>, bounce, <speed>, <amplitude>
    

    and while this would work, I feel like it's a little clumsy to exclude them that way

    enhancement 
    opened by t-brieger 2
  • Suggestion: Allow selection of ffmpeg binary

    Suggestion: Allow selection of ffmpeg binary

    There are some valid reasons to have multiple ffmpeg installs at once (for example, working on ffmpeg itself and/or keeping older versions for compatibility testing) - I thought about adding a command-line flag that would set which ffmpeg to use (defaulting to just ffmpeg and relying on path when not set), however I'm worried it might confuse non-technical users even more than we already do to see that in the usage help

    tl;dr i'm asking for some opinions on whether this might be worth implementing

    enhancement 
    opened by t-brieger 0
  • Strip extra quotes at the beginning and end of the path

    Strip extra quotes at the beginning and end of the path

    Related area

    Have a check to strip any " around the path to the file

    Is your feature request related to a problem?

    When useing the "copy path" button in windows it copy's the path rapped in " causeing the script to not like it

    Describe the solution you'd like

    If the code sees 2 " rapping the code strip it so it gets the raw path to the file and stops people saying about the path being correct but the code says it's invalid

    Additional context

    No response

    I have checked existing list of Feature requests

    • [X] I confirm I have checked existing list of Feature requests
    enhancement 
    opened by truffle-yt 1
Owner
OIRNOIR
Hello! I'm a self-taught full-stack developer. In my spare time, I build Discord bots and contribute to open-source.
OIRNOIR
A Node.js library to calculate Uniswap V3 ratios (prices) from token pairs.

UniV3Prices A Node.js library to calculate Uniswap V3 ratios (prices) and liquidity (reserves). Features This library will allow you to: Calculate pri

Thanos Polychronakis 121 Dec 29, 2022
Easily add aspect ratio in your Solid app.

Creates a component with a proportional relationship between its width and height. ratio = width / height Table of Contents Demo Installation Setup Us

Prince Neil Cedrick Castro 5 Nov 4, 2022
A2er - Fun browser extension, changing all words ending with `a` to end with `er`.

a2er Fun browser extension, changing all words ending with a to end with er. This started as a joke between friends and me, pronouncing words ending w

Sebastian Schicho 1 Jan 10, 2022
Your whole team, changing the world one stroke at a time.

Collanvas — Your whole team, changing the world one stroke at a time ?? With an online whiteboard, you can brainstorm ?? , draw art ??️ , and even pla

Eluda 12 Dec 29, 2022
Google-Drive-Directory-Index | Combining the power of Cloudflare Workers and Google Drive API will allow you to index your Google Drive files on the browser.

?? Google-Drive-Directory-Index Combining the power of Cloudflare Workers and Google Drive will allow you to index your Google Drive files on the brow

Aicirou 127 Jan 2, 2023
Obsidian plugin that allows user to create a glossary of files, an index of files or both.

Obsidian Auto Glossary Auto Glossary is an Obsidian plugin to create a glossary, an index or a glossary with an index from the files you want. Feature

Ennio Italiano 29 Dec 30, 2022
Cindy Dorantes 12 Oct 18, 2022
The Basement SDK has sensible defaults and flexibility to allow you to get the data you want efficiently and effortlessly.

Basement SDK The Basement SDK has sensible defaults and flexibility to allow you to get the data you want efficiently and effortlessly. Installation B

Basement for Developers 10 Dec 6, 2022
This website utilizes JavaScript, HTML, and CSS to allow the user to create a to-do list that they can add to, remove from, and edit.

todo Description the project. "To-do list" is a tool that helps to organize your day. It simply lists the things that you need to do and allows you to

Emily Robertson 8 Jul 23, 2022
This project is a list manager that will allow a user organize a list of their tasks. They can conveniently create, update and delete tasks.

TO DO LIST APP This project is a list manager that will allow a user organize a list of their tasks. They can conveniently create, update and delete t

Kehinde Onifade 8 Oct 7, 2022
Merge multiple Prisma schema files, model inheritance, resolving name conflicts and timings reports, all in a simple tool.

Prisma Util What is Prisma Util? • How to use? • The configuration file • Support What is Prisma Util? Prisma Util is an easy to use tool that merges

David Hancu 21 Dec 28, 2022
Bitcoin terminal tracker is a terminal app which allow you to track bitcoin price from your terminal

BTC Terminal Tracker Bitcoin terminal tracker is a terminal app which allow you to track bitcoin price from your terminal. In this version (V1.2) I ch

Sina yeganeh 9 Jul 27, 2022
MultiVersus Searcher is a program that allow you to search cosmetics about MultiVersus.

MultiVersus Searcher MultiVersus Searcher is a program that allow you to search cosmetics about MultiVersus. If you need help please join the discord

ᴅᴊʟᴏʀ3xᴢᴏ 10 Dec 9, 2022
Displays all hidden Channels, which can't be accessed due to Role Restrictions, this won't allow you to read them (impossible)

Who is the Creator ? The creator of this plugin is DevilBro I have completely reworked the plugin so that it can use the BDFDB library from DevilBro !

Flavien 18 Dec 29, 2022
Displays all hidden Channels, which can't be accessed due to Role Restrictions, this won't allow you to read them (impossible)

ShowHiddenChannels Plugin Returns DevilBro, author of this plugin, and BetterDiscord developers have deleted ShowHiddenChannels plugin from the offici

NotCapengeR 177 Sep 17, 2022
Piplup: decompile Playdate Pulp .pdx files back to .json project files

Piplup: decompile Playdate Pulp .pdx files back to .json project files This doesn't work yet: I still need to: convert the graphics (.pdt files) back

null 6 Mar 25, 2022
🌸 A cli can automatically generate files from Excel files.

unxlsx A cli can automatically generate files from Excel files. Why We often need to export some information from XLSX to generate our files, such as

Frozen FIsh 24 Aug 22, 2022
JavaScript library for parsing Dirtywave M8 files, complete with a CLI for interacting with M8 files.

m8-js This repository contains a JavaScript library for parsing Dirtywave M8 files, as well as a CLI for interacting with M8 files. The hopes are not

Jeremy Whitlock 20 Dec 17, 2022
Download all Moodle files with one click. This is a Chrome extension built to save time and effort from downloading files manually one by one!

Moodle Downloader Extension Moodle downloader extension for Chrome. The extension is tested with both the TUM moodle and the official moodle demo. Not

Zhongpin Wang 8 Nov 15, 2022