Ffmpeg সহ একটি ভিডিওতে আমার লোগোটি 60 সেকেন্ডের জন্য কীভাবে যুক্ত করবেন?


0

আমি এই সমাধানটি খুঁজতে বেশ কয়েকদিন অনুসন্ধান করেছি। আমি খুঁজে পাওয়া সমস্তগুলিই ছিল প্রথম সেকেন্ডে লোগো যুক্ত করার উপায়গুলি বা কয়েক সেকেন্ডের পরে বা কেবলমাত্র কিছু অংশের মধ্যে (উদাহরণস্বরূপ 30 থেকে 210 সেকেন্ডের মধ্যে)

সুতরাং মূল প্রশ্নটি হল: ffmpeg সহ একটি ভিডিওতে আমার লোগোটি 60 সেকেন্ডের জন্য কীভাবে যুক্ত করবেন? আমার কাছে সমস্ত বিভিন্ন দৈর্ঘ্যের প্রচুর ভিডিও রয়েছে এবং কেবলমাত্র .png লোগোটি দিয়ে শেষ seconds০ সেকেন্ডের ওভারলেটি করতে চান (এই ক্ষেত্রে স্ক্রিনের বাম নীচেও)

বর্তমানে আপনি নীচে যা দেখছেন তা ভালভাবে কাজ করে যাচ্ছি (ভিডিওগুলির 30-210 সেকেন্ডের মধ্যে সবসময় লোগো প্রদর্শন করে) তবে আমি শিরোনামে উল্লিখিত করেছি, এটি ঠিক যা করতে চায় তা করে না।

-i video.mp4 -vf "movie=/logo.png [watermark]; [in][watermark] overlay=1:main_h-overlay_h-1:enable=not(between'(t,30,210)') [out]"

উত্তর:


2

এটি করার জন্য একটি সম্ভবত সম্ভাব্য অদক্ষ, পদ্ধতি আছে যা এখানে পরীক্ষায় কাজ করেছে তবে ব্যর্থ হতে পারে যখন ইনপুট টাইমস্ট্যাম্পগুলি অনিয়মিত অর্থাৎ শূন্য থেকে শুরু হয়।

বেসিক টেম্পলেট হয়

ffmpeg -i in.mp4 -sseof -60 -copyts -i in.mp4 -loop 1 -i logo.png -filter_complex "[1][2]overlay=shortest=1[logo];[0][logo]overlay" out.mp4

ভিডিওটি দুইবার ইনপুট করা হয়েছে। ২ য় ইনপুট-এ, sseofবিকল্পটি সেট করা হয়েছে যা শেষ থেকে পরিমাপ করা সময়ের ব্যবধানটি ব্যবহার করার অনুমতি দেয়। অবশ্যই, অন্যথায় নির্দিষ্ট না করা পর্যন্ত, FFmpeg ইনপুট টাইমস্ট্যাম্পগুলি পুনরায় সেট করবে, তাই copytsইনপুট টিএস সংরক্ষণ করার জন্য সেট করা আছে।

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


এটি একটি সুন্দর সুন্দর কৌশল!
ওওবোরাস

এটি একটি কবজির মতো কাজ করেছে, আপনাকে ধন্যবাদ :) আমি এখনও যে সমস্যার মুখোমুখি হয়েছি সেগুলি আমি যে সেমি নিয়ে কাজ করছি তার সাথে একটি ব্যাচে এই কাজটি করা হচ্ছে তবে আপনার উত্তরটির সাথে এর কোনও যোগসূত্র নেই, যা কেবল কাজ করছে!
রাজ্জ

1

overlayএবং enableভিডিওটির শেষ বা সময়কাল উল্লেখ করার ক্ষমতা নেই do সময়কাল আহরণের জন্য আপনাকে একটি অতিরিক্ত কমান্ড (সম্ভবত ffprobeএবং grepযেমন এই উত্তরে বর্ণিত ) ব্যবহার করতে হবে তারপরে ffmpegসঠিক betweenমান সহ কমান্ডটি তৈরি করতে এটি ব্যবহার করতে হবে ।


শুধু ভাবছি এই সব কি এক আদেশে সম্ভব? বলুন যে আমার কাছে 2000 টি ব্যাচ রয়েছে এবং এটি একটি একক কমান্ড দিয়ে চালাতে চাই?
রাজ্জ

প্রয়োজন নেই grep: আপনি ffprobeএকা ব্যবহার করতে পারেন । আপনার সরবরাহিত লিঙ্কে অন্য একটি উত্তর দেখুন ।
25:58

@ আরজ আপনাকে এটি দুটি আদেশে করতে হবে। যেমন আয়োবোরাস উল্লেখ করেছেন ffprobeদৈর্ঘ্য নির্ধারণের জন্য একটি কমান্ড করেন এবং তারপরে ffmpegআপনি যে সময়কালটি পেলেন তা ব্যবহার করে কমান্ডটি ব্যবহার করে ffprobe
25:58
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.