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
  • 0t79JeIfK01RHyzo@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    edit-2
    15 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} -;}
    
      • 0t79JeIfK01RHyzo@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        10 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
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          10 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
            link
            fedilink
            English
            arrow-up
            2
            ·
            9 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"