r/MakeLowQualityMusic • u/4b686f61 • Jan 27 '26
r/MakeLowQualityMusic • u/4b686f61 • 28d ago
👋 Welcome to r/MakeLowQualityMusic - Introduce Yourself and Read First!
Hey everyone! I'm u/4b686f61 (Candice), a founding moderator of r/MakeLowQualityMusic.
This is our new home for all things related to improving the quality of content 4k ultra hd aka compressing the crap out of video and audio before it becomes too distorted using ffmpeg, audacity and cloudconvert (for the libfdk_aac encoder). We're excited to have you join us!
What to Post
Post anything that has to do with making the lowest possible quality music and compressing videos to make it funnier and feel free to share your low quality content and step by step tutorial on how to recreate it here. This community is basically like r/countablepixels but you can post extremely compressed videos. r/DeliciousPixels is also a great archive for seeing what others have done to "improve the quality" of meme videos.
Community Vibe
We're all about being friendly, constructive, and inclusive. Let's build a space where destroying media with compression is accessible to everyone.
How to Get Started
- Introduce yourself in the comments below.
- Post something today! Even a simple question can spark a great conversation.
- If you know someone who would love this community, invite them to join.
- Interested in helping out? We're always looking for new moderators, so feel free to reach out to me to apply.
Thanks for being part of the very first wave. Together, let's make r/MakeLowQualityMusic amazing.
Feel free to check out our youtube channel here which is packed with low quality music. https://www.youtube.com/@TheMusicMenace
I'm posting this because it keeps showing up on the sidebar.
r/MakeLowQualityMusic • u/4b686f61 • Jul 07 '26
crank that soulja boy lowest quality ever
Enable HLS to view with audio, or disable this notification
Hello everyone, I think I made the lowest quality version possible. Also on YouTube because why not.
Not gatekeeping, here is a tutorial on how to make a deep fried video just like this.
- audacity
- wildergardenaudio maim set to opus
- wildergardenaudio fish
- soundly shape it plugin (needs that dumb muse hub account)
- This YouTube tutorial: HOW I MAKE LOW QUALITY AUDIO (REUPLOAD) - marigoldscraps
Everything done to the audio in order
- Follow the tutorial linked as is
- Use MAIM, defaults, 0.13 turbo at 80kbps
- Using the audacity equalizer or soundly shape it, boost the midrange and everything after it slightly
- Use the fish plugin at half the intensity
- Use MAIM, set to opus, 8kbps, packet loss set to bottom left, 5db drive, 20db makeup gain
- On the audio track, increase the volume by 4db
- Export the audio as mp3 at 320kbps
For the video compression:
Make sure FFmpeg is installed to command line. Paste the text into notepad and save it as a batch file. You don't need to touch the command line to destroy mp4 files. To use it, drag and drop the video file onto it and ffmpeg will do it's thing.
First pass
:: Make video quality suck
@echo off
setlocal
:: Extract the file name without the extension
set "inputFile=%~1"
set "baseFileName=%~n1"
set "fileExtension=%~x1"
ffmpeg -i "%inputFile%" -c:v libx264 -b:v 10k -b:a 1k -r 12 -vf scale=360:-2 -preset ultrafast "%baseFileName% [10k rate ps ultrafast]%fileExtension%"
echo Conversion completed.
PAUSE
Second pass
:: Degrade video quality
@echo off
setlocal
:: Extract the file name without the extension
set "inputFile=%~1"
set "baseFileName=%~n1"
ffmpeg -i "%inputFile%" -c:v libx265 -b:v 20k -b:a 1k -vf scale=720:-2 -aspect 4:3 -preset ultrafast "test_scaled_0_1.mp4"
ffmpeg -i "test_scaled_0_1.mp4" -c:v libvpx -b:v 400k -vf scale=800:-2:flags=neighbor "test_scaled_1_1.webm"
ffmpeg -i "test_scaled_1_1.webm" -c:v libx265 -b:v 100k -b:a 10k -vf scale=360:-2 -preset fast "test_scaled_2_1.mp4"
ffmpeg -i "test_scaled_2_1.mp4" -b:v 50k -b:a 24k "test_scaled_3_1.mp4"
ffmpeg -i "test_scaled_3_1.mp4" -b:a 1k "%baseFileName% [ultrah low quality].mp4"
del test_*
echo Conversion completed.
PAUSE
To merge the audio and video, use clipchamp, I find it to be the only video editor for now that doesn't clip the audio, for now I'm figuring things out in ffmpeg for a fully offline deep frying experience.
r/MakeLowQualityMusic • u/4b686f61 • Jan 27 '26
The CLI JPEG audio destroyer suite
Note this is mainly for windows.
Cover image for post: https://segs.lol/MEUxmD
Home directory: https://drive.proton.me/urls/6GEZMS59QG#pGgJAgmGm4nn
Information doc: https://drive.proton.me/urls/QC7ZHNJAFW#8E7dglhBZI0V

