আমি এমপি 4 ফাইল থেকে ডিসফ্রেশন ছাড়াই এফএফপিজেগ (অটোমেটিক অডিও কোডেক সনাক্তকরণ) থেকে অডিও এক্সট্র্যাক্ট অডিওটি কীভাবে করব?


19

আমার কাছে 228 এমপি 4 ফাইল (২.6 গিগাবাইট) রয়েছে এবং সেগুলি থেকে অডিও উত্তোলন করতে চাই (এমপি 3 বা ওজিজি)। আমি তাদের ব্যাচটি নিষ্কাশন করতে চাই - পছন্দসই বাশ দিয়ে। আমি নিশ্চিত না যে সমস্ত ফাইলগুলি ২০০ from-২০১২ সাল পর্যন্ত বিভিন্ন বছরে রেকর্ডকৃত একই অডিও কোডেক ব্যবহার করে কিনা।

আমি তাদের সকলের মধ্য দিয়ে লুপ করতে চাইছি, ফাইলের নামটি বেছে নিতে, অডিও কোডেক সনাক্ত করতে এবং অডিওটি বের করতে ffmpeg ব্যবহার করতে চাই।

এটা কি সম্ভব?


এটি একটি স্ক্রিপ্টিং প্রশ্ন এবং এর সাথে উবুন্টুর কোনও সম্পর্ক নেই। এটি এখানে বিষয়বস্তু নয়, তবে এসও বা ইউনিক্স SEএসই চাইতে আরও ভাল জায়গা হতে পারে।
মহেশ

ধন্যবাদ। পরবর্তী সময় আমি আরও উপযুক্ত জায়গায় এই জাতীয় প্রশ্ন জিজ্ঞাসা করার চেষ্টা করব।
12'10 10:56 এ রাইরিচ করুন

উত্তর:


29

আপনি বলছেন যে আপনি "এগুলি থেকে অডিও উত্তোলন করতে চান (এমপি 3 বা অগ)"। কিন্তু এমপি 4 ফাইলে অডিও যদি তাদের মধ্যে একটি না হয় তবে কী হবে? আপনাকে যেভাবেই ট্রান্সকোড করতে হবে। তাহলে কেন অডিও ফর্ম্যাট সনাক্তকরণটি এফএফএমপিগ অবধি ছেড়ে যাবেন না?

একটি ফাইল রূপান্তর করতে:

ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg

অনেকগুলি ফাইল রূপান্তর করতে:

for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done

আপনি অবশ্যই বিটরেট ইত্যাদির মতো জিনিস সেট করতে আপনার পছন্দ মতো অডিও এনকোডিংয়ের জন্য যে কোনও এফএফপিপিগ প্যারামিটারগুলি নির্বাচন করতে পারেন।

ব্যবহারের -acodec libmp3lameএবং থেকে এক্সটেনশন পরিবর্তন .oggকরতে .mp3থেকে mp3 এনকোডিং-এর।

আপনি যা চান তা যদি সত্যিই অডিওটি বের করা হয় তবে আপনি কেবল অডিও ট্র্যাকটি ব্যবহার করে কোনও ফাইলটিতে "অনুলিপি" করতে পারেন -acodec copy। অবশ্যই, প্রধান পার্থক্যটি হ'ল ট্রান্সকোডিং ধীর এবং সিপিইউ-নিবিড়, যখন অনুলিপি করা সত্যিই দ্রুত কারণ আপনি কেবল একটি ফাইল থেকে অন্য ফাইলটিতে বাইট সরিয়ে নিচ্ছেন। এখানে কীভাবে কেবল অডিও ট্র্যাকটি অনুলিপি করবেন (এটি এমপি 3 ফর্ম্যাটে ধরে নেওয়া):

ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3

লক্ষ্য করুন এই ক্ষেত্রে, audiofile বিন্যাস হয়েছে কি ধারক রয়েছে তার সাথে সামঞ্জস্যপূর্ণ হতে (অর্থাত যদি অডিও এএসি ফরম্যাট, আপনি বলার আছে audiofile.aac)। আপনার ffprobeকাছে কোন কোডেক রয়েছে তা দেখতে আপনি কমান্ডটি ব্যবহার করতে পারেন, এটি কিছু তথ্য সরবরাহ করতে পারে:

ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"

