रिज़ॉल्यूशन में परिवर्तन का पता लगाने पर वीडियो फ़ाइलों को कैसे विभाजित किया जाए? (यानी। कई धाराओं वाले रिकॉर्ड किए गए स्ट्रीम)


2

मेरे पास कई वीडियो फाइलें (flv / mp4) हैं जो रिज़ॉल्यूशन मिड-स्ट्रीम (720p / 1080p / 640) को बदलते हैं।

मैं ffmpeg की तरह कुछ का उपयोग करने के लिए स्वचालित रूप से रिज़ॉल्यूशन में परिवर्तन का पता लगाने और उनके अलग-अलग दृश्यों में वीडियो को विभाजित करने, उनके मौजूदा एन्कोडिंग गुणवत्ता को बनाए रखने के लिए उपयोग करना चाहूंगा: पुन: एन्कोडिंग के बिना सेगमेंट (वीडियो 1-दृश्य 1। एफएलवी, वीडियो 1-सीन 2। एफएलवी, आदि) ।

मैंने मौन पर, दृश्य परिवर्तन पर, काले दृश्यों पर विभाजित करने के लिए विभिन्न तरीकों को पाया है, लेकिन संकल्प चौड़ाई में बदलाव के रूप में सरल कुछ भी नहीं है।

ये फ़ाइलें अक्सर वीडियो संपादकों / ट्रिमर को क्रैश करने का कारण बनती हैं, और मैन्युअल रूप से कम रिज़ॉल्यूशन दृश्यों को पहचानने और निकालने में बहुत समय लगता है अगर मैं पूरी वीडियो को 1080p में बदल दूं

एल्गोरिथ्म संभवतः वर्तमान फ्रेम की तुलना पिछले फ्रेम की तुलना में सरल है, और यदि वे अलग-अलग संकल्प हैं, तो वीडियो को विभाजित करें और एक नया सेगमेंट शुरू करें।

क्या कोई कृपया मदद कर सकता है?

उदाहरण फ़ाइल (temporarily available): Example.flv

नीचे कुछ संबंधित जवाब दिए गए हैं:

FFmpeg के साथ आरंभ स्थिति से अंत स्थिति तक वीडियो फ़ाइल से हिस्सा काटें

https://stackoverflow.com/questions/36074224/how-to-split-video-or-audio-by-silent-parts

स्वचालित रूप से बड़ी .Mov वीडियो फ़ाइलों को काले फ्रेम (दृश्य परिवर्तन) में छोटी फ़ाइलों में विभाजित करें?

दृश्य जांच के माध्यम से FFMPEG का उपयोग करके एक वीडियो को विभाजित करें

अतिरिक्त संसाधन:
लॉर्ड नेकबर्ड के समाधान का उपयोग करते हुए, मैं (दुर्भाग्य से बहुत मैनुअल) प्रक्रिया संलग्न कर रहा हूं जो मुझे अंततः विंडोज 10 पर काम करने के लिए मिला। शायद यह ffmpeg के आसपास अन्य विचारों को फैला सकता है।
(मैंने किसी के लिए एक अलग प्रश्न पोस्ट किया है जो गुरु के लिए पर्याप्त है: इस प्रक्रिया को स्वचालित करें ... )

एक बैच फ़ाइल पर वीडियो खींचें जिसमें शामिल हैं:

ffprobe -v error -show_entries फ्रेम = pkt_pts_time, चौड़ाई, ऊंचाई -select_streams v -of csv = p = 0% 1 & gt; allkeyframes.txt

(सभी keyframes.text नमूना ...)

13.652000,640,480
13.755000,640,480
13.597000,480,360
13.652000,480,360

इस पाठ को POWERSHELL में पेस्ट करें:

$o=""
$n=0
foreach($line in (Get-Content allkeyframes.txt)){
  $nline = $line.Split(",")
  $nline2=($nline[1]+$nline[2])
  if ($nline2 -ne $preventry) {
    $n0=$nline[0]
    $o="$o,$n0"
    $n=$n0
}
  $preventry = $nline2
}
if ($o.length -gt 1){
echo $o.Remove(0,1) > resolutionchanges.txt
} else {
Write-Host "No resolution changes found" -ForegroundColor Red
}

(Resolutionchanges.txt :)

13.597000,25.618000,33.628000,45.598000

रिज़ॉल्यूशनचेज की सामग्री को चिपकाने के बाद कमांड विंडो में निम्नलिखित दर्ज करें। टेक्स्ट और वीडियो नाम में "input.flv" को बदलने के बाद (Win10 ने इसे बैचने के मेरे प्रयासों से इनकार कर दिया):

