طريقة إستخدام yt-dlp لتحميل فيديو بجودة عالية

بسم الله و الحمد لله و الصلاة و السلام على رسول الله

هذا موضوع حول أداة yt-dlp. ليس شرح للأداة و إنما تطرق لأمر بسيط لتحميل فيديو بجودة عالية.

الأداة نسخة مزيدة و منقحة من المشروع الأم youtube-dl.

الإستخدام الشائع
yt-dlp -f format URL

*** لاحقة f- تعطيك قائمة عن جميع الهيئات المتوفرة لتحميل الفيديو.

بعد ذلك تعيد نفس الأمر مع إضافة الهيئة التي تريد.

العملية ليست صعبة.
و لكن تأخذ وقت.
الأداة عندها خصائص كثيرة.
و لكن الأغلبية لا يستفيد منها.
لماذا ؟
لا يريد أن يتعب و يبحث داخل الدليل.

man yt-dlp

و هذا شيء ليس جيد.
و هذا الصنف من المستخدمين. لن يتعلم كثيرا.
ربما شتات من هنا و هناك.


نعود للهدف من الموضوع :rofl:

كأن الموضوع لم يبدأ بعد.

ما أريد طرحه. هو سكريبت أو سميه أداة تختصر عناء كتابة السطر الطويل لتحميل الفيديو.
مثال:

#!/usr/bin/env bash
# coding:utf-8
# Author:<samir>
# Purpose:Downloading best quality video using yt-#+dlp.
# Version:0.0.1
# Usage: ytv <URL>

echo "Downloading..."
yt-dlp -f bestvideo+bestaudio --downloader aria2c --restrict-filenames "$1" 2> /dev/null
if [ "$?" == 0 ]
then
echo "Finished with success"
fi

كما تلاحظون شيء عادي.

** إختصار صيغة الصورة و الصوت في عبارة:
bestvideo+bestaudio

كأننا نقول للأداة قومي بتحميل أفضل جودة للصورة و الصوت التي يتوفر عليها الفيديو.

** لاحقة --downloader
تبقى إختيارية.
يعني تحديد أداة خارجية للتحميل.
شخصيا جربت aria2c.وجدتها أسرع.

** لاحقة --restrict-filenames أرى أنها مهمة. دورها الإحتفاظ فقط برموز ascii بإسم الملف.
يعني تجتب رموز مثل & أو المسافات.
خصوصا المسافات مشكلة.

** المتغير “$1” هذا يحمل رابط الملف.

** و لاحقة 2> /dev/null
لإخفاء أي رسائل أخطاء.

** و في الأخير إمتحان لتحقق من قيمة العملية السابقة.
نقطة غير مهمة.
أضفتها فقط لطباعة عبارة تمت العملية بنجاح.

**
لماذا كل هذا العناء. لأنه يوجد من يسأل أو يتساءل
:rofl:
لماذا كل هذه التعقيدات؟
ما الهدف؟
الجواب بإختصار هو إختصار الوقت.

هذا السكريبت شخصيا محتفظ به بإسم ytv.

و يوجد بمجلد bin بالمنزل .يكفي فقط تصدير المسار.

ما يعني أنني عندما أريد تحميل فيديو. أكتب فقط :

ytv URL

و يمكن تغير السكريبت لتحميل الصوت فقط. و ذلك بالإحتفاظ فقط بجزء bestaudio

و هذه صورة للسكريبت. أتمنى أن يعمل الرابط:

3 إعجابات

نسخة مزيدة و منقحة من السكريبت ytv :grin:.
الآن السكريبت إزداد ذكاء smart script :rofl:

الحلة الجديدة :

#!/usr/bin/env bash                                        # coding:utf-8                                             # Author:<samir>                                           # Version:0.0.2                                            # Purpose:Downloading vids with HQ using yt-dlp.           # Usage: <script> <URL>                                    #      : <script> hit <ENTER> to paste clipboard.                                                                     URL="$1"                                                                                                              [[ "$URL" == "http"* ]] || URL="$(xclip -o)"                                                                          [[ "$URL" == "http"* ]] || exit 1                                                                                     yt-dlp -f bestvideo+bestaudio --downloader aria2c --restrict-filenames "$URL"