অডিও কোডেককে স্বয়ংক্রিয়ভাবে বিশ্লেষণ করার একটি সম্ভাব্য উপায় এবং সেই অনুযায়ী অডিও ফাইলটির নাম হ'ল:

mkdir -p output
# current directory has to contain at least one .mp4 file 
for vid in *.mp4; do
   codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
   case "$codec" in
    mp3    ) filetype=mp3 ;;
    vorbis ) filetype=ogg ;;
    *      ) filetype= ;;
   esac

   if [ "$filetype" ]; then 
    ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
   else
    ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done

নোটস: আউটপুট ফাইলগুলি উপ-ডিরেক্টরিতে outputতৈরি করা হয় যা এটি শুরুতে তৈরি করে (প্রয়োজনীয় হলে)। এমপি 3 এবং ভারবিসের চেয়ে অন্য কোডেকগুলির জন্য এটি অডিওকে ওজিতে রূপান্তর করে। উবুন্টু 14.04 স্ট্যান্ডার্ড সংগ্রহস্থলগুলিতে ffmpeg নেই, তবে আপনি পিপিএ: এমসি 3man / বিশ্বাসযোগ্য-মিডিয়া সংগ্রহস্থল যুক্ত করতে পারেন এবং প্রয়োজনীয় সফ্টওয়্যার পেতে ffmpeg প্যাকেজ ইনস্টল করতে পারেন। বিশদ জন্য এখানে দেখুন ।


আমি ভুল করেছি। আমি এমপি 3 বা ওজি রাখতে চেয়েছিলাম কিন্তু আপনি যেমনটি লক্ষ্য করেছেন অডিও কোডেকটি আলাদা ছিল - এই উদাহরণটিতে অ্যাক। সুতরাং আমি যাই হোক না কেন তাদের ট্রান্সকোড করতে হবে। আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!
রাইরিচ

আপনার অটোম্যাজিক উদাহরণটি ফাইলের সাথে বিচ্ছিন্ন হয় যার মধ্যে ফাঁকা স্থান রয়েছে কারণ আপনি ffprobe সাব-বিবৃতিতে ফাইলটি উদ্ধৃত করেন নি। এটিকে পরিবর্তন করা হচ্ছে: ফাইলের জন্য * এমপি 4 * এভিআই; do ffmpeg -i "$ file" -vn -acodec copy "$ file"। ffprobe "$file" 2>&1 |sed -rn 's/.*Audio: (...), .*/\1/p'; কাজ শেষ।
অ্যান্ড্রু বিলস

+1 তবে দেখে মনে হচ্ছে এই উত্তরটি কোনও আপডেট ব্যবহার করতে পারে:This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
নিকোলাস রাউল

ffmpegবা ffprobeউবুন্টু 14.04 বা তার পরে পাওয়া যাবে না।
জার্নো

1
@jarno বাস্তব ffmpeg 15,04 উবুন্টু ফিরে , এবং এটি Libav তুষ মত দেখায় avconvএবং avprobeহয়েছে 15,10 সরানো
লোগান

1

যেমন নিকোলাস রাউল বলেছেন, এটি আপডেট করার প্রয়োজন। এখানে রোডমায়ার একই লাইনটি দিয়েছেন তবে পরিবর্তে অ্যাভকনভ ব্যবহার করেছেন:

for vid in *.mp4; do avconv -i "$vid" "${vid%.mp4}.mp3"; done


এটি এখন পুরানো। এফএফপিপেগ ফিরে এসেছে এবং লিবাভ চলে গেছে।
লগন

একেবারে সঠিক. যদি কেউ ভাবলেন ffmpeg মারা যাচ্ছে, তবে এটি পড়ুন: en.wikedia.org/wiki/Libav# কনফিউশন
-2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.