ট্রান্সকোডিং ছাড়াই ব্যাচ এক্সট্র্যাক্ট অডিও অ্যাভকনভের সাথে


14

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

আমি বুঝতে পারি যে এমপি 4 ফাইলগুলির মধ্যে একটি থেকে অডিও ফাইলটি বের করার জন্য আমি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারি:

avconv -i "INPUT FILE" -map 0:1 -c:a copy "OUTPUT FILE"

আমি কীভাবে সমস্ত 70 এমপি 4 ফাইল থেকে সমস্ত অডিও ফাইলগুলি বের করব, সুতরাং আমি 70 টি এ্যাক ফাইল দিয়ে শেষ করব?

উত্তর:


21

আপনি লুপের জন্য একটি সাধারণ ব্যবহার করতে পারেন:

for i in *.mp4; do
    avconv -i "${i}" -map 0:1 -c:a copy "${i%.mp4}.aac"
done

বা এক লাইনে:

for i in *.mp4; do avconv -i "${i}" -map 0:1 -c:a copy "${i%.mp4}.aac"; done

যা হয় তা avconvফাইলের নাম যেমন ভেরিয়েবলের *.mp4মধ্যে সংরক্ষণ করা হয় তেমনি প্রতিটি ফাইলের জন্য একবার চালানো ${i}হয়।

${i%.mp4}মানে ${i}(অর্থাত্ ফাইল নাম) .mp4শেষ থেকে ছিড়ে।


2
আইআইআরসি, কাঁচা এই্যাক ফাইলগুলিতে মেটাডেটা থাকতে পারে না; আপনি যদি মূল ফাইলগুলি থেকে মেটাডেটা রাখতে চান তবে ফাইল এক্সটেনশান হিসাবে অ্যাকের পরিবর্তে এম 4 এ (যা এমপি 4 এর অন্য নাম, তবে অডিও প্লেয়ারদের দ্বারা এটি যথেষ্ট পরিমাণে স্বীকৃত) use
অশুচি

-ম্যাপ বিকল্পটি কী জন্য? আপনি কেন 0: 0, 0: 2 এর মতো অন্যান্য স্ট্রিমের চেয়ে 0: 1 স্ট্রিমটি বেছে নিচ্ছেন?
কেইড

আমি -map বিকল্প বাদ পড়েছে এবং এটা শুধু কাজ করে জরিমানা
Qed

থুনার কাস্টম ক্রিয়াকলাপ এবং অনুরূপ এই কমান্ডটি ব্যবহার করতে, এটি কোনও স্ক্রিপ্টে এবং থুনার bash /path/to/the/script %F

2
@ কেয়েড: -mapআপনি অন্য আউটপুট ফর্ম্যাটে স্যুইচ করার সময় এখনও ড্রপিং ভিডিওটিকে বিবেচিত হতে পারে (যদি সেই ফর্ম্যাটটিতে অডিও এবং ভিডিও উভয়ই থাকতে পারে)। এটি যেমন রাখা তেমন নিরাপদ।
ড। সাইবারেন

5

যদি আপনার কাছে একটি ডিরেক্টরিতে সমস্ত ফাইল থাকে তবে জিয়াওর উত্তরটি সবচেয়ে কার্যকর; তবে যদি MP4 ফাইলগুলি বিভিন্ন ডিরেক্টরিতে ছড়িয়ে পড়ে থাকে তবে আপনি এই findকমান্ডটি সমস্ত রূপান্তর করতে ব্যবহার করতে পারেন ।

find . -type f -name '*.mp4' -exec bash -c 'avconv -i "$0" -c:a copy "${0/%mp4/m4a}"' {} \;

এটি শেষে ব্যাশ স্ট্রিং প্রতিস্থাপনের কিছুটা আলাদা ফর্ম ব্যবহার করে: "$ {0 /% mp4 / m4a।" এমপি 4 কে এম 4 এ প্রতিস্থাপন করতে বাশকে বলে, তবে কেবল এমপি 4 স্ট্রিংয়ের শেষে থাকলে।


আমি কখনই জানতাম না যে বাশের সেই ধরণের প্রতিস্থাপন রয়েছে। অসাধারণ :)
অ্যান্ড্রু গোনারসন