ما الجديد ؟!

قمنا بتحديد متغير URL للعنصر الثاني. و الذي هو الرابط. لماذا قلت الثاني مع أنه يحمل رقم 1.
لأنه يوجد عنصر قبله يحمل صيغة 0$ .و الذي هو إسم ملف السكريبت.
و هذا طبعا يضفي جمالية و تنظيم عند قراءة السكريبت.

و قمنا أيضا بعملية تحقق أو إمتحان لمتغير الرابط. هل يوجد به جزء http .
في الإمتحان الأول . إذا لم يجد بالرابط جزء http.ينظر هل تم نسخ الرابط من الكليب بورد. في هذا المثال xclip.
إختاروا أي أداة تريدون.

لم يجد أي شيء. سيقوم بالخروج. و هذا دور الإمتحان الثاني.

الباقي مثل السكريبت القديم.

صورة

4 إعجابات

جميل اخي سمير :+1:
هل رفعت مشروع السكربت على الجت هب او الجت لاب

إعجابَين (2)

حاليا لا يوجد لذي حساب. ربما مستقبلا.
هذه أشياء أقوم بها للإستمتاع بالوقت.

إعجابَين (2)

alias أرى أنها مفيدة. يمكن اضافتها لملف .bashrc

#youtube download
alias yta-aac="yt-dlp --extract-audio --audio-format aac "
alias yta-best="yt-dlp --extract-audio --audio-format best "
alias yta-flac="yt-dlp --extract-audio --audio-format flac "
alias yta-mp3="yt-dlp --extract-audio --audio-format mp3 "
alias ytv-best="yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 "

يمكن اضافة لها لاحقة

--restrict-filenames

ستعمل بشكل جيد مع الأسماء الأجنبية. أي اسم باللغة العربية. سيتم حذفه.

3 إعجابات

مخطوطة لتحميل أجزاء معينة. لا أريد أن أفتح موضوع مستقل. شيء كتبته بسرعة.
بالنسبة للجودة. تركتها للمستخدم يحدد ما يريد. في هذا المثال استخدمت رقم 22. يعني 720p

#!/usr/bin/env bash

set -euo pipefail

[ $(command -v yt-dlp) ] || echo "yt-dlp is not installed!"

if [ -z "$1" ]; then 
    echo "No URL is provided!"
    exit 3
fi

URL="$1"

[[ "$URL" =~ "playlist" ]] || echo "wrong link!"


while true; do
        echo "List of option to choose: "
        echo "1 - Download from a number to another one."
        echo "2 - Download the first N list."
        echo "3 - Download from N list to the end."
        echo "4 - Download on reverse from the end to N list."
        echo "5 - Download a range from N to N list (N,N,N)."
        echo "6 - Download a range from N to N list (N-N)."
        echo "* - exiting."

read -p "Please enter an option, a number ? "

case "$REPLY" in
          1) read -p "Please enter the start number ? " choice1  
             read -p "please enter the end number ? " choice2
             yt-dlp -c -f22 --playlist-start "$choice1" --playlist-end "$choice2" "$URL"        
            ;;
          2) read -p "Please enter the end number ? " choice2
             yt-dlp -c -f22 --playlist-end "$choice2" "$URL"
            ;; 
          3) read -p "Please enter th start number ? " choice1
             yt-dlp -c -f22 --playlist-start "$choice1" "$URL"
            ;;
          4) read -p "Please the end number ? " choice2
             yt-dlp -c -f22 --playlist-end "$choice2" --playlist-reverse "$URL"
            ;;
          5) read -p "Please enter a range of different number (like 2,6,9) ? " choice3
             yt-dlp -c -f22 --playlist-items "$choice3" "$URL"
            ;;
          6) read -p "Please enter a range of numbers (like 2-7) ? " choice4
             yt-dlp -c -f22 --playlist-items "$choice4" "$URL"
            ;; 
          *) echo "unknown choice!"
              exit 3
esac
done
إعجاب واحد (1)

بارك الله فيك على المشاركة (وإن كان الرد متأخر).

