এফএফপিপিতে কোনও ভিডিওতে JPG চিত্র সিকোয়েন্সহীনভাবে কীভাবে এনকোড করা যায়?


21

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

নিঃসন্দেহে, আমি মনে করি যে এখানে কিছু কোডেক থাকা উচিত যা প্রতিটি পৃথক jpg ফ্রেমকে যেমন (পুনরায় সংযোজন ছাড়াই) সংরক্ষণ করতে পারে এবং সম্ভবত পূর্ববর্তী ফ্রেম থেকে বদ্বীপের তথ্য দিয়ে কিছু ফ্রেম প্রতিস্থাপন করে কিছু সুন্দর সংক্ষেপণ অর্জন করতে পারে। আমার ক্ষেত্রে ফ্রেমের অনেকগুলি ক্রম রয়েছে যা একে অপরের সাথে অভিন্ন বা তাদের মধ্যে একটি ছোট পার্থক্য রয়েছে।

Ffmpeg এর জন্য এমন কিছু কোডেক এবং উপযুক্ত সেটিংস রয়েছে যা এটি অর্জন করতে পারে?



এছাড়াও সম্পর্কিত: avp.stackexchange.com/questions/7300/…
জর্জ এর বন্ধু

1
সিকোয়েন্স-অফ-জেপিগস দীর্ঘ সময়ের জন্য একটি কোডেক হয়ে আছে। আমার মনে হয় যে ডিজিটাল ক্যামেরাগুলি h.264 টি অবিচ্ছিন্নভাবে MJPEG রেকর্ড করে না এবং ভিডিও ক্যাপচার কার্ডগুলি এটি ব্যবহার করার জন্য ব্যবহৃত হয়, আমি মনে করি।
পিটার কর্ডেস

উত্তর:


24

শুধু ছবিগুলি ম্যাক্স

একটি ভিডিও বানাতে আপনি কেবল জেপিজি চিত্রগুলি ম্যাক্স করতে পারেন:

ffmpeg -framerate 30 -i input%03d.jpg -codec copy output.mkv

নোট করুন যে আপনি বাদ দিলে -framerateএকটি ডিফল্ট ইনপুটটিতে -framerate 25প্রয়োগ করা হবে।

ক্ষতিহীন অপ্টিমাইজেশন

আপনি jpegtranপ্রতিটি ফ্রেমে লসলেস অপ্টিমাইজেশন সম্পাদন করতে ব্যবহার করতে পারেন যা ফাইলের আকারের তাৎপর্যপূর্ণ সঞ্চয় সরবরাহ করতে পারে :

mkdir outputdir
for f in *.jpg; do jpegtran -optimize -copy none -perfect -v "$f" > "outputdir/$f"; done

ffmpegউপরের মত এখন ম্যাক্স ।

এটি আসলে নিখরচায় তা পরীক্ষা করা হচ্ছে

Framehash muxer প্রতিটি ফ্রেমের অনন্য হ্যাশ তুলনা করতে তা নিশ্চিত করার জন্য ফলাফলের সত্যিই অবচয়হীন হয় ব্যবহার করা যেতে পারে:

$ ffmpeg -i input%03d.jpg -f framehash -
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
0,          0,          0,        1,   460800, 29bcc2db3726c7dfec1826c5740f603f
0,          1,          1,        1,   460800, b5fdc23d93cbd043dc2b9290dc8378f0
0,          2,          2,        1,   460800, ee0709942f24b458fd2380d134dcb59d
...

$ ffmpeg -i output.mkv -map 0:v -f framehash -
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
0,          0,          0,        1,   460800, 29bcc2db3726c7dfec1826c5740f603f
0,          1,          1,        1,   460800, b5fdc23d93cbd043dc2b9290dc8378f0
0,          2,          2,        1,   460800, ee0709942f24b458fd2380d134dcb59d
...

উপরের উদাহরণগুলিতে ইনপুট এবং আউটপুট জন্য প্রতিটি সম্পর্কিত ফ্রেম একই হ্যাশ ভাগ করে তা নিশ্চিত করে যে ফ্রেমগুলি অভিন্ন এবং আউটপুট ক্ষয়ক্ষতিহীন।

এছাড়াও দেখুন


আপনি কি দয়া করে স্পষ্ট করে বলতে পারেন যে কেবল দুটি framemd5হ্যাশগুলি তালিকাভুক্ত করার বাইরে দুটি কমান্ড কী অর্জন করবে? অভিন্ন ফ্রেমগুলি এভাবে চিহ্নিত করা হলে আমি কীভাবে অতিরিক্ত সংক্ষেপণ পেতে পারি?
জিজে

