কীভাবে প্রতি ইমেলে প্রতি এন সেকেন্ডে একটি ভিডিওর একটি ফ্রেম বের করা যায়?


71

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


চিত্রগুলির মান বাছাই সম্পর্কে এই সম্পর্কিত প্রশ্নটি দেখুন: স্ট্যাকওভারফ্লো
পিয়ার্জ

উত্তর:


70

এটি ffmpeg দিয়ে খুব সহজ, এবং এটি অতিরিক্ত স্ক্রিপ্টিং ছাড়াই প্রতি এন সেকেন্ডে একটি ফ্রেম আউটপুট করতে পারে । কোনও চিত্র ক্রম হিসাবে রফতানি করতে কেবল আউটপুট হিসাবে একই ব্যবহার করুন । বিট একটি শূন্য-প্যাডেড পূর্ণসংখ্যা রূপান্তরিত হয় দীর্ঘ ডিজিটের - উদাহরণস্বরূপ আমি দিয়েছিলাম যেমন আউটপুট পায়myimage_%04d.png%0xdx

  • myimage_0000.png,
  • myimage_0001.png,
  • myimage_0002.png

    ইত্যাদি ..

আপনি প্রচুর স্থির চিত্রের ফর্ম্যাট, পিএনজি, জেপেইগ, টিজিএ, যা কিছু ব্যবহার করতে পারেন ( ffmpeg -formatsসম্পূর্ণ তালিকার জন্য দেখুন )।

ঠিক আছে তাই এখন আমরা কীভাবে চিত্রগুলির ক্রম হিসাবে মুভিটি রফতানি করতে জানি, তবে বলুন যে আমরা প্রতিটি ফ্রেম রফতানি করতে চাই না?

কৌশলটি হ'ল আউটপুটটির ফ্রেম রেটটি আমরা যে -r nবিকল্পটি ব্যবহার করতে চাই সেখানে যেখানে nপ্রতি সেকেন্ডের ফ্রেমের সংখ্যা। প্রতি সেকেন্ডে 1 ফ্রেম হবে -r 1, প্রতি চার সেকেন্ডে -r 0.25একটি ফ্রেম হবে , প্রতি দশ সেকেন্ডে একটি ফ্রেম হবে -r 0.1এবং আরও কিছু।

সুতরাং এটি সব একত্র করা, এই এটা এক ফ্রেম সংরক্ষণ করতে দেখাবে কেমন input.movপ্রতি চার সেকেন্ড output_0000.png, output_0001.pngইত্যাদি .:

ffmpeg -i input.mov -r 0.25 output_%04d.png

নোট করুন যে -r 0.25বিকল্পটি অংশের পরে চলেছে -i input.mov, কারণ এটি আউটপুটটির ফ্রেম হারকে নিয়ন্ত্রণ করছে । আপনি যদি ইনপুটটির আগে রাখেন তবে এটি ইনপুট ফাইলটিকে এমন আচরণ করবে যেমন নির্দিষ্ট ফ্রেমের হার রয়েছে।

আপনার প্রয়োজন এমন অনেকগুলি সংখ্যায়% xd পরিবর্তন করুন, যেমন কমান্ড 10,000 টিরও বেশি ফ্রেম তৈরি করে %04dতাতে পরিবর্তন করে %05d। এটি চিত্র সিকোয়েন্সযুক্ত ইনপুট ফাইলগুলির জন্যও কাজ করে। এখানে আরও পড়ুন ।

উইন্ডোজ ব্যবহারকারীরা : কমান্ড লাইনে ব্যবহার করুন%

উদাহরণ: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png

সিএমডি এবং বিএটি স্ক্রিপ্ট ব্যবহার করুন %%

উদাহরণ: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

%%স্ক্রিপ্টগুলিতে দ্বিগুণ এবং %ইন্টারেক্টিভ কমান্ড লাইনে একক । উভয় পরিস্থিতিতে এটিকে ভুল করলে ত্রুটি তৈরি হবে।


আমি প্রতিটি ফ্রেম -rরফতানি করতে চাইলে আমার কী লাগানো উচিত ? আমি যদি ভিডিওটির এফপিএস জানি তবে আমি অনুমান করি যে আমি এটি ইনপুট দিই, তবে আমি কী না করব?
টোমা জ্যাটো

4
-R পতাকাটি মোটেও ব্যবহার করবেন না। তারপরে এফএফএমপিইজি ইনপুট ফাইলের ফ্রেম রেট ব্যবহার করবে।
স্টিপ

2
নোট করুন যে আপনি সত্যিই এটির জন্য ব্যবহার করতে চাইবেন jpegs, যদি না আপনি নিশ্চিত হন তবে আপনি pngযা চান তা ঠিক না। আমার ক্ষেত্রে, jpegগুলি প্রতিটি প্রায় 50kb ছিল এবং এরগুলি pngপ্রায় 2MB ছিল।
mlissner