ffmpeg -i input.flv -map 0 -c copy -segment_times 13.597000,25.618000,33.628000,45.598000 -reset_timestamps 1 -f सेगमेंट output_3 03.flv

जवाबों:


0

लेज़मैन समाधान का उपयोग करना है स्केल इनपुट को प्रत्येक इनपुट को वांछित चौड़ाई x ऊँचाई के अनुरूप बनाने के लिए

अपने प्रस्तावित समाधान के लिए आप उपयोग कर सकते हैं ffprobe यह निर्धारित करने के लिए कि आकार परिवर्तन कब होते हैं।

ffprobe -v error -show_entries frame=pkt_pts_time,width,height -select_streams v -of csv=p=0 input.flv

उदाहरण आउटपुट चौड़ाई और ऊंचाई परिवर्तन के दौरान (की_फ्रेम, pkt_pts_time, चौड़ाई, ऊंचाई):

0,89.081000,480,640
0,89.281000,480,640
0,89.481000,480,640
1,89.568000,640,480
0,89.592000,640,480
0,89.632000,640,480
1,97.749000,480,640

आकार में परिवर्तन की संभावना मुख्य फ्रेम पर होगी, जहां आप स्ट्रीम कॉपी करने की आवश्यकता होने पर कटौती कर सकते हैं। यदि आप केवल मुख्य फ्रेम जोड़ना चाहते हैं -skip_frame nokey विकल्प।

तब का उपयोग करें खंड मक्सर :

ffmpeg -i input.flv -map 0 -c copy -segment_times 89.568,97.749 -reset_timestamps 1 -f segment output_%03d.flv

1
धन्यवाद! यह अकेले मुझे प्रयास के सप्ताह बचाता है! मैं अभी भी कुछ अधिक कुशल होने की उम्मीद कर रहा हूं (आदर्श रूप से अकेले ffmpeg में), लेकिन पहले खंड वीडियो पर 5 सेकंड के काले को छोड़कर, यह अंततः काम करने के लिए प्रकट होता है। मुझे विंडोज 10 में कोई सफलता नहीं मिली और न ही बैच फ़ाइलों के साथ (असंगत रूप से अनदेखा किया गया चर), इसलिए वहाँ कोई सलाह भी सराहना की जाएगी। (मैं पॉवर्सशेल स्क्रिप्ट जोड़ूंगा जो मुझे किसी और की मदद करने के मामले में मैन्युअल रूप से उपयोग करनी थी)।
EverT

@ मुझे पता है कि मैं एक विंडोज उपयोगकर्ता के लिए बहुत ज्यादा नहीं हूं, इसलिए मेरे पास पॉवरशेल, आदि के बारे में कोई सुझाव नहीं है, लेकिन आप विंडोज विशिष्ट मुद्दे (पते) को संबोधित करने के लिए एक नया प्रश्न पोस्ट कर सकते हैं और इस विशिष्ट क्यू एंड amp छोड़ सकते हैं; पता ffmpeg अंश। यह सवालों को बहुत ज़्यादा और व्यापक होने से बचाएगा, और आपके पास उत्तर प्राप्त करने का एक बेहतर मौका होगा।
llogan

@ लॉर्डनेकरबर्ड- महान सलाह। मैं टूट गया pipe अलग से सवाल। मैंने दूसरों के लिए 'सॉर्ट-ऑफ-वर्किंग' समाधान को छोड़ दिया, बस अगर एक अधिक प्रत्यक्ष दृष्टिकोण नहीं मिला है। काश, मेरे पास उन linog Googlers के लिए अपने grep उत्तर को पूरा करने के लिए linux ज्ञान होता जो किसी दिन इसकी आवश्यकता हो सकती है।
EverT

@EverT जोड़ने का प्रयास करें -skip_frame nokey। मैं उस बारे में भूल गया जब मैंने जवाब लिखा था। ऑपटाइटिस होना चाहिए: उन्हें भूलना शुरू करना। फिर आप पाइपिंग को दूसरी प्रक्रिया में छोड़ सकते हैं।
llogan

@ लॉर्डनेकबर्ड- क्या इससे कोई फर्क पड़ता है? 5 रिज़ॉल्यूशन परिवर्तन के साथ 30 सेकंड की क्लिप में, -skip_frame nokey 848 लाइनों से ffprobe पाठ को 21 तक कम कर देता है, लेकिन यह अभी भी 5 के बजाय 21 खंडों को ट्रिगर करेगा। प्रसंस्करण काफी तेज है! (धन्यवाद!)
EverT
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.