1
হ্যাশগুলি কেবলমাত্র আপনাকে দেখানোর জন্য অন্তর্ভুক্ত করা হয়েছিল যে ফ্রেমগুলি পৃথক চিত্রগুলির মতো একই, সুতরাং আপনার "প্রতিটি পৃথক জেপজি ফ্রেমকে যেমন হয় তেমন (পুনঃসংযোগ ছাড়াই)" সংরক্ষণ করার প্রয়োজনীয়তা অর্জন করে।
লগইন

ভিপিআর এমজেপিজ.এমকেভির সাথে শেষ করতে ডুপ্লিকেট ফ্রেমগুলি ফেলে দেওয়ার জন্য একটি অনির্ধারিত ধারণার সাথে আমার নিজের একটি উত্তর পোস্ট করেছে। এমজেপিগের সাথে অস্থায়ী অপ্রয়োজনীয়তার সুবিধা নিতে আমি ভাবতে পারি ভিএফআর। : পি
পিটার কর্ডেস

বিশ্বস্ততার তুলনা করার জন্য এসএসআইএম দ্রুত উপায় হতে পারে।
জ্ঞান

11

এটি একটি ক্ষতিহীন এইচ .264 ভিডিও আউটপুট দেবে যেখানে ফ্রেমগুলি অন্যান্য ফ্রেমের তথ্য ব্যবহার করবে

ffmpeg -f image2 -r 30 -i %09d.jpg -vcodec libx264 -profile:v high444 -refs 16 -crf 0 -preset ultrafast a.mp4

বিকল্পগুলির ব্যাখ্যা:

  • -f image2 - ffmpeg কে ইমেজের একটি গ্রুপ নির্বাচন করতে বলে
  • -r 30 - ffmpeg কে 30 সেকেন্ডে ফ্রেম (বা চিত্রগুলি) প্রতি সেকেন্ডে এনকোড করতে বলে (এটি আপনার পছন্দসই ফ্রেমরেটে পরিবর্তন করুন)
  • -i %09d.jpg- ffmpeg কে ইনপুট হিসাবে 000000000.jpg থেকে 999999999.jpg চিত্রগুলি ব্যবহার করতে বলে। পরিবর্তন করুন 9মধ্যে %09d.jpgকত শূণ্যসমূহ আপনার ইমেজ ক্রম নাম রয়েছে। যদি আপনার ফাইলের নামগুলি উদাহরণস্বরূপ, img0001.jpg হয় তবে এটি img% 04d.jpg হিসাবে প্রকাশ করা হবে
  • -vcodec libx264 - ffmpeg কে H.264 অনুবর্তী ফাইলের আউটপুট করতে বলে
  • -profile:v high444 - libx264 কে হাই 4: 4: 4 প্রেডিকটিভ লসলেস প্রোফাইল ব্যবহার করতে বলছে, লসলেস এনকোডিংয়ের অনুমতি দেয়
  • -refs 16 - libx264 কে 16 টি ছবি বাফারে সংরক্ষণ করার জন্য বলে, যাতে ভিডিওতে অন্য চিত্রগুলি তাদের রেফারেন্স করতে পারে
  • -crf 0 - একটি ক্ষতিহীন এনকোড সম্পাদন করতে libx264 কে বলে
  • -preset ultrafast - আউটপুট ফাইলের আকারের চেয়ে এনকোডিং গতির অগ্রাধিকার দিতে libx264 কে বলে
  • a.mp4- ffmpeg কে a.mp4 নামে একটি MP4 ফাইলে আউটপুট সংরক্ষণ করতে বলে। আপনি যে ফাইলের নাম এবং ফর্ম্যাটটি ব্যবহার করতে চান তাতে এটি পরিবর্তন করুন

3
কয়েকটি নোট: -f image2এখানে অতিরিক্ত অতিরিক্ত। ইমেজ ফাইল ডিমাক্সার ব্যবহার করা উচিত -framerateপরিবর্তে -r। libx264 স্বয়ংক্রিয়ভাবে ক্ষতিহীনদের -profileজন্য উপযুক্ত চয়ন করবে এবং এর -presetসাথে ডিল করবে -refs
লোগান

-refs 5বেশিরভাগ ক্ষেত্রে, আপনি যদি না জানেন যে আপনার সামগ্রীতে অভিন্ন চিত্রগুলি অন্য কয়েকটি দ্বারা পৃথক করা আছে, এটি ডুপ্লিকেটটিতে যাওয়ার আগে x264 এর রেফারেন্সটি হারাতে পারে। ultrafastসিএএভিএলসি-র তুলনায় সিএবিএসি-র ~ 10% লাভ (লসলেসগুলির জন্য প্রয়োজনীয় বিটরেটে উচ্চ সিপিইউ ব্যয়ের জন্য) ব্যতীত লসলেস মোডে কিছুটা আলাদা আলাদা Higher সিরিয়াসলি, কিছু লাইভ-অ্যাকশন 720x480p60 (ডিন্টেরলেস আউটপুট), superfastছিল 28 জিবি, slower27 জিবি ছিল। যদি এনকোডের সময়টি কোনও ব্যাপার না, তবে ডিকোড সময় দেয় তবে নিশ্চিত হয়ে নিন যে আপনি সিএবিএসি এড়ানোচ্ছেন। এমনকি এমনকি -tune fastdecode। মাঝারি রেফ কাউন্ট আঘাত করা উচিত নয়।
পিটার কর্ডেস

