পুনরায় এনকোডিংয়ের জন্য ফাইলগুলি সামঞ্জস্যপূর্ণ করতে ব্যাচ এইচ .265 এমকেভি কে এফ.2mpeg দিয়ে H.264 এ রূপান্তর করে


31

আমার কাছে H.265 এনকোডযুক্ত ফাইল রয়েছে যা এতটা সংস্থানীয় সংস্থানীয় যেগুলি তারা ভাল খেলেন না এবং আমার রূপান্তর সফ্টওয়্যার (মেনকোডার) বর্তমানে (H265) ফর্ম্যাট সমর্থন করে না। আমি কি তাদেরকে একটি কমান্ড লাইন ব্যাচ ফাইলে H.264 তে রূপান্তর করতে দ্রুত ডেভিয়েড / ওজিআরপি ব্যবহার করে পুনরায় সংক্ষেপণের জন্য ফাইলগুলি রূপান্তর করতে পারি? এই সাইটটি অনুসন্ধান করার পরে আমি এটি নিয়ে আলোচনা করে খুঁজে পাইনি সুতরাং আমি যা অনুভব করছি তা একটি দরকারী প্রশ্ন এবং প্রশ্নের উত্তর দিয়ে দেব।

উত্তর:


37

হ্যাঁ, ব্যবহার করছি ffmpeg

একটি টার্মিনাল খুলুন এবং H.265 এনকোডযুক্ত ফাইল রয়েছে এমন ডিরেক্টরিতে এটি পরিচালনা করুন, ধরে নিবেন আপনার ffmpegএবং যথাযথ লাইব্রেরিগুলি ইনস্টল হয়েছে এবং ধরে নিচ্ছেন যে তারা এমকেভি ফর্ম্যাটে আছে এবং নিম্নলিখিতটি টার্মিনাল উইন্ডোতে পেস্ট করুন।

INPUT="$1"
for i in *.mkv ; do
    ffmpeg -i "$i" -bsf:v h264_mp4toannexb -sn -map 0:0 -map 0:1 -vcodec libx264 "$i.ts"
    mv "$i.ts" "$i.mpg"
    sleep 3
done

ওখানে তোমার আছে। এটি একই ডিরেক্টরিতে এমপিজি ধারকটিতে h.264 এ রূপান্তর করবে।

কমান্ডটি পরিবর্তন করে:

  • for i in *.mkv ; do ... done

    এটি ব্যাচ প্রক্রিয়াতে অন্তর্ভুক্ত করার জন্য ডিরেক্টরিতে সমস্ত .mkv ফাইল সেট আপ করে। আপনার প্রক্রিয়া করতে ইচ্ছুক ফাইলগুলির ধারক প্রসারকে সামঞ্জস্য করার জন্য এটি পরিবর্তন করা যেতে পারে।

  • ffmpeg -i "$i" Ffmpeg প্রোগ্রামটি চালায় এবং ফাইলগুলি প্রক্রিয়া করার জন্য আহ্বান জানায়।

    • -bsf:v ব্যবহার করতে ভিডিও বিট স্ট্রিম ফিল্টার সক্রিয় করে।

    • h264_mp4toannexb - সক্রিয় করা বিট স্ট্রিম ফিল্টার।

      কোড প্রিফিক্সড মোডটি শুরু করার জন্য দৈর্ঘ্য উপসর্গ মোড থেকে একটি এইচ 264 বিট স্ট্রিম রূপান্তর করুন (আইটিইউ-টি এইচ .264 স্পেসিফিকেশনের আনেক্সেক্স বিতে সংজ্ঞায়িত)।

      এটি কিছু স্ট্রিমিং ফর্ম্যাটগুলির দ্বারা প্রয়োজনীয়, সাধারণত এমপিইজি -2 পরিবহন স্ট্রিম্যাট ফর্ম্যাট ( mpegts) প্রক্রিয়াকরণ এমকেভি এইচ .264 (বর্তমানে) এটির প্রয়োজন, যদি এটি অন্তর্ভুক্ত না করা হয় তবে এটি ব্যবহারের নির্দেশ দিয়ে আপনি টার্মিনাল উইন্ডোতে একটি ত্রুটি পাবেন।

    • -sn সাবটাইটেল স্ট্রিমগুলির স্ট্রিমিং বন্ধ করে দেয় (যারা তাদের ভিডিওতে সাবটাইটেল চান না তাদের জন্য) এটি alচ্ছিক এবং এটি সরানো যেতে পারে।

    • -map 0:0 -map 0:1Ffmpeg কে কেবল ফাইলের প্রথম দুটি স্ট্রিম প্রক্রিয়া করতে বলে ( 0:0এটি ভিডিও স্ট্রিম, 0:1ফাইলটির প্রথম অডিও স্ট্রিম)। এটি দুটি কাজ করে, অতিরিক্ত অডিও স্ট্রিমগুলি সরিয়ে দেয়, সাধারণত প্রথম অডিও স্ট্রিমটি ইংরেজি তবে সর্বদা নয়। এম্বেড থাকা সাবটাইটেলগুলির মতো অন্যান্য স্ট্রিমগুলি ফাইলের আকার হ্রাস করে সরানো হয়। এটি একটি .চ্ছিক স্ট্রিং। আপনি ffprobeফাইলটিতে উপলব্ধ স্ট্রিমগুলি দেখতে ব্যবহার করতে পারেন । -mapalচ্ছিক এবং কমান্ড থেকে বাতিল করা যেতে পারে।

    • -vcodec libx264 এটি ffmpeg কে H.264 এ আউটপুট এনকোড করতে বলে

    • "$i.ts" .Ts ফর্ম্যাটে আউটপুট সংরক্ষণ করে, এটি আপনার উত্স ফাইলগুলিকে ওভাররাইট না করার জন্য এটি কার্যকর।

  • mv "$i.ts" "$i.mpg"ফাইল এক্সটেনশানটিকে একই ডিরেক্টরিতে এমপিজিতে রূপান্তর করে। আপনার পছন্দসই ডিরেক্টরিতে এটি প্রেরণে এটি সেট আপ করা যেতে পারে।

  • sleep 3 - পরবর্তী ফাইলটি সারিবদ্ধ করার জন্য ffmpeg সময় দেওয়ার প্রক্রিয়াটিকে বিশ্রাম দেওয়ার অনুমতি দেয়