المهم فضلا عن كون (yt-dlp) نسخة مطورة وتوفر خيارات أكثر عند التحميل، السبب الحقيقي في إنتقالي (وأشخاص آخرون) إلى استعمال (yt-dlp) بدلا من البرمجية الأصلية (youtube-dl) هو بسبب سرعة التحميل البطيئة عند التحميل باستخدام (youtube-dl). هذا المشكل حدث قبل سنة أو سنتين عندما قامت Youtube بتضييق أو كبح التحميل (download throttling) باستخدام التطبيقات الخارجية مثل (youtube-dl) و (yt-dlp).

في ذلك الوقت أداة (yt-dlp) استجابت للمشكلة بسرعة وقامت بتحديث البرمجية لتتخطى هذا التضييق. أما (youtube-dl) لم يتم تحديثه.

أنا من يومها إنتقلت ل(yt-dlp) ولا أدري هل تم إصلاح المشكلة في (youtube-dl) أو لا.

طبعا هذا سبب إضافي فقط لاستخدام (yt-dlp) بدلا من (youtube-dl).

بما أنك شاركت السكريبت الخاص بك للتحميل، فأود أن أشارك السكريبت الخاص بي (المتواضع) للتحميل من يوتيوب باستخدام (yt-dlp)، وإختصاره ytd:


#!/usr/bin/env bash

# __YouTube Downloader__ #

# Author: <anes>
# Version: 2.0
# requirements: "yt-dlp" 
# Usage: ytd <URL>




printf "Single Video or Playlist (s/p)?: "
read media_type
printf "Video Or Audio (v/a/f)?: "
read format


# Downloading Playlists
if [[ $media_type == "p" ]]; then        
    if [[ $format == 'a' ]]; then
        printf "Downloading Audio Playlist (mp3)... \n"
        
        yt-dlp -f 'ba' -x --audio-format mp3 --download-archive videos.txt  $1 -o '$HOME/Downloads/Videos/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s'
	    printf "Success! Audio Playlist (mp3) Downloaded! \n"
    elif [[ $format == 'v' ]]; then
        printf "Downloading Video Playlist (mp4)...\n"
        
        yt-dlp -f 'bv*[height=360][ext=mp4]+ba[ext=m4a]' --download-archive videos.txt --embed-subs $1 -o '$HOME/Downloads/Videos/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s'
	    printf "Success! Video Playlist (mp4) Downloaded! \n"
    elif [[ $format == 'f' ]]; then
        printf "Downloading Normal Playlist (available)\n"
        yt-dlp -f 22 --embed-subs $1 -o "$HOME/Downloads/Videos/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s"
        printf "Success! playlist Downloaded\n"
    fi

# Downloading Single Video
elif [[ $media_type == 's' ]]; then                            
    if [[ $format == 'a' ]]; then
        printf "Downloading Single Audio (mp3)...\n"
        
        yt-dlp -f 'ba' -x --audio-format mp3 $1 -o '$HOME/Downloads/Videos/%(title)s.%(ext)s'
	    printf "Success! Audio (mp3) Downloaded!\n"
    elif [[ $format == 'v' ]]; then
        printf "Downloading Single Video (mp4)...\n"
        
	    yt-dlp -f 'bv[height=480][ext=mp4]+ba[ext=m4a]' --embed-subs $1 -o '$HOME/Downloads/Videos/%(title)s.%(ext)s'
	    printf "Success! Video (mp4) Downloaded! \n"
    elif [[ $format == 'f' ]]; then
        printf "Downloading Normal Single Video (best)\n"
        yt-dlp -f 22 --embed-subs $1 -o "$HOME/Downloads/Videos/%(title)s.%(ext)s"
        printf "Success! Video Downloaded\n"
    fi
fi

هناك 3 خصائص إضافية في السكريبت وهي:
1- إمكانية إختيار مكان تحميل الفيديو، عن طريق تغيير “HOME/Downloads/Videos$/” الى المجلد الذي تريده.

2- إمكانية تحميل قائمة تشغيل كاملة عن طريق كتابة “p” في الخيار الأول

3- إمكانية تحميل الصوت فقط في حالة تحميل شيء لا يحتاج صورة مثلا عند تحميل سور قرآن أو منظومات. ويقبل تحميل قائمة تشغيل أيضا.

5 إعجابات

بارك الله فيك. اضافة جميلة :slightly_smiling_face:

إعجاب واحد (1)