খোঁড়া - কীভাবে সমস্ত 320 কেবিপিএস এমপিথেকে 192 কেবিপিএস এমপি 3 পুনরায় এনকোড করা যায়


9

শিরোনাম অনুযায়ী। আমার 320 কেবিপিএস ফর্ম্যাটে প্রচুর এমপি 3 রয়েছে যা আমাকে 192kbps রূপান্তর করতে হবে। বর্তমানে আমি ব্যবহার করছি lame --mp3input -b 192যা একই নামের একটি ফাইল তৈরি করে তবে একটি অতিরিক্ত। এমপি 3 এক্সটেনশন সহ। তাই আমি শেষ foo.mp3.mp3

আমার কোনও ডিরেক্টরি প্রবেশ করতে সক্ষম হতে হবে, যে কোনও 320 কেবিপিএসের জন্য সাব ডিরেক্টরিগুলি স্ক্যান করতে হবে এবং 192 কেবিপিএসে রূপান্তর করতে হবে এবং যদি কিছু পাওয়া যায় তবে ওভাররাইট করে। ল্যাম্প কি এটির জন্য সেরা সরঞ্জাম?

ধন্যবাদ

উত্তর:


12

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কমান্ড যদি না মৃত্যুদন্ড কার্যকর করা হবে না ffmpeg0 একটি স্থিতি সঙ্গে প্রস্থানের (যার মধ্যে সাফল্যের মানে)।

কোনও ফাইলের বিট রেট রয়েছে কিনা তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন ffprobe:

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000'

-show_streamsffprobeপৃথক স্ট্রিম সম্পর্কে তথ্য প্রদর্শন করতে বলে ; -select_streamsবলা হয়েছে যে সব যা বেশী নির্বাচন করতে, এবং a:0মানে 'প্রথম অডিও স্ট্রীম (এই কভার আর্ট, যা একটি ভিডিও স্ট্রিম হিসাবে সংরক্ষিত হয় ক্ষেত্রে MP3 ফাইলগুলিকে জন্য গুরুত্বপূর্ণ)। পাইপ ( |) এর স্ট্যান্ডার্ড আউটপুট নেয় ffprobeএবং এটিকে ফিড করে grepgrepকেবলমাত্র সেই রেখাগুলি মুদ্রণ করবে যা প্রদত্ত প্যাটার্নের সাথে মেলে - এক্ষেত্রে স্ট্রিং যুক্ত লাইনগুলি 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 {}' 

দর্শনীয় উত্তর। আমি খোঁড়া ব্যবহার করে একসাথে কিছু বাঁধা করেছি তবে আমি এটি আগে দেব। ফিরে রিপোর্ট করবে।
মাইফ মারফি

আমি এই ত্রুটিটি Unrecognized option 'select_streams' Failed to set value 'a:0' for option 'select_streams'
পাচ্ছি

: avconv সঙ্গে, এর এটি প্রতিস্থাপনavconv -i {} -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}
Lepe

2

Lame আপনি এই কাজটি করতে সবচেয়ে ভাল খুঁজে পেতে পারেন

আপনি কমান্ডটি ব্যবহার করতে পারেন lame -b 192 input.mp3 output.mp3

পাইপিং কমান্ডগুলির সাথে ভাল না তবে আপনি exiftoolএমপি 3 ফাইলের বিট রেট পেতে ব্যবহার করতে পারেন

exiftool -AudioBitrate File.mp3 

তবে আপনার এখনও এমপি 3 ফাইল সন্ধান, বিটরেট পরীক্ষা করা এবং রূপান্তর করার কমান্ডগুলি পাইপ করার একটি উপায় প্রয়োজন ...


দু'বার সম্পাদিত, কমান্ডটি ঠিক করে এবং
বিট্রেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.