Ffmpeg এ fadeIn / আউট প্রভাব সহ 5 টি চিত্র সহ ভিডিও তৈরি করুন


27

5 টি চিত্র সহ আমাকে ffmpeg এ 60 সেকেন্ডের একটি ভিডিও তৈরি করতে হবে, প্রতিটি চিত্র 15 সেকেন্ডের জন্য প্রদর্শন করতে হবে। ১৫ সেকেন্ডের পরে, প্রথম চিত্রটি বিবর্ণ হয়ে যেতে হবে এবং ২ য় চিত্রটি বিবর্ণ হতে হবে, এর পরে ২ য় চিত্রটি বিবর্ণ হতে হবে, তৃতীয় চিত্রটি বিবর্ণ হতে হবে .. ইত্যাদি c Ffmpeg কমান্ড ব্যবহার করে আমি কীভাবে এটি অর্জন করতে পারি দয়া করে আমাকে গাইড করুন।


4
আপনি কী চেষ্টা করেছেন এবং তারপরে আমরা আপনাকে সহায়তা করতে পারি? এই ফোরামটি কোনও ধরণের ফোরাম "দয়া করে কোনও কাজ না করেই আমাকে উত্তর দিন" isn't এই বলে যে, আমি আপনাকে ffmpeg বিবর্ণ ডকুমেন্টেশন - ffmpeg.org/ffmpeg-filters.html#fade
মাইক Diglio

উত্তর:


49

কালো হয়ে যাওয়া / ম্লান হওয়া

ক্রসফেইড পদ্ধতির জন্য নিচে স্ক্রোল করুন।

বিবর্ণ উদাহরণ

উদাহরণস্বরূপ যেখানে প্রতিটি চিত্র 5 সেকেন্ডের জন্য প্রদর্শিত হয় এবং প্রতিটি ফেইড থাকে যা 1 সেকেন্ড স্থায়ী হয়। প্রতিটি চিত্র ইনপুট একই প্রস্থ, উচ্চতা এবং নমুনা দিক অনুপাত আছে। যদি আকারে পরিবর্তিত হয় তবে নীচে # 3 উদাহরণ দেখুন।

এমপি 4 আউটপুট

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

অডিও সহ

উপরের মতো তবে অডিও সহ:

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-i audio.m4a \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -map 5:a -shortest out.mp4

বিভিন্ন বা স্বেচ্ছাসেবী আকারের ইনপুট চিত্রগুলির জন্য

প্রথম উদাহরণটির মতো, তবে ইনপুট চিত্রগুলির সাথে প্রস্থ x উচ্চতার পরিবর্তিত। এগুলি 1280x720 বাক্সের মধ্যে ফিট করার জন্য প্যাড করা হবে:

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v0]; \
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

প্যাড (লেটারবক্স / পিলারবক্স) এর পরিবর্তে ক্রপ করতে (স্ক্রীনটি পূরণ করতে) বা আপনি যদি উপরে উঠা প্রতিরোধ করতে চান তবে স্ট্যাটিক আকারের খেলোয়াড়ের সাথে ফিট করার জন্য ভিডিওগুলি পুনরায় আকার দেওয়ার উদাহরণগুলি দেখুন ।

GIF আউটপুট

ফিল্টারগুলি যুক্ত করুন যুক্তিসঙ্গত মানের সাথে, কীভাবে আমি ffmpeg ব্যবহার করে কোনও ভিডিওকে জিআইএফ রূপান্তর করতে পারি?