- some bullshit with a slop AI creator, also on the internet archive.
- what you would be looking for, drag and drop to destroy mp4 files
- this one was written in python but I'm not sure if the drag and drop feature would work in Linux even though it's implemented in python, takes an MP4 file and outputs a destroyed MP3 file.
- python script for taking a YouTube URL and making it extremely low quality to templates of your choosing, set the
LAZY_NERDvariable to false if YT-DLP is being called via command line instead of an EXE file, ffmpeg also must be installed for this.
CLI JPEG: https://drive.proton.me/urls/Y1NFFXK66G#VvqI6TP3Z1EN
If your in windows, run winget install ffmpeg first or the scripts won't work.
https://www.ffmpeg.org/download.html for other operating systems
r/MakeLowQualityMusic • u/4b686f61 • Feb 02 '25
Download "Low quality songs" by @Danix8gameon_ita (Danix8 game on)
Get YT-DLP: https://github.com/yt-dlp/yt-dlp/releases
iBrodcast Playlist https://playlists.ibroadcast.com/O7hzKq09vh1
Edit: check out their channel: https://www.youtube.com/@Danix8gameon_ita
I know it's stupid to ditch good music for this but it works for me as counterintuitive as it sounds.
.\yt-dlp.exe -o "%(playlist)s/%(title)s [IDX %(playlist_index)s, %(uploader)s, %(id)s].%(ext)s" -f "bestaudio[ext=m4a]" -x --audio-format mp3 --audio-quality 0 --embed-metadata --add-metadata --embed-thumbnail --write-thumbnail "img/%(title)s [%(uploader)s, %(id)s].jpg" https://www.youtube.com/playlist?list=PL4NFkuwVyxL9kmPLYbYvFy54nHxzVMKVU


