লিনাক্স টার্মিনাল ব্যবহার করে দৈর্ঘ্যের মাধ্যমে .avi ভিডিওগুলি মুছুন


2

টার্মিনালের মাধ্যমে আমি কীভাবে ভিডিওর দৈর্ঘ্য দ্বারা ভিডিওগুলি মুছতে পারি?

আমার কাছে 30 সেকেন্ডের কাট অফ পয়েন্ট রয়েছে এবং আমি এর অধীনে যে কোনও কিছু মুছতে চাই। আমি যদি আকার দ্বারা নির্বাচন করি ( find . -type f -size +27818098c) তবে ভিডিওগুলি বিভিন্ন বিটরেট হওয়ায় এটি আমাকে সঠিক ফলাফল দেয় না।

উত্তর:


2

কিছুটা হ্যাকি, কিন্তু:

for f in *.avi; do 
  echo "Testing $f"
  ffmpeg -i "$f" 2>&1 | awk '/Duration/ { split($2,a,":"); exit a[1]*3600+a[2]*60+a[3] < 30 ? 3 : O }'
  [[ $? -eq 3 ]] && rm -i -- "$f"
done

এটি ধরে নিয়েছে আপনি ffmpegইনস্টল করেছেন। rmকোনও ফাইল সরানোর আগে আপনাকে জিজ্ঞাসা করবে, তবে আপনি -iযদি এটি চান তা করেন তবে আপনি তা মুছে ফেলতে পারেন।

একটি পোর্টেবল রুবি স্ক্রিপ্ট যে হবে না নিশ্চিত হওয়ার জন্য জিঞ্জাসা - কিন্তু আপনি প্রতিস্থাপন করতে পারেন f.deleteসঙ্গে puts fচেক করতে এটা কী করবেন:

ruby <<"EOF"
  Dir.glob("*.avi").each { |f| 
    ff = %x( ffmpeg -i "#{f}" 2>&1 )
    d = ff.match(/Duration: ([0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2})/)[1].split(":").map{|s| s.to_i}
    s = (d[0]*60*60 + d[1]*60 + d[2])
    f.delete if s < 30 
  }
EOF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.