3
অসাধারণ! এখন আমরা প্রশ্নের নীচের মন্তব্যগুলি মুছতে পারি। আমি বলব যে sleep 3এটি অপ্রয়োজনীয় (তবে লুপটি বন্ধ করার পক্ষে কার্যকর), এবং INPUT=$1এটি অর্থহীন কারণ যেহেতু আপনি সরাসরি এটি একটি ইন্টারেক্টিভ শেলের মধ্যে চালাচ্ছেন।
মুড়ু

11
পুনরায় এনকোডিংয়ের পরিবর্তে অডিওটি অনুলিপি করার বিষয়ে স্ট্রিম বিবেচনা করুন -c:a copy। এছাড়াও, 0:0সর্বদা ভিডিওর উল্লেখ 0:1নাও করতে পারে এবং অডিওকে সর্বদা উল্লেখ নাও করতে পারে। আপনি সম্ভাব্য সমস্যাগুলি এড়াতে একটি স্ট্রিম স্পেসিফায়ার ব্যবহার করতে পারেন: -map 0:v -map 0:aআপনি যদি ইনপুট 0 থেকে সমস্ত ভিডিও এবং অডিও স্ট্রিম -map 0:v:0 -map 0:a:0চান , বা আপনি যদি ইনপুট থেকে প্রথম ভিডিও এবং অডিও স্ট্রিমগুলি চান তবে আপনি যদি কেবলমাত্র অডিও ইংরাজী স্ট্রিম চান: -map 0:m:language:eng(ধরে নিয়েছেন) লেবেলযুক্ত)।
লগন

1
@ লর্ডনেকবার্ড আমি আপনার সম্পূর্ণ উত্তর লেখার পক্ষে ভোট দেব।
ফ্রান মারজোয়া

1
@ ফ্রান লক্ষ্য করেনি যে মন্তব্যটিতে এতগুলি উত্সাহ রয়েছে। আমি সহজ, কম ত্রুটিযুক্ত প্রবণতা এবং আরও দক্ষ পদ্ধতি ব্যবহার করে একটি উত্তর যুক্ত করেছি ।
লগইন

1
আমি পুরোপুরি সহজভাবে যেতে হবে ffmpeg -i $INPUT -vcodec h264 -acodec copy $OUTPUT। আমি প্রতিদিন যে কিছু ব্যবহার করি এবং বাস্তবে অর্থহীন পতাকাগুলির ব্যারেজটির বিপরীতে মুখস্থ করতে পারি যা প্রতিটি ffmpeg উত্তর এর জন্য এত কুখ্যাত।
বেন সিনক্লেয়ার

20

H.265 এর H.264-তে ব্যাচ রূপান্তর

