FFmpeg এর সাথে একটি ভিডিও ক্রসফ্যাড করার দক্ষ উপায় কী?


10

ভিডিও সামগ্রী দুটি টুকরা মধ্যে একটি crossfade করছেন আসলে FFmpeg মধ্যে বেশ জটিল। অডিওর জন্য আছে এমন কোন "ক্রসফ্যাড" ফিল্টার নেই।

এটা করার একটি কার্যকর উপায় কি?


চমৎকার স্ব-উত্তর প্রশ্ন!
JakeGould

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

যত তাড়াতাড়ি আমি কিভাবে চিন্তা, আমি এটা যোগ করব। আমি মনে করি অডিও ক্রসফিড স্ন্যাপ, থো ', ​​বিশ্বাস করুন যে এটির জন্য একটি সহজ ফিল্টার আছে।
Mark Gerolimatos

আমি কেবল যোগ [0:a][1:a] acrossfade=d=1 [audio] ফিল্টার এবং তারপর -map "[audio]" কমান্ড এবং এটি কাজ করে। যদি আপনি চান, এটি একটি পরীক্ষা দিতে এবং উত্তর আপডেট!
Merc

উত্তর:


16

টিএল; ডিআর সংস্করণ:

এই উদাহরণটি শুধুমাত্র ভিডিও সম্পাদন করে, উভয় ভিডিও ক্লিপগুলি একই রেজল্যুশন, ফ্রেম রেট ইত্যাদি বলে মনে করে। এটি ফেইডআউট্লিপ এবং ফেডিনক্লিপের মধ্যে 1-সেকেন্ড ফেইড তৈরি করবে। অনুমান করুন যে fadeoutclip 10 সেকেন্ড দীর্ঘ। উল্লেখ্য যে এটি স্বচ্ছতার জন্য বিন্যস্ত করা হয়েছে: এটি সত্যিই কোডের একটি লাইন।

ffmpeg -i fadeoutclip.mp4 -i fadeinclip.mp4 -an \
-filter_complex "\
    [0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[firstclip]; \
    [1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip]; \
    [0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[fadeoutsrc]; \
    [1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc]; \
    [fadeinsrc]format=pix_fmts=yuva420p, \
                fade=t=in:st=0:d=1:alpha=1[fadein]; \
    [fadeoutsrc]format=pix_fmts=yuva420p, \
                fade=t=out:st=0:d=1:alpha=1[fadeout]; \
    [fadein]fifo[fadeinfifo]; \
    [fadeout]fifo[fadeoutfifo]; \
    [fadeoutfifo][fadeinfifo]overlay[crossfade]; \
    [firstclip][crossfade][secondclip]concat=n=3[output] \
    " \
-map "[output]" <add in encoding part here>

"কি খারাপ অবস্থা?" সংস্করণ:

এখানে এই সম্পর্কে কি একটি ব্যাখ্যা আছে:

ইনপুট স্পেসিফিকেশন ... স্পষ্ট

ffmpeg -i fadeoutclip.mp4 -i fadeinclip.mp4 -an

একটি তৈরি filter_complex: আপনি ইতিমধ্যে ফিল্টার কমপ্লেক্স বুঝতে অনুমান:

-filter_complex

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

উল্লেখ্য যে কঠোরভাবে কথা বলা, আমরা না আছে ক্রস ফেইড বিভাগগুলি ভাঙতে: আমরা কেবল দুটি ফেইড ক্লিপের জন্য ফেইড আউট এবং ফেইড নির্দিষ্ট করতে পারি। যাইহোক, এই কাজ করে, আমরা:

  • সাধারণত জিআইআই ভিডিও সম্পাদকদের দ্বারা ব্যবহৃত পদ্ধতি অনুসরণ করুন
  • এর হতাশাজনক জটিলতা এড়াতে overlay ফিল্টার এর ব্যবহার
  • সমাধানটি যতটা সম্ভব সাধারণ (i.e. পুনঃব্যবহারযোগ্য কোড) নিশ্চিত করুন
  • আমাদের ক্রসফ্যাড বিভাগকে পূর্ব-প্রক্রিয়া এবং পোস্ট-প্রক্রিয়া করার অনুমতি দেয় (এখানে সম্পন্ন না)

এই চারটি বিভাগের প্রতিটি নির্দিষ্ট করে: সময় শুরু (সেকেন্ড), শেষ সময় (সেকেন্ড), এবং রহস্যময় setpts=PTS-STARTPTS ছাঁকনি যা মূলত প্রতিটি ভিডিও উপclip 0 সেকেন্ডে শুরু করে তোলে। তাদের recomposing যখন এই অত্যাবশ্যক হবে।

