একটি নির্দিষ্ট সময়ে এফএফএমপিগ সহ একটি ভিডিওর জন্য কীভাবে 1 স্ক্রিনশট নিষ্কাশন করবেন?


109

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

তবে আমি এখানে কেবল 1 স্ক্রিনশট চাই, 01:23:45 ইন বা screen 86% এ 1 স্ক্রিনশট চাই।

এটি ffmpegthumbnailer দিয়ে সমস্ত সম্ভব তবে এটি অন্য একটি নির্ভরতা যা আমি নির্ভর করতে চাই না। আমি ffmpeg দিয়ে এটি করতে সক্ষম হতে চাই।

উত্তর:


208

-ssবিকল্পটি ব্যবহার করুন :

ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
  • JPEG আউটপুট জন্য -q:vআউটপুট গুণমান নিয়ন্ত্রণ করতে ব্যবহার করুন । পূর্ণ পরিসীমাটি 1-31 এর রৈখিক স্কেল যেখানে নিম্ন মানের ফলাফল উচ্চ মানের হয়। 2-5 চেষ্টা করার জন্য একটি ভাল পরিসীমা।

  • নির্বাচন ফিল্টার এমন নির্বাচন শুধুমাত্র নির্দিষ্ট ফ্রেম ধরনের, বা 1 প্রতি 100, ইত্যাদি আরো জটিল প্রয়োজনের জন্য একটি বিকল্প পদ্ধতি প্রদান করে

  • -ssইনপুট আগে স্থাপন দ্রুত হবে। এফএফম্পেগ উইকি দেখুন : সন্ধান এবং ffmpegক্লাইট সরঞ্জাম ডকুমেন্টেশন থেকে এই উদ্ধৃতাংশ :

-ss অবস্থান (ইনপুট / আউটপুট)

যখন একটি ইনপুট বিকল্প হিসাবে ব্যবহৃত হয় (আগে -i), এই ইনপুট ফাইলে অবস্থানে সন্ধান করে। সর্বাধিক ফর্ম্যাটগুলিতে নোট করুন এটি ঠিক অনুসন্ধান করা সম্ভব নয়, সুতরাং ffmpegঅবস্থানের আগে নিকটতম সন্ধানের পয়েন্টে সন্ধান করবে। যখন ট্রান্সকোডিং হয় এবং -accurate_seekসক্ষম করা হয় (ডিফল্ট), সন্ধান পয়েন্ট এবং অবস্থানের মধ্যে এই অতিরিক্ত বিভাগটি ডিকোড করে ফেলে দেওয়া হবে। স্ট্রিম অনুলিপি করার সময় বা কখন -noaccurate_seekব্যবহৃত হবে, এটি সংরক্ষণ করা হবে।

যখন একটি আউটপুট বিকল্প হিসাবে ব্যবহৃত হয় (আউটপুট ফাইলের আগে), ডিকোড করে কিন্তু টাইমস্ট্যাম্পগুলি অবস্থানে না আসা পর্যন্ত ইনপুট বাতিল করে।

অবস্থানটি সেকেন্ডে বা hh:mm:ss[.xxx]আকারে হতে পারে ।


2
এটি অনেক দ্রুত। তোমাকে অনেক ধন্যবাদ. প্রথমে -এসএস স্থাপন করা একটি বিশাল পার্থক্য করে।
পিটার ব্যাংটসন

নির্দিষ্ট সময়ের পরে এন-থ ফ্রেম পাওয়ার কোনও উপায় আছে কি?
dorien

@ গুঞ্জেরপিজ আমি সম্ভাব্য নিদর্শনগুলির বিষয়ে কোথাও কোনও উল্লেখ দেখতে পাই না।
স্টিফান রেইচ

2
নোট করুন যে vframes(কমপক্ষে) সংস্করণ 4.2.2 এ অপ্রচলিত। প্রতি ম্যানুয়াল "[ vframes] ' -frames:v' 'র জন্য একটি অপ্রচলিত উপন্যাস , যা আপনার পরিবর্তে ব্যবহার করা উচিত" "
Synexis

নিখুঁত এবং দ্রুত কাজ করে।
23

37

FFMpeg প্রদত্ত টাইমস্ট্যাম্পটি অনুসন্ধান করে এবং চিত্র হিসাবে ঠিক একটি ফ্রেম বের করে এটি করতে পারে, উদাহরণস্বরূপ দেখুন:

ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg

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

-i input file           the path to the input file
-ss 01:23:45            seek the position to the specified timestamp
-vframes 1              only handle one video frame
output.jpg              output filename, should have a well-known extension

-ssপরামিতি আকারে একটি মান গ্রহণ করে HH:MM:SS[.xxx]বা সেকেন্ডের মধ্যে একটি নম্বর হিসাবে। যদি আপনার শতাংশের প্রয়োজন হয় তবে আপনার আগে ভিডিওর সময়কাল গণনা করা দরকার।


প্রত্যাশার মতো কাজ করা দেখে মনে হচ্ছে। আমি বর্তমানে বেঞ্চমার্কিং করছি যদি ffmpegthumbnailer ব্যবহার করার মতো একই গতি হয়।
পিটার বেনগটসন

হ্যাঁ, এই পদ্ধতিটি অত্যন্ত ধীর। Peterbe.com/plog/fastest-way-to-take-screencaps-out-of-videos
পিটার

7
-i বিকল্পটি ব্যবহার করার চেষ্টা করুন -i এর আগে এটি পাইপলাইনের ডিকোডিং অংশটি এড়িয়ে যাবে। এটি প্রক্রিয়াটি দ্রুততর করতে পারে।
স্যারডিয়ারিয়াস

1
কোনও ফাইলের পরিবর্তে প্রবাহে পিএনজি হিসাবে আউটপুট দেওয়ার কোনও উপায় আছে?
নিক মনারিন

1
@NickeManarin হ্যাঁ .. ffmpeg -ss 01:23:45 -i video.mp4 -c:v png -frames:v 1 image.jpg। লক্ষ্য করুন যে আমি অন্যদের পরামর্শ অনুসারে কমান্ড লাইনে ইনপুট ফাইলের আগে-ss "সিক" বিকল্পটিও রেখেছি ।
গ্লেন স্লেডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.