এই উদাহরণগুলি সাম্প্রতিক জন্য লেখা হয়েছিল ffmpeg। নিজেকে কিছুটা ঝামেলা বাঁচান এবং সাম্প্রতিক সংস্করণটি ডাউনলোড করুন । তারপরে ffmpegবাইনারিটি রাখুন ~/binবা /usr/local/bin(এটি লক্ষ্য করার জন্য আপনাকে লগ আউট করতে হতে পারে তবে লগ ইন করতে হবে)।

ম্যাট্রোস্কা আউটপুট

mkdir h264vids
for f in *.mp4; do ffmpeg -i "$f" -map 0 -c copy -c:v libx264 -crf 23 -preset medium h264vids/"${f%.*}.mkv"; done
  • এই উদাহরণটি নামের একটি ডিরেক্টরিতে আউটপুট দেবে h264vids

  • এই উদাহরণটি আপনার ইনপুটগুলি ধরে নিয়েছে .mp4। যদি তা না .mp4হয় তবে উদাহরণের উদাহরণটি আপনার ইনপুট ফাইলের ধরণে পরিবর্তন করুন, বা কেবল লোভী *নিজেই ব্যবহার করুন ।

  • -crfমানের জন্য এবং -presetএনকোডিং গতি / দক্ষতার জন্য সামঞ্জস্য করুন । অথবা কেবলমাত্র এই বিকল্পগুলি অপসারণ করুন এবং ডিফল্টগুলি ব্যবহার করুন যা মোটামুটি ভাল এবং বেশিরভাগের জন্য যথেষ্ট হওয়া উচিত (উদাহরণস্বরূপ এই বিকল্পগুলির জন্য ডিফল্ট মানগুলি ব্যবহার করা হচ্ছে)। এই বিকল্পগুলির জন্য আরও তথ্যের জন্য এফএফপিপেক উইকি: এইচ .264 দেখুন ।

এমপি 4 আউটপুট

এটি একটি আরও জটিল। ইনপুট অডিওটি এএসি হয় কিনা তা নির্ভর করে এটি শর্তসাপেক্ষ এনকোডিং সম্পাদন করবে। যদি ইনপুট অডিওটি এএসি হয় তবে অডিওটি যেমন স্ট্রিম করা হবে তেমন অনুলিপি করা হবে (পুনরায় ম্যাক্সড) এবং অযথা পুনরায় এনকোডিং এড়ানো হবে। যদি ইনপুট অডিওটি এএসি না হয় তবে এটি এএকে পুনরায় এনকোড করা হবে।

কীভাবে এটি ব্যবহার করবেন ffprobeএবং কীভাবে করা যায় তা বোঝানোর জন্য এখানে একটি সাধারণ স্ক্রিপ্ট রয়েছে ffmpeg। আপনার ভিডিওগুলিকে রূপান্তরিত করতে ডাইরেক্টরিতে এটি অনুলিপি করুন এবং সংরক্ষণ করুন, এর সাথে এটি কার্যকর করার অনুমতি দিন chmod +x yourscriptname, তারপরে এটি চালান ./yourscriptname

#!/bin/bash

mkdir h264vids

for f in *.mkv
do
  audioformat=$(ffprobe -loglevel error -select_streams a:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$f")
  if [ "$audioformat" = "aac" ]; then
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart h264vids/"${f%.*}.mp4"
  else
    ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a aac -movflags +faststart h264vids/"${f%.*}.mp4"
  fi
done
  • এই উদাহরণটি নামের একটি ডিরেক্টরিতে আউটপুট দেবে h264vids

  • এই উদাহরণটি আপনার ইনপুটগুলি ধরে নিয়েছে .mkv। যদি তা না .mkvহয় তবে উদাহরণের উদাহরণটি আপনার ইনপুট ফাইলের ধরণে পরিবর্তন করুন, বা কেবল লোভী *নিজেই ব্যবহার করুন ।

  • সম্পর্কিত উপর নোট দেখুন -crfএবং -preset

  • আপনি ctrl+ এর সাথে এনকোডিংটি বিরতি দিতে zএবং আবার শুরু করতে পারেন fg


0

পূর্ববর্তী উত্তরগুলি বিবেচনা করে আমি নিম্নলিখিতগুলি নিয়ে এসেছি:

for file in *265.mkv; do nice -n19 ffmpeg -i $file -c copy -c:v libx264 ${file/%265.mkv/264.mkv}; done

এটি ধরে নেওয়া হয় যে ফাইলগুলির সর্বদা একটি নাম শেষ হয় 265.mkv। এই শেষটি প্রতিস্থাপন করা হবে 264.mkv

যদি আপনার ফাইলের নামকরণ আলাদা হয় তবে আপনাকে সেই আদেশটি মানিয়ে নিতে হবে।

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