5
পিএনএস-এর সুবিধা হ্রাসহীন সংকোচন, সুতরাং আপনি যদি চিত্রের সিকোয়েন্সটিকে একটি মধ্যবর্তী হিসাবে ব্যবহার করেন এবং অতিরিক্ত আকারটি মনে না করেন তবে আপনি যখন পিএনজি ব্যবহার করতে পারেন।
দণ্ডিত করুন

এটি যোগ করতে যে মূল্য -q:v 1খুব দরকারী বিকল্প হিসেবে এখানে superuser.com/questions/318845/...
নিকোলাই Shmyrev

27
mplayer -vo jpeg -sstep 5 file.avi

প্রতি 5 সেকেন্ডে একটি ফ্রেমকে জেপিগ ফাইল হিসাবে সংরক্ষণ করবে।

তবে এটি ফাইলের শেষে থামবে না, এটি শেষ ফ্রেমের অনুলিপিগুলি উত্পাদন করা চালিয়ে যাবে। এটি এড়াতে, অন্য প্লেয়ার ব্যবহার করে বা এমপ্লেয়ার সহ সেকেন্ডে ভিডিওটির সময়কাল সন্ধান করুন:

mplayer -vo null -ao null -frames 0 -identify file.avi

এবং "ID_LENGTH = 147.00" এর মতো একটি লাইন সন্ধান করুন।

দৈর্ঘ্য থেকে 2 বিয়োগ করুন, এবং -endposবিকল্পের জন্য এই মানটি ব্যবহার করুন । উদাহরণস্বরূপ, একটি 147 দ্বিতীয় ভিডিওর জন্য:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi

এটি একটি প্লেয়ার বাগের মতো শোনাচ্ছে। সুন্দর কাজ।
কোয়াকোট কোয়েসোট

আপনি কমপক্ষে কোন অপারেটিং সিস্টেমের উপর এই কমান্ডটি ব্যবহার করছেন তা উল্লেখ করতে পারেন?
টমো জ্যাটো

এটি 5 বছর আগে ছিল, তবে এটি সম্ভবত উবার্টু ডেস্কটপ ছিল উবুন্টু 10.4।
লিয়াম

আমি কীভাবে 1s এর চেয়ে ছোট পদক্ষেপগুলি চয়ন করতে পারি। এটি কেবল পূর্ণসংখ্যা গ্রহণ করে।
fcpenha

আজকাল, ডিবিয়ান উপর এমপিভি 0.27.0 ব্যবহার mpv --vo=image --sstep=5 movie.mkvনা করে উল্লিখিত বাগ ( এমপিভি এমপ্লেয়ারের কাঁটাচালনা) ব্যতীত দুর্দান্ত কাজ করে।
অ্যাডাম কাটজ

11

সহ ffmpeg, আপনি নিম্নলিখিতটি করতে পারেন:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

এই কমান্ডটি ভিডিওতে 4 র্থ দ্বিতীয় স্থানে 320 × 240 আকারের জেপিজি থাম্বনেইল তৈরি করে। এটিকে এমন স্ক্রিপ্টে রাখুন যা সময় এবং ফাইলের নাম পরিবর্তন করে এবং আপনি শেষ হয়ে যান।

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


এটি আমার যা করতে চায় তা মনে হচ্ছে তবে একটি সমস্যা আছে। এটি প্রতিটি পুনরাবৃত্তির শুরু থেকে ফাইলটি প্রসেস করবে, তাত্পর্যপূর্ণভাবে ধীর হয়ে যাবে।
লিয়াম

@ লিয়াম - যদি আপনি অফসেটের সময়টি একা ছেড়ে যান (এটি 1 সেট করুন) এবং এর -ss positionপরিবর্তে ফাইলটিতে আরও অনুসন্ধান করার জন্য পতাকা ব্যবহার করে তবে তা কি সহায়তা করবে? -ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
নিফলে

1
@liam: করা -ssআগে -iচাইতে তার আগে ইনপুট ভিডিও ডিকোড পরার ঘটে তাই। এটি এটি দ্রুত করা উচিত। উত্স
কোয়াকোটা কুইসোট

2
Ffmpeg দিয়ে এটি করার একটি আরও ভাল এবং আরও দ্রুত উপায় আছে। আমার উত্তর নীচে দেখুন।
স্টিপ

stib এর সমাধানটি সেরা আইএমও।
গ্রিফিন

8

আপনি যদি এক ধরণের পরিচিতি পত্রকের পরে থাকেন এবং আপনি যদি ইউনিক্সের মতো ওএসের সাথে কাজ করছেন তবে আপনি এই বিস্তৃত স্ক্রিপ্টটি ব্যবহার করতে পারেন, পয়েন্ট ভিডিও পরিচিতি পত্রক * এনআইএক্স , সংক্ষিপ্ত ভিসিএস বলা হয়

