175
submitted 20 hours ago by RavenofDespair@lemmy.ml to c/linux@lemmy.ml

made it so i just click file and paste YouTube url

Linux is amazing

#! /usr/bin/bash
echo "Enter a url"
read a

yt-dlp -x $a
you are viewing a single comment's thread
view the rest of the comments
[-] 0t79JeIfK01RHyzo@lemmy.ml 1 points 17 hours ago* (last edited 16 hours ago)

What does your ~/.bashrc look like? My last change was modifying a playlist command

spoiler: I explain my last change to my ~/.bashrc file

playlist https://www.youtube.com/@YouTube/videos

or

playlist /home/username/Videos

or just from any directory with files

playlist

And then takes all the videos found at the url or at the path (including within folders), adds them to a playlist, shuffles them, and plays them from mpv.

playlist() {
        param=""

        # If the first parameter has a length more than 1 character
        if [ ${#1} -gt 1 ]; then
                param="${@}"
        else
                param="."
        fi

        screen mpv $param --shuffle --ytdl-raw-options-add=cookies-from-browser=firefox --loop-playlist=inf --no-keepaspect-window --no-auto-window-resize
}

other functions and aliases in my ~/.bashrc

alias code=codium
alias files=nautilus
alias explorer=nautilus
alias rust="/path/to/.cargo/bin/evcxr"
alias sniffnet="export ICED_BACKEND=tiny-skia; /path/to/.cargo/bin/sniffnet"
alias http-server='/path/to/.cargo/bin/miniserve'
alias iphone='uxplay'
alias airplay='uxplay'
alias watch='screen mpv --ytdl-raw-options-add=remote-components=ejs:github --ytdl-raw-options-add=cookies-from-browser=firefox --no-keepaspect-window '
alias twitch='watch'
alias timeshift-launcher="pkexec env WAYLAND_DISPLAY='$WAYLAND_DISPLAY' XDG_RUNTIME_DIR='$XDG_RUNTIME_DIR' /usr/bin/timeshift-launcher"
alias update="sudo apt update && sudo apt upgrade -y && sudo flatpak update -y && sudo snap refresh"
alias resize="path/to/resize/videos/resize.sh"

playlist() {
        param=""

        # If the first parameter has a length more than 1 character
        if [ ${#1} -gt 1 ]; then
                param="${@}"
        else
                param="."
        fi

        screen mpv $param --shuffle --ytdl-raw-options-add=cookies-from-browser=firefox --loop-playlist=inf --no-keepaspect-window --no-auto-window-resize
}

gif() { ffmpeg -i $1 -f yuv4mpegpipe - | gifski -o $2 ${@:3} -;}

[-] db2@lemmy.world 1 points 12 hours ago

I wonder if we have the same resize.sh

[-] 0t79JeIfK01RHyzo@lemmy.ml 1 points 11 hours ago

The version I have was copied from stackoverflow. It doesn't work very well, it makes a rough estimate to get the video file size under the set value. As an example

resize video.mp4 10

Which then resizes the video to 10 megabytes if possible.

resize.sh code

file=$1
target_size_mb=$2  # target size in MB
target_size=$(( $target_size_mb * 1000 * 1000 * 8 )) # target size in bits
length=`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"`
length_round_up=$(( ${length%.*} + 1 ))
total_bitrate=$(( $target_size / $length_round_up ))
audio_bitrate=$(( 128 * 1000 )) # 128k bit rate
video_bitrate=$(( $total_bitrate - $audio_bitrate ))
ffmpeg -i "$file" -b:v $video_bitrate -maxrate:v $video_bitrate -bufsize:v $(( $target_size / 20 )) -b:a $audio_bitrate "${file}-${target_size_mb}mb.mp4"

I'll probably replace it eventually.

[-] db2@lemmy.world 2 points 11 hours ago* (last edited 11 hours ago)

Definitely not the same lol

Mine uses ffmpeg to change the resolution, it doesn't so much care about file sizes.

It could be a one-liner if you only ever feed it a single file to manipulate..

[-] 0t79JeIfK01RHyzo@lemmy.ml 2 points 10 hours ago

I might add one for scaling. I just don't use it as frequently as trying to meet a file size limit. The scaling is also much easier to remember

ffmpeg -i  in.mp4 -vf "scale=600:-1" -an out.mp4

It does get complicated though, when scaling many videos and images, I've used something like the following in the past

find .  -exec ffmpeg -i {} -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:-1:-1:color=black" {}.mp4 \;

Those were the only two that showed up when I typed history | grep scale.

after commenting, I also added a new video file resizer.

It works significantly better than the one I previously posted. It's also copied from stackoverflow.

bitrate="$(awk "BEGIN {print int($2 * 1024 * 1024 * 8 / $(ffprobe \
    -v error \
    -show_entries format=duration \
    -of default=noprint_wrappers=1:nokey=1 \
    "$1" \
) / 1000)}")k"
ffmpeg \
    -y \
    -i "$1" \
    -c:v libx264 \
    -preset medium \
    -b:v $bitrate \
    -pass 1 \
    -an \
    -f mp4 \
    /dev/null \
&& \
ffmpeg \
    -i "$1" \
    -c:v libx264 \
    -preset medium \
    -b:v $bitrate \
    -pass 2 \
    -an \
    "${1%.*}-$2mB.mp4"

this post was submitted on 22 Feb 2026
175 points (98.9% liked)

Linux

62524 readers
841 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 6 years ago
MODERATORS