yt-dlp का उपयोग करके ffmpeg के ffprobe से केवल ऑडियो फ़ाइलों का पता लगाने और उन्हें एक अलग निर्देशिका में ले जाने के लिए एक शेल स्क्रिप्ट

नमस्ते, मैं मुनो हूँ।
मैंने yt-dlp का उपयोग करके अपने पसंदीदा यूट्यूब वीडियो को पूरी तरह से स्व-संग्रहीत कर लिया है।
हालांकि, सहेजते समय मैंने music.youtube.com के लिए कोई जाँच शामिल नहीं की, इसलिए सब कुछ एक ही निर्देशिका में है।
इससे संगीत और अन्य चीज़ें आपस में मिल जाती हैं, जिससे देखना बहुत मुश्किल हो जाता है, इसलिए मुझे फ़ोल्डरों को अलग करने का एक तरीका सूझा।
तो, यह भेद करना संभव नहीं है कि यह एक सामान्य वीडियो फ़ाइल है या संगीत फ़ाइल, यदि उनका एक्सटेंशन .mp4 समान है।
फ़ाइल आकार या लंबाई आदि से निर्धारित करने पर भी, सटीकता बहुत कम होती है।
तब मुझे एहसास हुआ कि पहलू अनुपात (aspect ratio) से निर्धारित करना अच्छा होगा।
आश्चर्यजनक रूप से, ffmpeg पहलू अनुपात का पता लगा सकता है, इसलिए मैं इसे निम्नलिखित कमांड से जाँचूँगा।
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 “संगीत फाइल.mp4”
> 1080x1080
तो, यह 1080 का वर्ग प्रतीत होता है।
दूसरे शब्दों में, बस उन फ़ाइलों को एक अलग निर्देशिका में ले जाना है जो यह मान उत्पन्न करती हैं।
वाह, ffmpeg वास्तव में कमाल है! इसमें ऐसी सुविधाएँ भी हैं... अद्भुत।
तो, मैंने शेल स्क्रिप्ट इस प्रकार लिखी है।
vi mvfile.sh
#!/bin/bash
# निर्देशिका पथ सेट करें
input_dir="/media/aaa"
output_dir="/media/bbb"
# यदि आउटपुट निर्देशिका मौजूद नहीं है तो उसे बनाएँ
mkdir -p "$output_dir"
# प्रत्येक फ़ाइल को संसाधित करें
for file in "$input_dir"/*.mp4; do
# ffprobe का उपयोग करके वीडियो का पहलू अनुपात प्राप्त करें
ratio=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")
# यदि पहलू अनुपात 1080x1080 है, तो फ़ाइल को आउटपुट निर्देशिका में ले जाएँ
if [ "$ratio" == "1080x1080" ]; then
mv "$file" "$output_dir"
echo "Moved $file to $output_dir"
fi
done
फिर, निष्पादन अनुमति दें।
chmod +x mvfile.sh
और, निष्पादित करें
./mvfile.sh
यदि आपको स्थानांतरित होने का आउटपुट मिलता है, तो यह सफल है।
विशेष रूप से, वीडियो फ़ाइलों को सहेजने के लिए उपयोग की जाने वाली निर्देशिका के लिए उपरोक्त स्क्रिप्ट को एक क्रॉन जॉब के रूप में देना भी अच्छा हो सकता है।
तो, अलविदा।
फिर मिलेंगे।
※ ऐसा लगता है कि कई थंबनेल थोड़े ऑफ-सेंटर हैं, इसलिए मैंने थंबनेल डिटेक्शन को इस प्रकार बदल दिया है।
if [[ "$ratio" == @(10[78][0-9]x10[78][0-9]|7[12][0-9]x7[12][0-9]) ]]; then