এবং আপনার কাছে জ্বলতে সিপিইউ থাকলে আপনি -preset placeboকয়েক শতাংশ অতিরিক্ত ভগ্নাংশের জন্য চেষ্টা করতে পারেন ।
DrYak

সম্পূর্ণতার জন্য h265 এর নিজস্ব লসলেস মোডও রয়েছে। -vcodec libx265 -x265-params lossless=1সমতুল্য বিকল্প। (তবে আমার অভিজ্ঞতায় (= পাওয়ারপয়েন্ট স্লাইডশো উপস্থাপনাগুলির রেকর্ডিং)) এটি অগত্যা ভাল নয় এবং এটি এইচ 264 এর চেয়ে অনেক ধীর গতির) আগামী বছরের এওমিডিয়ার এভি 1 / আইইটিএফ এর নেটওসি 1 / জিফের ডালা / যেটির নামকরণ হতে চলেছে তার জন্য থাকুন ... এর
লসলেস

5

আপনি একটি তৈরি করতে পারেন aviএকটি সিরিজ হিসেবে অ্যানিমেশন pngচিত্র ( png হয় অবচয়হীন তাই jpeg => pngরূপান্তর আপনার ছবি জমিতে করা উচিত নয়):

আপনার ছবি যদি একটি নাম img_0001.jpg

ffmpeg -r 25 -start_number 1 -f image2 -i "img_%04d.jpg" -vcodec png video.avi

যেখানে "25" হ'ল ফ্রেম রেট যা আপনি ফলাফল প্রাপ্ত ভিডিওতে চান। -start_numberএটি যদি 1 হয় তবে এটির প্রয়োজন হয় না, তবে আপনার প্রথম ভিডিও নম্বরটি 1 না হলে এটি কার্যকর।

আপনি যদি mjpegসর্বোচ্চ মানের কমান্ড লাইনটি দিয়ে এনকোড করতে চান তবে তা হ'ল:

ffmpeg -r 25 -start_number 1 -f image2 -i "img_%04d.jpg" -vcodec mjpeg -qscale 1 video.avi

এবং জিনিসটির সৌন্দর্যটি হ'ল আপনি ভিডিওটিকে একটি সিরিজে কোনও ছবিতে রূপান্তর করতে পারেন:

ffmpeg -i video.avi "img_series_%04d.png"
ffmpeg -i video.avi "img_series_%04d.jpg"

ইত্যাদি ...


এটি সত্যই জিজ্ঞাসকদের চাহিদা পূরণ করে না। তিনি এমন একটি উপায় সন্ধান করছেন যা কেবলমাত্র চিত্র পরিবর্তন হলেই ফ্রেমটি নিঃসন্দেহে আপডেট করা যায়। এর অর্থ একই চিত্রটি একাধিকবার ব্যবহৃত হতে পারে। প্রকৃতির দ্বারা জেপিগ ক্ষতিকারক নয় কারণ আমি বিশ্বাস করি এটি সর্বোচ্চ মানের এমনকি জেপিগ সংক্ষেপণ ব্যবহার করে।
এজে হেন্ডারসন

আসলে আমি অনুমান করি যে তিনি কিছু সংকোচনে থাকতে ইচ্ছুক ছিলেন, যদিও আমি নিশ্চিত নই যে এটি একই ফ্রেমের দীর্ঘ সিকোয়েন্সগুলিতে কীভাবে চলছে। আমি এখনও মনে করি একটি পরিবর্তনশীল ফ্রেম রেট উপস্থাপনা ফর্ম্যাট যা প্রয়োজন তা নিশ্চিত হওয়া সত্ত্বেও ffmpeg কোনও সমর্থন করে কিনা তা আমি নিশ্চিত নই।
এজে হেন্ডারসন

CorePNG পি ফ্রেমগুলি তৈরি করতেও সক্ষম। সাধারণত jpeg হ্রাসহীন সংকোচনের নয়, এবং আমি সন্দেহ করি যে এমজেপেইগ পি ফ্রেম তৈরি করতে পারে। আমি সম্মত হয়েছি আমি যেভাবে জিজ্ঞাসা করা হয়েছে তেমন উত্তর দেইনি, তবে আমি এফএফএমপিএগহীন একটি লসলেস ভিডিও রাখার একটি সমাধান দিই।
অলিভিয়ার এস