উল্লেখ্য যে s=0 স্পেসিফিকেশন অকার্যকর হয়, এবং setpts জন্য ফিল্টার s=0 বেশী অকার্যকর হয়। যাইহোক, উভয় ফিল্টার জটিল বিরতি ছাড়া 0 থেকে শুরু সময় পরিবর্তন করার অনুমতি অকার্যকর উল্লেখ করা হয়। এছাড়াও, দ্বিতীয় কন্টেন্ট ক্লিপ শেষ পর্যন্ত, তাই e= অংশ (শেষ =) নির্দিষ্ট করা হয় না।

    [0:v]trim=s=0:e=9,setpts=PTS-STARTPTS[firstclip];
    [1:v]trim=s=1,setpts=PTS-STARTPTS[secondclip];
    [0:v]trim=s=9:e=10,setpts=PTS-STARTPTS[fadeoutsrc];
    [1:v]trim=s=0:e=1,setpts=PTS-STARTPTS[fadeinsrc];

পরবর্তী, আমরা বিবর্ণ এবং বিবর্ণ আউট উল্লেখ: আমরা প্রথমে দুটি ফেইড বিভাগে আলফা (স্বচ্ছতা) চ্যানেল যুক্ত করি একটি পিক্সেল বিন্যাস উল্লেখ yuva420p। আপনি আসলে একটি আলফা চ্যানেল প্রদান করে যে কোন বিন্যাস ব্যবহার করতে পারেন।

পরবর্তীতে এই ফিল্টার সাবক্রপ্লেক্সে আমরা ফেইড আউট করতে, এবং এক বিবর্ণ করতে নির্দিষ্ট করেছি। দ্য alpha=1 মানে ভিডিওটি অন্ধকার হবে না, শুধুমাত্র স্বচ্ছতা পরিমাণ "বিবর্ণ" হবে। st মানে শুরু, d মানে সময়কাল।

    [fadeinsrc]format=pix_fmts=yuva420p,      
                fade=t=in:st=0:d=1:alpha=1[fadein];
    [fadeoutsrc]format=pix_fmts=yuva420p,
                fade=t=out:st=0:d=1:alpha=1[fadeout];

এটা কি?: দ্য fifo ছাঁকনি ফিল্টার কমপ্লেক্সে বাফার স্পেস উপলব্ধ রয়েছে তা নিশ্চিত করে। আশ্চর্যজনক, এই ডিফল্ট নয়। যদি আপনি এটি না করেন, উপরের স্তরটির আউটপুট নীচের ওভারলে ফিল্টারকে অতিক্রম করে যদি ক্রসফ্যাড ব্যর্থ হয়। হ্যাঁ, আমি এখন আপনি কি চিন্তা করছেন জানি। এটি আসলে একটি FFMPEG বাগ

    [fadein]fifo[fadeinfifo];
    [fadeout]fifo[fadeoutfifo];

এখন, দুটি বিবর্ণ বিভাগগুলি ওভারলে করুন: দুই ক্রসফ্যাড সেকশন একই আকার নিশ্চিত করে, আমরা চিন্তা করতে হবে না বরং কদর্য বিকল্প ওভারলে ফিল্টার লাগে (এবং তাই আমরা এখানে তাদের উপেক্ষা):

    [fadeoutfifo][fadeinfifo]overlay[crossfade];

অবশেষে, আমরা আমাদের তিনটি অংশ লাইন আপ কনট্যাট ফিল্টার ব্যবহার করে

    [firstclip][crossfade][secondclip]concat=n=3[output]

এবং এখন, আপনার ভিডিও উৎস হিসাবে আউটপুট প্যাড মানচিত্র।

ভুলে যেও না আপনি সাধারণত ব্যবহার করেন কি পিক্সেল বিন্যাস সেট করতে (সাধারণত yuv420p ), ক্রসফ্যাড বিভাগ এটি সেট করা হবে yuv420 আউটপুট চ্যানেলে! (আমরা এটি উল্লেখ না করে, আপনি ওভারলে আর্গুমেন্ট ব্যবহার করতে পারেন) অবশ্যই তুমি যদি চাও yuv420, তারপর আপনি ভাল আছেন :-)

-map "[output]" <add your normal encoding part here>

তারপরে আপনি পরে অডিও পুনর্বিবেচনা করতে পারেন (এই প্রশ্ন & amp; A এর সুযোগের বাইরে)


1
সর্বশেষ ffmpeg, এটা হতে হবে trim=start=0:end=9, (বরং trim=st=0:e=9,..
Merc

কিন্তু গুরুত্ব সহকারে, আমি কখনও দেখেছি যে এফএফপিইজিএইচ এর সেরা উত্তর হতে হবে, এবং সর্বদা ffmpeg ব্যাখ্যা।
Merc

ম্যান, যে আমার মাথা যেতে যাচ্ছে :-) props জন্য ধন্যবাদ !!!!
Mark Gerolimatos

কোন চিন্তা করো না. উত্তরটি বিশেষভাবে = trim = start = 0 দিয়ে উত্তরটি আপডেট করুন এখন এটি সর্বশেষ ffmpeg এর সাথে কাজ করে না
Merc

সর্বশেষ ffmpeg সংস্করণ আমাকে এই ত্রুটি দেয়: Filter setpts has an unconnected output স্ক্রিপ্ট জন্য। আমি ইতিমধ্যে শুরু এবং শেষ trim পরামিতি পরিবর্তন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.