-R বিকল্পের সাথে ভিডিও থেকে আমি কীভাবে ফ্রেম ffmpeg এক্সট্রাক্টের সাথে যুক্ত টাইমস্ট্যাম্পগুলি নিষ্কাশন করব?


12
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

ফ্রেম উত্তোলন করতে আমি যে কমান্ডটি ব্যবহার করছি এবং এটি আমার প্রত্যাশার মতো কাজ করছে। তবে আমি ফ্রেমের টাইমস্ট্যাম্পগুলিও দেখতে চাই। নির্ভুলতা যাই হোক না কেন 100 মিলিসেকেন্ড আমার পক্ষে যথেষ্ট ভাল। Ffmpeg এটি করতে পারেন?

অতিরিক্ত বিশদ সরবরাহ করা,

আমি যখন উপরের কমান্ডটি চালাচ্ছি তখন আমি প্রায় 100 টি জেপিইজি পেয়েছি, আমি অনুমান করি যে এই জেপিইজি এবং ভিডিওর ফ্রেমের মধ্যে একটি 1 থেকে 1 (বা অনেকগুলি 1) চিঠিপত্র রয়েছে। আমি ফ্রেমটির টাইমস্ট্যাম্পটি জানতে চাই যা একটি জেপিইজি চিত্র 'আমি' হিসাবে আউটপুট ছিল।

