lame
এই কাজের সাথে পুরোপুরি উপযুক্ত, তবে আমি এটি ব্যবহার করতে যাচ্ছি ffmpeg
এবং ffprobe
এই উত্তরটির জন্য, কারণ আমি তাদের আমার হাতের পেছনের মতো জানি এবং কারণ এগুলি কেবল এমপি 3 এর চেয়েও বেশি সাধারণ করা যায়। সবার আগে:
sudo apt-get install ffmpeg
এমন কোনও সরঞ্জাম নেই যা সম্পর্কে আমি সচেতন সেগুলি মিডিয়া ফাইলগুলি পড়তে পারে এবং তারপরে সরাসরি ইনপুটটি অতিরিক্ত লিখতে পারে: আপনাকে একটি মধ্যবর্তী ফাইল ব্যবহার করতে হবে। একটি একক ফাইলের জন্য, আপনি এটি করতে পারেন:
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3
mv temp.mp3 file.mp3
আপনি এগুলিকে একক লাইনে সংযুক্ত করতে পারেন:
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3
&&
সেখানে এর মানে হল যে mv
কমান্ড যদি না মৃত্যুদন্ড কার্যকর করা হবে না ffmpeg
0 একটি স্থিতি সঙ্গে প্রস্থানের (যার মধ্যে সাফল্যের মানে)।
কোনও ফাইলের বিট রেট রয়েছে কিনা তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন ffprobe
:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000'
-show_streams
ffprobe
পৃথক স্ট্রিম সম্পর্কে তথ্য প্রদর্শন করতে বলে ; -select_streams
বলা হয়েছে যে সব যা বেশী নির্বাচন করতে, এবং a:0
মানে 'প্রথম অডিও স্ট্রীম (এই কভার আর্ট, যা একটি ভিডিও স্ট্রিম হিসাবে সংরক্ষিত হয় ক্ষেত্রে MP3 ফাইলগুলিকে জন্য গুরুত্বপূর্ণ)। পাইপ ( |
) এর স্ট্যান্ডার্ড আউটপুট নেয় ffprobe
এবং এটিকে ফিড করে grep
। grep
কেবলমাত্র সেই রেখাগুলি মুদ্রণ করবে যা প্রদত্ত প্যাটার্নের সাথে মেলে - এক্ষেত্রে স্ট্রিং যুক্ত লাইনগুলি bit_rate=320000
। আপনি যদি এটি 320 কেবিপিএস এমপি 3 এ চালান তবে আপনি এটির মতো একটি লাইন পাবেন:
bit_rate=32000
আপনি যদি এটির বিট রেট দিয়ে কোনও কিছুতে চালনা করেন তবে আপনি কোনও আউটপুট পাবেন না; গ্রেপ একটি ম্যাচ তৈরি করতে ব্যর্থ হবে এবং 1 এর স্থিতি দিয়ে প্রস্থান করবে This এর অর্থ আপনি সেই কমান্ডটি ffmpeg কমান্ড দিয়ে চেইন করতে পারেন:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' && ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3
বা, আরও কিছুটা পড়ার মতো:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' &&
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 &&
mv temp.mp3 file.mp3
এটি কেবল 320 কেবিপিএস এমপি 3 তে কাজ করবে। কয়েকটি পরীক্ষা ফাইল দিয়ে এটি ব্যবহার করে দেখুন।
পরবর্তী পদক্ষেপটি একাধিক ফাইলের সাথে এটি কাজ করা। এটি করার দুটি মানক উপায় রয়েছে: একটি for
লুপ এবং find
কমান্ড। নিম্নলিখিতগুলিতে একটি ডিরেক্টরিতে প্রতিটি এমপি 3 তে কাজ করবে:
for f in *.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done
এটি উপ-ডিরেক্টরিতে যাবে না; এটি করতে, আপনাকে globstar
শেল বিকল্পটি সেট করতে হবে :
shopt -s globstar
for f in **/*.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done
সহ find
:
find . -name '*.mp3' -exec sh -c 'ffprobe -show_streams -select_streams a:0 "$0" | grep -F "bit_rate=320000" &&
ffmpeg -y -i "$0" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$0"' '{}' \;
এগুলি সমস্তই কঠোরভাবে ক্রমানুসারে চলবে - তারা একসাথে কেবল একটি ফাইল রূপান্তর করবে। আপনার প্রসেসর প্রায় অবশ্যই এর চেয়ে বেশি সক্ষম, যদিও; জিনিসগুলির গতি বাড়ানোর জন্য, আপনি জিএনইউ ব্যবহার করতে পারেন parallel
:
sudo apt-get install parallel
shopt -s globstar
parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' ::: **/*.mp3
বা:
find . -name '*.mp3' | parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}'