मेरे पास कई वीडियो फाइलें (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
दृश्य जांच के माध्यम से 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