পটভূমিতে এটি ব্যবহার করে ffmpeg(ডিফল্টরূপে) বা mplayer, সুতরাং প্রচুর ভিডিও ফর্ম্যাটগুলি পরিচালনা করতে পারে। এটি মুভি থেকে স্থির চিত্রগুলি ক্যাপচারের প্রক্রিয়াটি স্বয়ংক্রিয় করে এবং কিছু শিরোলেখ এবং পাদলেখ দিয়ে একটি ছবিতে এগুলি রচনা করে। আপনি যেমন কয়টি ক্যাপচার চান বা বিকল্পভাবে তাদের মধ্যে সময়ের পার্থক্য চয়ন করতে পারেন।

10 মিনিটের ব্যবধানের জন্য, অনুরোধটি এরকম:

vcs -i 10m input.avi

কিছু অন্যান্য টুইটের জন্য কমান্ডলাইন বিকল্পগুলির সম্পূর্ণ তালিকা পরীক্ষা করুন

এখানে হোমপেজ থেকে নেওয়া একটি উদাহরণ যোগাযোগের শীট :

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


7

ভিএলসি ১.১.০ এবং এর উপরে, আপনি দৃশ্যের ভিডিও ফিল্টারটি ব্যবহার করতে পারেন:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

উপরেরগুলি প্রতি 24 টি ফ্রেমের মধ্যে 1 টি সংরক্ষণ করে (- দৃশ্য-অনুপাত = 24), 00:00:10 থেকে শুরু হয়ে এবং 00:00:11 এ শেষ হবে।

একটি নতুন উইন্ডোজ 8 ইনস্টলেশন (আমার কাছে কোনও অতিরিক্ত ভিডিও প্লাগইন বা সফ্টওয়্যার নেই) সবেমাত্র VLC 2.0.3 এর সাথে এটি কাজ করে যাচাই করা হয়েছে এবং নিশ্চিত করেছে।

সম্পূর্ণ ডকুমেন্টেশন: http://wiki.videolan.org/ হা_ টো_ক্রিয়েট_থম্বনেলস


2

ভার্চুয়ালডাব আপনার জন্য এটি করতে পারে

File-> Export->Image sequence

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


এটি কি প্রতিটি ফ্রেমকে চিত্র হিসাবে সংরক্ষণ করবে?
লিয়াম

হ্যাঁ, প্রতিটি ফ্রেম
শেভেক

আমার বেশিরভাগ ফ্রেমগুলি এড়ানো দরকার, সমস্ত ফ্রেম আউটপুট করা খুব বেশি সঞ্চয় স্থান ব্যবহার করবে। আমার প্রতি কয়েক সেকেন্ডে একটি মাত্র ফ্রেম দরকার।
লিয়াম

1

আপনি এটি চেষ্টা করতে পারে

ভিএলসি কমান্ড লাইন থেকে ...

ভিএলসি "সি: \ আপনার \ ফাইল \ পাথ \ file.avi" -V চিত্র - চিত্র-আউট-প্রিফিক্স = ক্যাপমন - আইমেজ-আউট-রেশিও = 60

ফাইল.ইভি হ'ল ভিডিওটি যা আপনি ক্যাপচার করতে চান, ক্যাপনামটি সেভ করা চিত্রগুলির উপসর্গ, আপনি অনুপাতের সাথে খেলতে চাইতে পারেন (60 এর অর্থ 60 চিত্রের মধ্যে 1 টি ক্যাপচার করা হয়েছে) আপনি আরও কমান্ড যুক্ত করতে পারেন, উদাহরণস্বরূপ --image-out-format jpeg আপনার ক্যাপগুলিকে png এর পরিবর্তে jpegs হিসাবে সংরক্ষণ করবে, --স্ন্যাপশট-পাথ আপনাকে আপনার ক্যাপগুলি কোথায় সংরক্ষণ করতে হবে তা চয়ন করতে দেয়।

উপরের উত্স


আমি এই বার্তাটি পেয়েছি: কমান্ড লাইন বিকল্পগুলি লোড করা যায়নি, সেগুলি বৈধ কিনা তা পরীক্ষা করুন।
লিয়াম

উবুন্টুতে, আমি এই বার্তাটি পেয়েছি: অজানা বিকল্প বা অনুপস্থিত বাধ্যতামূলক যুক্তি missing --image-out-prefix = capname '
লিয়াম

1

ভার্চুয়ালডাবের ফ্রেমগুলি এড়িয়ে যেতে পারেন। ভিডিও -> ফ্রেম রেট মেনুতে অবস্থিত কেবল "ডেসিমেট বাই" বিকল্পটি ব্যবহার করুন। উদাহরণস্বরূপ আপনি যদি "100 ডিকিমেট বাই 100" সেট করেন তবে ফাইল -> রফতানি -> চিত্র ক্রমটি ব্যবহার করুন, এটি প্রতি প্রতি 100 তম ফ্রেমে সংরক্ষণ করবে।

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