4

লর্ডনেকবার্ডের উত্তরে প্রসারিত করার জন্য, হ্যাঁ, কেবল জেপিজি ডেটা এমজেপিইজি ভিডিও স্ট্রিমে মিশ্রিত করুন। এটি আউটপুট চিত্রগুলির যথাযথ ক্রমের সর্বনিম্ন উপস্থাপনা হবে, যদিও এমজেপিইজি হ'ল আজকের মানদণ্ডগুলির দ্বারা ভয়াবহভাবে অক্ষম কোডেক। (কোনও অস্থায়ী রিডানডেন্সি নয়, এমনকি কোনও অন্তর্ পূর্বাভাসও নয়।

আপনার ইনপুটটিতে সদৃশ চিত্রগুলির সুবিধা নিতে আপনি একটি পরিবর্তনশীল-ফ্রেমরেট এমজেপিইজি ভিডিও করতে পারেন।

ffmpeg -framerate 30 -i input%03d.jpg -vf mpdecimate -codec copy output.mkv  # doesn't work.

এইচআরএম, এটি কাজ করছে না, যেহেতু এমপিডিসিমেট সংকুচিত ডেটাগুলিতে কাজ করবে না, এবং আমরা ffmpeg ডিকোড করতে এবং তারপরে ক্ষতি এবং সিপিইউ ব্যয় ছাড়াই চিত্রের ডেটা পুনরায় জেপিং করতে পারি না।

আপনি যদি নকল jpg উত্স ফাইলগুলি সেই সিকোয়েন্স নম্বর, বা অন্য কিছু দিয়ে খালি ফাইলগুলি প্রতিস্থাপন করেন?

যেহেতু এই প্রশ্নটি এখনও সাম্প্রতিক নয়, কেউ কীভাবে জিজ্ঞাসা না করে উত্তর না দিয়ে আমি কীভাবে এটি করব তা নির্ধারণের জন্য সময় নিচ্ছি না। তবে যেহেতু এমজেপিইগ এমকেভি কনটেইনারটিতে যেতে পারে, আমি নিশ্চিত যে পুনরাবৃত্ত ফ্রেমের জন্য জেপিগ ডেটা নকল করে না এমন একটি ফাইল পাওয়া সম্ভব তবে তার পরিবর্তে ডুপ্লিকেটগুলির ক্রম না হওয়া পর্যন্ত ডিকোড করার একটি আউটপুট ফ্রেম নেই instead ওভার।

ওহ এখানে একটি ধারণা:

ffmpeg -framerate blah -input blah -vf mpdecimate -f mkvtimestamp_v2 mpdecimate.timestamps

তারপরে এমপিডিসিমেট যে ফ্রেমগুলি ফেলে দিতে চায় তার জন্য সমস্ত জেপিগগুলি সরিয়ে (বা একপাশে সরিয়ে ফেলুন) (সম্ভবত এটিতে কিছু লগিংয়ের বিকল্প রয়েছে? বা -vf শোইনফো, এবং পার্স করুন, এবং কেবলমাত্র তার ফ্রেমে পিছনে রেখে যে ফ্রেমগুলি প্রদর্শিত হবে তা সরান বা হার্ডলিঙ্ক করুন বাদ পড়া জেপিইজি?)। একটি এমজেপিইজি.এমকেভিতে এটি ম্যাক্স, তারপরে টাইমস্ট্যাম্পগুলির সাথে ফ্রেম টাইমস্ট্যাম্পগুলি প্রতিস্থাপন করার জন্য এমকেভ্র্যামের সাহায্যে কিছু করুন mpdecimate.timestamps

আপনি যদি এমএসপিইজে কেবল জেপিগ ডেটা ম্যাক্সিংয়ের পরিবর্তে এক্সকোডিং করছিলেন তবে এটি অনেক সহজ হবে, আপনি এমপিডিসিমে এবং অন্য কোনও কোডেকের সাথে আমার প্রথম কমান্ডটি ব্যবহার copyকরতেন, এবং এটি জাস্ট ওয়ার্ক (টিএম) করবে।

আমি এটির একটিও চেষ্টা করি নি, যেহেতু এটি একটি পুরানো প্রশ্ন। এছাড়াও এমপিডিসিমেট আউটপুটের উপর ভিত্তি করে আপনার জেপিগের ডিরেক্টরিটি কীভাবে ফিল্টার করতে হবে বা টাইমস্ট্যাম্প স্ট্রিমটি কীভাবে ব্যবহার করতে হবে তার ফাঁকাগুলি আমি পূরণ করিনি।

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