অতিরিক্ত হিসাবে আমি ffprobe চেষ্টা করেছিলাম তবে আমি এটি ভিডিও সময়কালও সঠিকভাবে রিপোর্ট করে দেখতে পাই :(


যেমন কি? আফাইক জেপিগের তেমন কোনও মেটাডেটা নেই। এক্সআইএফ টাইমস্ট্যাম্প captureসময়ের জন্য ।
রাজীব

নিশ্চিত যে জেপিগের মেটাডেটা নেই, তবে এমপি 4 সম্ভবত। আমি কী ffmpeg এটিকে JPEGS হিসাবে এনকোড করে ফ্রেমগুলির সাথে টেনে আনতে এবং ফাইলে টাইম স্ট্যাম্পগুলি ফেলে দিতে নির্দেশ দিতে পারি?
শ্রীনী

ffmpegআপনার কমান্ড থেকে সম্পূর্ণ কনসোল আউটপুট অন্তর্ভুক্ত করুন ।
লোগান

ffprobe আপনাকে এমপি 4 ভিডিও স্ট্রিমের টাইমস্ট্যাম্পের তথ্য দিতে পারে। আপনি কি জিজ্ঞাসা করছেন যে ফ্রেমগুলি অনুলিপি করা বা বাদ দিতে পারে তবে মূল এমপি 4 টাইমস্ট্যাম্পগুলির সাথে কী যোগাযোগ রয়েছে? সেক্ষেত্রে আপনি কার্যকর করার সময় ফ্রেম দ্বারা ফ্রেম পেতে পারেন কিনা তা দেখার জন্য আমি ভার্বোসিটি সেটিংস বৃদ্ধি করে ঘুরে দেখব। আপনি "ফ্রেমের সাথে সম্পর্কিত টাইমস্ট্যাম্পগুলি" বলতে কী বোঝাতে চেয়েছেন আপনি তার প্রসারিত করতে পারেন।
dstob

@dstob ফ্রেমের সাথে যুক্ত টাইমস্ট্যাম্পগুলি হ'ল ইনপুট ভিডিওর উপস্থাপনা টাইমস্ট্যাম্পগুলি, অর্থাত্ যখন প্রতিটি ফ্রেম প্রদর্শিত হবে, ভিডিও শুরুর তুলনায়।
slhck

উত্তর:


13

আপনি যা করতে পারেন তা হ'ল ফিল্টার দিয়ে fpsফিল্টার করে চিত্র রচনার প্রক্রিয়াটি "সিমুলেট" করা , তারপরে ffprobeউত্পন্ন ফ্রেমের টাইমস্ট্যাম্পগুলি প্রদর্শন করে। এর অর্থ হ'ল 25 fps এ, 50 তম ফ্রেমে (আপনার 50 তম চিত্রের মতো) একটি পিটিএস থাকবে 2.00 সেকেন্ড।

আপনি এটি এর মতো করুন:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

আউটপুট দেবে:

0
0.04
0.08
0.12
0.16
...

এগুলি প্রতিটি আউটপুট চিত্রের টাইমস্ট্যাম্প। আপনি প্রকৃতপক্ষে ফ্রেম এবং টাইমস্ট্যাম্পগুলির তালিকা একত্রিত করতে পারেন:

ls -1 চিত্র - *। jpeg> images.txt
ffprobe -f lavfi -i "মুভি = ইনপুট.এমপি 4, এফপিএস = এফপিএস = 25 [আউট0]" -শো_ফ্রেমস-শো_েন্টরি ফ্রেম = pkt_pts_time-csv = p = 0> ফ্রেমস.এসটিএসটি
images.txt ফ্রেমস টেক্সট> সংযুক্ত.টিএসটিস্ট করুন

এর সাথে একটি ফাইল তৈরি করবে:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

মনে রাখবেন যে খুব বেশি ফ্রেম বা তথ্য আউটপুটের অনেক বেশি লাইন থাকলে এটি বহির্মুখী রেখার ফলস্বরূপ হতে পারে। এটি সেখানে কিছুটা ভুল বলে মনে হচ্ছে।


আউটপুটে রাখা ধ্রুব ফ্রেমরেট বা মূল এমপি 4 টাইমস্ট্যাম্পগুলির যে কোনও ফ্রেমরেট হতে পারে এবং কোনও টাইমস্ট্যাম্প মান থাকতে পারে তার সাথে যোগাযোগের ক্ষেত্রে কি এই টাইমস্ট্যাম্প?
dstob

এই টাইমস্ট্যাম্প অনুরোধ করা আউটপুট ফ্রেমরেটের উপর ভিত্তি করে। এটি আউটপুট ছবিগুলির পাশাপাশি সেই ছবিগুলি যে আসল আসল ইনপুট ভিডিও ফ্রেমের সাথে সম্পর্কিত। সেখানে কেবলমাত্র এক সময়ের বেজ রয়েছে। এটি কাজ করে কারণ ফ্রেমরেট পরিবর্তন করার সময়, ffmpeg (অবশ্যই) ভিডিওটি দ্রুত খেলবে না, তবে প্রতিটি ফ্রেমের উপস্থাপনার সময় "প্রসারিত" করবে এবং অনিবন্ধিত ফ্রেমগুলি ফেলে দেবে।
21:25

আপনি যখন ম্যানুয়ালি আউটপুট টাইম বেস তৈরি করছেন তখন কেন কেবলমাত্র একটাই সময় বেস থাকতে হবে? এটি সর্বদা অবশ্যই হবে না তবে প্রথম 60 টি এফপিএস ভিডিওতে আমি এটি ছুঁড়ে দিয়েছি, ffmpeg কেবল ইনপুটটির টাইম স্ট্যাম্পগুলি উপেক্ষা করে একটি নিজস্ব টাইম বেস তৈরি করেছে।
ডিস্টব

নিশ্চিত আপনি ঠিক কী পাচ্ছেন তা আমি বুঝতে পেরেছি না। ffmpeg ইনপুট টাইমবেস হিসাবে নির্বাচন করে যাই হোক না কেন এটি প্রথম ইনপুট ফাইলের টাইমবেস হিসাবে পার্স করে । আপনি অবশ্যই ffmpeg কে ইনপুট টাইমস্ট্যাম্পগুলি দিয়ে ফেলে দিতে বলতে পারেন -vsync drop, তবে এটি ফিল্টারিংয়ের পরে ঘটে, আইআইআরসি।
slhck
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.