ffmpeg \
-framerate 10 -loop 1 -t 5 -i input0.png \
-framerate 10 -loop 1 -t 5 -i input1.png \
-framerate 10 -loop 1 -t 5 -i input2.png \
-framerate 10 -loop 1 -t 5 -i input3.png \
-framerate 10 -loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,split[v0][v1]; \
 [v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif

-loopজিআইএফ লুপের সংখ্যাটি নিয়ন্ত্রণ করতে আউটপুট বিকল্পটি ব্যবহার করুন । ডিফল্ট অসীম লুপ হয় যদি এই বিকল্পটি ব্যবহার না করা হয়। একটি মান -1কোন লুপ হয়।

বিকল্প এবং ফিল্টার ব্যবহৃত:

  • -t প্রতিটি ইনপুট এর সেকেন্ডে সময়কাল সেট করতে।

  • -loop 1 চিত্রটি লুপ করে নাহলে এর সময়কাল 1 ফ্রেমের হবে।

  • -framerateইনপুট চিত্রের ফ্রেম রেট সেট করতে (অঘোষিত 25 হলে ডিফল্ট)। জিআইএফ তৈরির জন্য দরকারী।

  • একটি নির্দিষ্ট, অভিন্ন আকারে ইনপুট চিত্রগুলিকে ফিট করার জন্য প্যাড দিয়ে স্কেল করুন (উদাহরণস্বরূপ # 3)।

  • ফেইড ইন ফিড ইন এবং আউট dবিবর্ণ সময়কাল। stএটি শুরু হয় যখন।

  • CONCAT কনক্যাটেনেট করতে (বা "যোগদানের") প্রতিটি ইমেজ।

  • MP4 আউটপুট এবং libx264 (যদি আপনার বিল্ড দ্বারা সমর্থিত হয় তবে এমপি 4 আউটপুট জন্য ডিফল্ট এনকোডার) এর সাথে এনকোডিং থাকলে একটি ক্রোমা সাবসাম্পলিং স্কিম আউটপুট করার ফর্ম্যাট

  • একটি ফিল্টার আউটপুট অনুলিপি করতে বিভক্ত । প্যালেট * ফিল্টার দ্বারা একটি কমান্ডে সমস্ত কিছু করা প্রয়োজন।

  • প্লেটিজেন এবং প্লেটিজটিস সুন্দর দেখাচ্ছে জিআইএফ তৈরির জন্য।


ক্রসফেড

ক্রসফেইড উদাহরণ

উদাহরণ যেখানে প্রতিটি চিত্র 5 সেকেন্ডের জন্য প্রদর্শিত হয় এবং প্রতিটি ক্রসফেইড থাকে যা 1 সেকেন্ড স্থায়ী হয়। প্রতিটি চিত্র ইনপুট একই প্রস্থ, উচ্চতা এবং নমুনা দিক অনুপাত আছে। যদি আকারে পরিবর্তিত হয় তবে উপরের # 3 উদাহরণটি মানিয়ে নিন।

এমপি 4 আউটপুট

ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
 [bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -movflags +faststart out.mp4

অডিও সহ

ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-i music.mp3 \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
 [bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -map 5:a -shortest -movflags +faststart out.mp4

অডিও সহ দুটি ভিডিওর মধ্যে ক্রসফেইড

প্রতিটি ইনপুট থেকে 5 দ্বিতীয় বিভাগ নির্বাচন করুন এবং একটি 1 দ্বিতীয় ক্রসফেইড যুক্ত করুন:

ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex \
"[0:v]trim=start=5:end=10,setpts=PTS-STARTPTS[v0];
 [1:v]trim=start=12:end=17,setpts=PTS-STARTPTS+4/TB,format=yuva444p,fade=st=4:d=1:t=in:alpha=1[v1];
 [v0][v1]overlay,format=yuv420p[v];
 [0:a]atrim=start=5:end=10,asetpts=PTS-STARTPTS[a0];
 [1:a]atrim=start=12:end=17,asetpts=PTS-STARTPTS[a1];
 [a0][a1]acrossfade=d=1[a]" \
-map "[v]" -map "[a]" output.mp4

GIF আউটপুট

ffmpeg \
-framerate 10 -loop 1 -t 5 -i 1.png \
-framerate 10 -loop 1 -t 5 -i 2.png \
-framerate 10 -loop 1 -t 5 -i 3.png \
-framerate 10 -loop 1 -t 5 -i 4.png \
-framerate 10 -loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3];[bg3][f3]overlay,split[v0][v1]; \
 [v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif

-loopজিআইএফ লুপের সংখ্যাটি নিয়ন্ত্রণ করতে আউটপুট বিকল্পটি ব্যবহার করুন । ডিফল্ট অসীম লুপ হয় যদি এই বিকল্পটি ব্যবহার না করা হয়। একটি মান -1কোন লুপ হয়।


1
@ লর্ডনেকবার্ড, এই উত্তরের জন্য ধন্যবাদ, আমি এটি অন্য একটি উদাহরণের জন্য ব্যবহার করেছি। আমি ভাল যে সংখ্যা নিম্নলিখিত বুঝতে পেরেছ -tমধ্যে -loop 1 -t 1 -i 001.pngসংজ্ঞায়িত পৃথক ফ্রেম সময়কাল, এবং নিম্নলিখিত যে সংখ্যার T/মধ্যে filter_complexব্লক রূপান্তরটি এর সময়কালের সংজ্ঞা? এবং এই উদাহরণে ফ্রেমের সময়কালকে ট্রানজিশনের সময়কাল সহ গণনা করা হয় কি না?

1
@ নিসার্গ এটি সম্পূর্ণ আউটপুট হিসাবে উপস্থিত হবে না এবং আপনি আগে প্রকাশিত দু'জনের মধ্যে এটি কী আদেশ বলে আমি নিশ্চিত নই। যাইহোক, যোগ করার চেষ্টা করুন -preset ultrafast
লগন

1
@ লর্ডনেকবার্ড একটি একক ভিডিও ফাইল তৈরি করার জন্য আমাকে চিত্রের একটি সেট, ভিডিও ক্লিপ এবং একটি অডিও ট্র্যাক একত্রিত করতে হবে (পছন্দমত ওগ, তবে এটি এই মুহুর্তে কম প্রাসঙ্গিক)। তদ্ব্যতীত, সংলগ্ন চিত্রগুলির মধ্যে আমার কিছু সংক্রমণ প্রভাব তৈরি করতে হবে। Ffmpeg এবং / অথবা অন্যান্য কমান্ড লাইন সরঞ্জাম ব্যবহার করে এই পুরো কাজটি স্ক্রিপ্ট করার কোনও উপায় আছে কি? লক্ষ্যটি হ'ল একটি কমান্ড লাইন ইন্টারফেসের মাধ্যমে কাজটি স্বয়ংক্রিয় করা mate
ওয়েব ব্যবহারকারী

1
@ ওয়েব ব্যবহারকারীর স্থানান্তরগুলি সম্ভবত ব্যবহার করা সহজ হতে চলেছে melt
اگست

2
Ffmpeg পদ্ধতিটি আমার পক্ষে সুন্দরভাবে কাজ করছে; ধন্যবাদ! পৃষ্ঠায় নতুনদের জন্য একটি পরামর্শ; মধ্যে concat=n=9কমান্ডের অংশ, 9উদাহরণে 5 ইমেজ + + ইমেজ মধ্যে 4 ট্রানজিশন থেকে আসে। আপনি যদি বিভিন্ন সংখ্যক চিত্র পরিচালনা করেন তবে আপনাকে সে অনুযায়ী সামঞ্জস্য করতে হবে।
জিম মিলার

4

আমি একটি সাধারণ বাশ স্ক্রিপ্ট লিখেছিলাম যা চিত্রগুলির ফোল্ডারে যাওয়ার পথে নিয়ে যায় এবং এফএফএমপিএগ সহ একটি ক্রসফেইড ভিডিও আউটপুট করে:

https://gist.github.com/anguyen8/d0630b6aef6c1cd79b9a1341e88a573e

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


দুঃখিত, তবে আপনার স্ক্রিপ্ট ffmpeg 3.0.1.1 এর সাথে ব্যর্থ হয়েছে, ইনপুটগুলি # 0 থেকে # 4 এ ফিরে আসে: "ফিল্টারগ্রাফের বর্ণনায় অবৈধ ফাইল সূচি 5"
ক্রিজিসটফ বোসিউরকো

টবিস্পাইট: ভাল কথা, আমি উত্তরটি আরও সুস্পষ্ট হওয়ার জন্য সম্পাদনা করেছি। মূলত মূল ধারণাটি উপরের @ লর্ডনেকবার্ড দ্বারা ইতিমধ্যে দেওয়া হয়েছে। এই স্ক্রিপ্টটি কেবলমাত্র অনেকগুলি চিত্রকে সাধারণীকরণ করে।
anh_ng8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.