1
@ এক্সিয়াও যদি আপনি এটি ছেড়ে যান তবে %এটি স্ট্রিংয়ের প্রথম উদাহরণটির জন্য এটি প্রতিস্থাপন করবে; আপনি #যদি স্ট্রিংটির পরিবর্তনশীল শুরুর দিকে থাকেন তবে এটি কেবল স্ট্রিংয়ের বিকল্প হিসাবে ব্যবহার করতে পারেন ; সুতরাং $ {0 / এমপি 4 / এম 4 এ m এমপি 4 এর প্রথম উদাহরণটি এম 4 এ দ্বারা প্রতিস্থাপন করবে (আপনার যদি সত্যিই অদ্ভুত ফাইলের নাম থাকে তবে কোনও সমস্যা হতে পারে); এবং {{0 / # এমপি 4 / এম 4 এ m এম 4 এ এর ​​জন্য এমপি 4 প্রতিস্থাপন করবে, তবে কেবলমাত্র যদি ভেরিয়েবলের স্ট্রিং মান এমপি 4 দিয়ে শুরু হয় (তবে এখানে কোনও ব্যবহার নেই, স্পষ্টতই, তবে এটি অন্য কোথাও কাজে আসতে পারে)।
অসুরসপ

3

একই সাথে একাধিক ফাইল প্রক্রিয়া করা থেকে বাঁচতে (যা অনেক বেশি সংস্থান ব্যবহার করতে পারে), ব্যবহার করুন parallel। ডিফল্টরূপে, এটি একবারে কেবল একটি কাজ করে। যদি আপনি সমান্তরালে একাধিক সিপিইউ কোর ব্যবহার করতে চান তবে সমান্তরালে parallel -j 4 ...4 টি কাজের জন্য চেষ্টা করুন । এছাড়াও চেক আউট man parallel

sudo apt-get install parallel

এই লাইনটি aacনির্বাচিত ভিডিওগুলি থেকে অডিও ফাইলগুলি বের করবে এবং সেগুলি m4aপাত্রে রাখবে ।

parallel avconv -i '{}' -map 0:1 -c:a copy '{.}.m4a' ::: %F

সিএলআই-তে সরাসরি কাজ করার সময়, %Fআপনার ইনপুট ফাইলগুলির তালিকা সহ বিকল্প করুন। যেমন *.mp4

এই উত্তরের দ্বারা অনুপ্রাণিত হয়ে , এই প্রশ্নের পূর্ববর্তী উত্তরের দ্বারা এবং পরবর্তীকালের কাছে খারাপসাপের মন্তব্য দ্বারা (এই বলেছিলেন: 'কাঁচা আ্যাক ফাইলগুলিতে মেটাডেটা থাকতে পারে না; যদি আপনি মূল ফাইলগুলি থেকে মেটাডেটা রাখতে চান তবে এম 4 এ ব্যবহার করুন (যা এমপি 4 এর অন্য একটি নাম, তবে অডিও প্লেয়ারদের দ্বারা যথেষ্ট পরিমাণে স্বীকৃত) ফাইলের এক্সটেনশন হিসাবে এ্যাকের পরিবর্তে ' )।

আমি থুনার কাস্টম ক্রিয়ায় এই জাতীয় আদেশ ব্যবহার করি,

এখানে চিত্র বর্ণনা লিখুন

aacঅডিও যুক্ত ভিডিওগুলিতে অ্যাপ্লিকেশন সীমাবদ্ধ করা ।

এখানে চিত্র বর্ণনা লিখুন

প্রসেসিংয়ের সময় একটি টার্মিনাল উইন্ডো খোলা থাকে, যা শেষে বন্ধ হয়, কমান্ডটি এইভাবে পরিবর্তন করা যেতে পারে:

 gnome-terminal -e "parallel avconv -i '{}' -map 0:1 -c:a copy '{.}.m4a' ::: %F"

2

আমি @ জিয়াও-লং চেনের উত্তরটি প্রসারিত করে এটিকে স্ক্রিপ্টে রূপান্তরিত করেছি যা আউটপুট ফাইলটি আরও নতুন হলে ফাইলগুলি এড়িয়ে যায়:

#!/bin/bash

for file in *.mp4; do
    OUT="${file/.mp4/.m4a}"

    if [ "$file" == "$OUT" ]; then
        echo "Unable to handle $file" >&2
        exit 1
    fi

    if [ "$OUT" -nt "$file" ]; then
        echo "Skipping $file; output file is newer."
        continue
    fi

    echo "Converting \"$file\" -> \"$OUT\""
    avconv -loglevel warning -i "$file" -map 0:1 -c:a copy "$OUT"
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.