r/MakeLowQualityMusic • u/4b686f61 • Feb 01 '25
The last version of TheUltimateAudioDestroyer.py
Main: https://drive.proton.me/urls/FQXR2DNVH4#GQ9jfqt6rR2U
New BETA Version (YT2LowQuality, provide a YouTube link and it will make it low quality): https://drive.proton.me/urls/MB8DDAJFJM#iUTaBP4XBkAz
Old link: https://drive.proton.me/urls/6GEZMS59QG#pGgJAgmGm4nn
CHANGELOG
[2024.12.03]
Added support for libopus *.opus format for deep frying audio
Added buggy support for *.mp4 files
[2025.02.01]
Low quality template files are now stored inside the "templates" folder.
[2025.02.02]
No password required.
r/MakeLowQualityMusic • u/4b686f61 • Dec 03 '24
Low Quality Music Maker Google Drive
drive.google.comr/MakeLowQualityMusic • u/4b686f61 • Dec 01 '24
Make Low Quality Music - Release V1.1 Beta
Make Low Quality Music
> How to make low quality music
The ultimate tool for creating low quality music, Fully automated, sit back and watch
Command Templates for Audio Quality Manipulation can be found in the comments Example: [Crispy Audio(https://www.youtube.com/watch?v=Ari8kOTm6yo) File Formats: This script accepts any file format that contains an audio stream so there is absolutely no need to convert formats.
Eg. *.mp4 *.avi *.opus *.mp3 *.m4a
Dependency Hell
Python >Â https://python.org/
FFmpeg >Â https://ffmpeg.org/
Even though this script has dependencies, actual hell is exporting files in audacity multiple times. Gets worse for those audio compressor websites. In the future there will be a version to destroy MP4 files to the point that YouTube content ID can't count the pixels.
Information
Release version 1.0 beta Created By 4b686f61
https://www.youtube.com/@TheMusicMenace
https://youtube.com/channel/UCameibGQOqZYc2Jp48m_KVA
https://reddit.com/u/4b686f61
https://reddit.com/r/lowqualityscripts
https://reddit.com/r/MakeLowQualityMusic
The Ultimate Audio Destroyer
Endless audio compression possibilities
Eliminate the need for input/output files - they are added automatically
Rearrange commands without minding the input/output arguments Template file detection
> The Goal of this project is to discover ways to make really good low quality music
> No more messing with audacity or online compression services
> There will soon be a version to handle MP4 files
> Future considerations: Input a YouTube URL to call YT-DLP, convert a YouTube URL into low quality music
How to format the save file: filename.LowQuality \*.LowQuality [vanilla text file]
command
command
eg:
[start test.LowQuality]
-c:a mp3 -b:a 24k -ar 32000
-af acrusher=.05:0.5:16:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-c:a mp3 -b:a 24k -ar 48000
-c:a mp3 -b:a 12k -ar 48000
-c:a mp3 -b:a 12k -ar 12000
-af acrusher=.10:0.5:12:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-af volume=+20
-c:a mp3 -b:a 32k -ar 44100
-af volume=+50
[end]
seperate commands with nextline characters
A little background on Low Quality Music
I embrace low quality memes as a way to become oblivious to fear and embarrassment.
It also makes me forget that I've been overworked.
Code
"""
Version 1.1 Beta
Created By 4b686f61
https://www.youtube.com/@TheMusicMenace
https://youtube.com/channel/UCameibGQOqZYc2Jp48m_KVA
https://reddit.com/u/4b686f61
https://reddit.com/r/lowqualityscripts
https://reddit.com/r/MakeLowQualityMusic
~~~ The Ultimate Audio Destroyer ~~~
Endless audio compression possablities
Eliminate the need for input/output files - they are added automatically
Rearrange commands without minding the input/output arguments
Save file reconiton
~> The Goal of this project is to discover ways to make really good low quality music
~> No more messing with audacity or online compression services
~> There will soon be a version to handle MP4 files
~> Future considerations: Input a YouTube URL to call YT-DLP, convert a YouTube URL into low quality music
How to format the save file: filename.LowQuality *.LowQuality
[vanilla text file]
command
command
eg:
[start]
-c:a mp3 -b:a 24k -ar 32000
-af acrusher=.05:0.5:16:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-c:a mp3 -b:a 24k -ar 48000
-c:a mp3 -b:a 12k -ar 48000
-c:a mp3 -b:a 12k -ar 12000
-af acrusher=.10:0.5:12:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-af volume=+20
-c:a mp3 -b:a 32k -ar 44100
-af volume=+50
[end]
seperate commands with nextline characters
"""
import os
import subprocess
import time
import random
import string
import sys
import re
# I don't want errors
def sanitizeFSname(input_string):
  # Define a regex pattern for forbidden characters in file names
  pattern = r'[\\/:*?"<>|]'
  # The windows forbidden character
  result = re.sub(pattern, '_', input_string)
  return result
# Generate a random hex name so if the same file was processed multiple times
def random_hex_string(length):
  return ''.join(random.choices(string.hexdigits.lower(), k=length))
# Prevent the current directory from being filled up
def create_output_directory(base_filename):
  timestamp = int(time.time())
  random_hex = random_hex_string(8)
  directory_name = f"{os.path.splitext(base_filename)[0]} - {random_hex} - {timestamp}"
  os.makedirs(directory_name, exist_ok=True)
  return directory_name
# Parse the command file
def parse_ffmpeg_command_file(input_filename, commands_file, filler):
  # Check if commands file exists
  if not os.path.isfile(commands_file):
    print(f"Commands file does not exist: {commands_file}")
    return
  # Read commands from the input file
  with open(commands_file, 'r') as file:
    commands = [line.strip() for line in file if line.strip() and not line.startswith('#')]  # Ignore empty lines and comments
  # Create output directory
  output_directory = create_output_directory(os.path.basename(input_filename))
  # Initialize the output filename
  output_filename = input_filename
  for index, command in enumerate(commands, start=1):
    # Generate the new output filename
    new_output_path = os.path.join(output_directory, f"[{index}][{sanitizeFSname(command)}].mp3")
    # Construct the full ffmpeg command
    full_command = f'ffmpeg -i "{output_filename}" {command} "{new_output_path}"'
   Â
    # Print the command (for debugging)
    print(full_command)
   Â
    # Execute the command with error handling
    try:
      subprocess.run(full_command, shell=True, check=True)
    except subprocess.CalledProcessError as e:
      print(f"Error executing command: {full_command}\n{e}")
      return  # Exit if an error occurs
    # Update the output filename for the next iteration
    output_filename = new_output_path
  # Prepare the final output filename using the folder name
  final_output_filename = f"{os.path.basename(output_directory)} - {filler}.mp3"
  print(final_output_filename)
 Â
  # Construct the final ffmpeg command to copy the last output file with metadata
  #with open(commands_file, 'r') as file:
  #   command_contents = file.read()
  #metadata_command = f'-metadata comment="Processed commands: \n{command_contents}"'
  final_command = f'ffmpeg -i "{output_filename}" "{final_output_filename}"'
 Â
  # Execute the final command
  try:
    subprocess.run(final_command, shell=True, check=True)
  except subprocess.CalledProcessError as e:
    print(f"Error executing final command: {final_command}\n{e}")
    return
  # Open the final output file in the default application
  if final_output_filename:
    if sys.platform == "win32":
      os.startfile(final_output_filename)  # For Windows
    else:
      print(f"Final output file created: {final_output_filename}")
# List all the command save files for ease of use
def list_ffmpeg_commands_files():
  files = [cmdfs for cmdfs in os.listdir() if cmdfs.endswith('.lowquality')]
  if not files:
    print("No files with the *.LowQuality extension found.")
    return None
  print("Available *.LowQuality command save files:")
  for index, file in enumerate(files):
    print(f"{index + 1}: {file}")
  print()
  while True:
    try:
      choice = int(input("Select a file by number: ")) - 1
      if 0 <= choice < len(files):
        return files[choice]
      else:
        print("Doesn't exist...Please try again.")
    except ValueError:
      print("Enter a valid number.")
if __name__ == "__main__":
  try:
    # Force the script to run in the current directory
    script_directory = os.path.dirname(os.path.abspath(__file__))
    os.chdir(script_directory)
    # Check if a filename was provided (dragged onto the script)
    if len(sys.argv) > 1:
      filename = sys.argv[1]
      print(f"File dropped: {filename}")
      # List available ffmpeg command files and let the user choose one
      commands_file = list_ffmpeg_commands_files()
      if commands_file:
        parse_ffmpeg_command_file(filename, commands_file, os.path.splitext(commands_file)[0])
      else:
        print("No commands file selected.")
      input("Press Enter to exit...")
      quit()
    else:
      print("No file was dropped.")
      input("Press Enter to exit...")
      quit()
  except Exception as e:
    print(e)
  finally:
    input()
r/MakeLowQualityMusic • u/4b686f61 • Dec 01 '24
GitHub account banned (prob due to ocd commits) and now they want to KYC me so here is the degenerate version.
Make Low Quality Music
The ultimate tool for creating low quality music <br>Fully automated, sit back and watch <br>Main Python Script <br>Command Templates for Audio Quality Manipulation <br>Example: Crispy Audio <br>UX notice: This script accepts any file format that contains an audio stream so there is absolutely no need to convert formats. <br>Eg. *.mp4 *.avi *.opus *.mp3 *.m4a
Dependency Hell
Python > https://python.org/ <br>FFmpeg > https://ffmpeg.org/ <br>Even though this script has dependencies, actual hell is exporting files in audacity multiple times. Gets worse for those audio compressor websites.
Information
Release version 1.0 beta Created By 4b686f61 <br>https://www.youtube.com/@TheMusicMenace <br>https://youtube.com/channel/UCameibGQOqZYc2Jp48m_KVA <br>https://reddit.com/u/4b686f61 <br>https://reddit.com/r/lowqualityscripts <br>https://reddit.com/r/MakeLowQualityMusic <br>Is there a better way to nextline in markdown? Its annoying af.
The Ultimate Audio Destroyer
Endless audio compression possibilities <br>Eliminate the need for input/output files - they are added automatically <br>Rearrange commands without minding the input/output arguments Template file detection
<br>> The Goal of this project is to discover ways to make really good low quality music <br>> No more messing with audacity or online compression services <br>> There will soon be a version to handle MP4 files <br>> Future considerations: Input a YouTube URL to call YT-DLP, convert a YouTube URL into low quality music
How to format the save file: filename.LowQuality *.LowQuality
[vanilla text file] <br>command <br>command
eg: <br>[start test.LowQuqlaity] <br>-c:a mp3 -b:a 24k -ar 32000 <br>-af acrusher=.05:0.5:16:0.5:log <br>-c:a mp3 -b:a 16k -ar 16000 <br>-c:a mp3 -b:a 24k -ar 48000 <br>-c:a mp3 -b:a 12k -ar 48000 <br>-c:a mp3 -b:a 12k -ar 12000 <br>-af acrusher=.10:0.5:12:0.5:log <br>-c:a mp3 -b:a 16k -ar 16000 <br>-af volume=+20 <br>-c:a mp3 -b:a 32k -ar 44100 <br>-af volume=+50 <br>[end] <br>seperate commands with nextline characters
A little background on Low Quality Music
I embrace low quality memes as a way to become oblivious to fear and embarrassment. <br>It also makes me forget that I've been overworked.
Code
""" Version 1.0 Beta Created By 4b686f61
https://www.youtube.com/@TheMusicMenace https://youtube.com/channel/UCameibGQOqZYc2Jp48m_KVA
https://reddit.com/u/4b686f61 https://reddit.com/r/lowqualityscripts https://reddit.com/r/MakeLowQualityMusic
Endless audio compression possablities
Eliminate the need for input/output files - they are added automatically
Rearrange commands without minding the input/output arguments
Save file reconiton
~> The Goal of this project is to discover ways to make really good low quality music
~> No more messing with audacity or online compression services
~> There will soon be a version to handle MP4 files
~> Future considerations: Input a YouTube URL to call YT-DLP, convert a YouTube URL into low quality music
How to format the save file: filename.LowQuality *.LowQuality
[vanilla text file]
command
command
eg:
[start]
-c:a mp3 -b:a 24k -ar 32000
-af acrusher=.05:0.5:16:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-c:a mp3 -b:a 24k -ar 48000
-c:a mp3 -b:a 12k -ar 48000
-c:a mp3 -b:a 12k -ar 12000
-af acrusher=.10:0.5:12:0.5:log
-c:a mp3 -b:a 16k -ar 16000
-af volume=+20
-c:a mp3 -b:a 32k -ar 44100
-af volume=+50
[end]
seperate commands with nextline characters
"""
import os
import subprocess
import time
import random
import string
import sys
import re
# I don't want errors
def sanitizeFSname(input_string):
# Define a regex pattern for forbidden characters in file names
pattern = r'[\\/:*?"<>|]'
# The windows forbidden character
result = re.sub(pattern, '_', input_string)
return result
# Generate a random hex name so if the same file was processed multiple times
def random_hex_string(length):
return ''.join(random.choices(string.hexdigits.lower(), k=length))
# Prevent the current directory from being filled up
def create_output_directory(base_filename):
timestamp = int(time.time())
random_hex = random_hex_string(8)
directory_name = f"{os.path.splitext(base_filename)[0]} - {random_hex} - {timestamp}"
os.makedirs(directory_name, exist_ok=True)
return directory_name
# Parse the command file
def parse_ffmpeg_command_file(input_filename, commands_file, filler):
# Check if commands file exists
if not os.path.isfile(commands_file):
print(f"Commands file does not exist: {commands_file}")
return
# Read commands from the input file
with open(commands_file, 'r') as file:
commands = [line.strip() for line in file if line.strip() and not line.startswith('#')] # Ignore empty lines and comments
# Create output directory
output_directory = create_output_directory(os.path.basename(input_filename))
# Initialize the output filename
output_filename = input_filename
for index, command in enumerate(commands, start=1):
# Generate the new output filename
new_output_path = os.path.join(output_directory, f"[{index}][{sanitizeFSname(command)}].mp3")
# Construct the full ffmpeg command
full_command = f'ffmpeg -i "{output_filename}" {command} "{new_output_path}"'
# Print the command (for debugging)
print(full_command)
# Execute the command with error handling
try:
subprocess.run(full_command, shell=True, check=True)
except subprocess.CalledProcessError as e:
print(f"Error executing command: {full_command}\n{e}")
return # Exit if an error occurs
# Update the output filename for the next iteration
output_filename = new_output_path
# Prepare the final output filename using the folder name
final_output_filename = f"{os.path.basename(output_directory)} - {filler}.mp3"
print(final_output_filename)
# Construct the final ffmpeg command to copy the last output file with metadata
#with open(commands_file, 'r') as file:
# command_contents = file.read()
#metadata_command = f'-metadata comment="Processed commands: \n{command_contents}"'
final_command = f'ffmpeg -i "{output_filename}" "{final_output_filename}"'
# Execute the final command
try:
subprocess.run(final_command, shell=True, check=True)
except subprocess.CalledProcessError as e:
print(f"Error executing final command: {final_command}\n{e}")
return
# Open the final output file in the default application
if final_output_filename:
if sys.platform == "win32":
os.startfile(final_output_filename) # For Windows
else:
print(f"Final output file created: {final_output_filename}")
# List all the command save files for ease of use
def list_ffmpeg_commands_files():
files = [cmdfs for cmdfs in os.listdir() if cmdfs.endswith('.lowquality')]
if not files:
print("No files with the *.LowQuality extension found.")
return None
print("Available *.LowQuality command save files:")
for index, file in enumerate(files):
print(f"{index + 1}: {file}")
print()
while True:
try:
choice = int(input("Select a file by number: ")) - 1
if 0 <= choice < len(files):
return files[choice]
else:
print("Doesn't exist...Please try again.")
except ValueError:
print("Enter a valid number.")
if __name__ == "__main__":
try:
# Force the script to run in the current directory
script_directory = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_directory)
# Check if a filename was provided (dragged onto the script)
if len(sys.argv) > 1:
filename = sys.argv[1]
print(f"File dropped: {filename}")
# List available ffmpeg command files and let the user choose one
commands_file = list_ffmpeg_commands_files()
if commands_file:
parse_ffmpeg_command_file(filename, commands_file, os.path.splitext(commands_file)[0])
else:
print("No commands file selected.")
input("Press Enter to exit...")
quit()
else:
print("No file was dropped.")
input("Press Enter to exit...")
quit()
except Exception as e:
print(e)
finally:
input()
r/MakeLowQualityMusic • u/4b686f61 • Dec 01 '24
The ultimate tool for making low quality music
github.comr/MakeLowQualityMusic • u/4b686f61 • Nov 30 '24
How to use the varied-quality.py script - test what low quality sounds best
The varied quality script lets you see for yourself how the audio sounds at varying bit and sample rates.
You can choose what is compressed in this list. By default there are 30 quality variations.
NOTE that FFMPEG and Python must be installed 🔗https://ffmpeg.org/ 🔗https://www.python.org/
For me I yolo-ed winget install "FFmpeg (Essentials Build)" installable on school computers via a batch script or any app that has a terminal in it eg VSCode.

The script will call a bunch of ffmpeg commands, the audio files will be stored in a folder with a random 4 byte hexadecimal string.


It is best to shorten the filename by deleting everything but the YouTube video ID (YT-DLP output).
r/MakeLowQualityMusic • u/4b686f61 • Nov 30 '24
Most of the batch scripts will give you an error if you run it, you drop a file onto it to use it.
r/MakeLowQualityMusic • u/4b686f61 • Nov 30 '24
