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


11

मेरे पास टेप .01.mov, टेप_02.mov, ..., टेप_65.mov नाम की 65 .Mov वीडियो फाइलें हैं। प्रत्येक लगभग 2.5 घंटे लंबा है और कई गीगाबाइट लेता है। वे वीएचएस टेप (मेरे परिवार की "होम मूवीज") की डिजिटल प्रतियां हैं।

प्रत्येक 2.5-घंटे .Mov वीडियो फ़ाइल में कई "अध्याय" होते हैं (इस अर्थ में कि कभी-कभी दृश्य एक काली स्क्रीन के फीका में समाप्त होता है, और फिर एक नया दृश्य फीका हो जाता है)।

मेरा मुख्य लक्ष्य 65 बड़ी फ़ाइलों को अध्याय द्वारा छोटी फ़ाइलों में कटा हुआ है। और मैं चाहता हूं कि "दृश्यों" के बीच काले फ्रेम का पता लगाने के माध्यम से स्वचालित रूप से किया जाए।

क्या मैं 65 मूल फ़ाइलनामों में पास होने के लिए ffmpeg (या कुछ भी) का उपयोग कर सकता हूं और यह प्रत्येक वीडियो पर स्वचालित रूप से पुनरावृति करता है और इसे नीचे काटता है, जिसके परिणामस्वरूप टुकड़े टेप_01-ch_01.mov, टेप_01-ch_02.mov, टेप_01-ch_03.mov, का नाम रखता है। आदि? और मैं इसे फिर से एन्कोडिंग के बिना करना चाहता हूं (मैं चाहता हूं कि यह एक सरल दोषरहित टुकड़ा हो)।

मैं यह कैसे कर सकता हूँ?

यहां वे चरण हैं जो मैं चाहता हूं:

  1. .Mov फ़ाइलों (टेप का नाम_01.mov, टेप_02.mov, ..., टेप_65.mov) के एक फोल्डर पर उन्हें mp4 फाइलों के रूप में निर्यात करने के लिए टेप (नाम टेप_01.mp4, टेप_02.mp4, ..., टेप_65.mp4) । मैं चाहता हूं कि इस चरण के लिए संपीड़न सेटिंग्स को कॉन्फ़िगर करना आसान हो। मूल .Mov फाइलें .mp4 फाइलें बनने के बाद भी मौजूद होनी चाहिए।
  2. Mp4 फ़ाइलों पर Iterate: प्रत्येक mp4 फ़ाइल के लिए, "दृश्यों" के बीच काले खंडों के प्रारंभ समय और अवधि को निर्दिष्ट करने वाली एक पाठ फ़ाइल उत्पन्न करें। प्रत्येक mp4 के पास इन ब्लैक सीन के 0 या उससे अधिक टूटने हो सकते हैं। प्रारंभ समय और अवधि एक सेकंड के एक अंश के लिए सटीक होनी चाहिए। एचएच: एमएम: एसएस प्रारूप पर्याप्त सटीक नहीं है।
  3. फिर मैं इन पाठ फ़ाइलों को मैन्युअल रूप से डबल-चेक कर पाऊंगा कि वे सही ढंग से दृश्य परिवर्तन (ब्लैक सेगमेंट) की पहचान करते हैं या नहीं। मैं चाहूं तो टाइमिंग को एडजस्ट कर सकता हूं।
  4. एक अन्य स्क्रिप्ट प्रत्येक mp4 फ़ाइल और उसकी txt फ़ाइल और स्प्लिट (सुपर फास्ट और दोषरहित तरीके से) पढ़ेगी, mp4 को टेक्स्ट फ़ाइल की पंक्तियों के आधार पर आवश्यक टुकड़ों के रूप में कई टुकड़ों में विभाजित किया जाएगा। विभाजन प्रत्येक ब्लैक सेगमेंट के बीच में होना चाहिए। यहां एक नमूना mp4 फ़ाइल (गोपनीयता उद्देश्यों के लिए हटाए गए ऑडियो के साथ) जिसमें फीका-से-काला दृश्य परिवर्तन है। मूल mp4 फ़ाइलों को अछूता रहना चाहिए क्योंकि छोटे mp4 फाइलें बनाई जाती हैं। छोटी mp4 फाइलों में टेप_01_001.mp4, टेप_01_002.mp4, टेप_01_003.mp4, आदि की नामकरण योजना होनी चाहिए।
  5. बक्शीश! यह बहुत अच्छा होगा यदि कोई अन्य स्क्रिप्ट तब छोटी mp4 फ़ाइलों पर पुनरावृति कर सकती है और प्रत्येक के लिए एक .png छवि उत्पन्न कर सकती है जो स्क्रीनशॉट की मोज़ेक है जैसे कि यह व्यक्ति इसके लिए प्रयास कर रहा है: FFmpeg का उपयोग करके वीडियो के लिए सार्थक थंबनेल

मैं इन लिपियों को शेल स्क्रिप्ट के रूप में देखना चाहता हूं, जिन्हें मैं मैक, उबंटू और विंडोज गिट बैश में चला सकता हूं।

जवाबों:


11

काले दृश्यों द्वारा लंबे वीडियो को छोटे अध्यायों में विभाजित करने के लिए दो पॉवरशेल स्क्रिप्ट हैं।

उन्हें Detect_black.ps1 और Cut_black.ps1 के रूप में सहेजें। विंडोज के लिए ffmpeg डाउनलोड करें और विकल्प अनुभाग के तहत स्क्रिप्ट को अपने ffmpeg.exe और अपने वीडियो फ़ोल्डर का पथ बताएं।

यहाँ छवि विवरण दर्ज करें

दोनों स्क्रिप्ट मौजूदा वीडियो फ़ाइलों को स्पर्श नहीं करेंगे, वे अछूते नहीं रहेंगे।
हालाँकि, आपको कुछ नई फाइलें उसी स्थान पर मिलेंगी जहाँ आपके इनपुट वीडियो हैं

  • उपयोग किए गए ffmpeg कमांड के लिए कंसोल आउटपुट के साथ प्रति वीडियो लॉगफ़ाइल
  • मैन्युअल ठीक ट्यूनिंग के लिए काले दृश्यों के सभी टाइमस्टैम्प के साथ एक सीएसवी फ़ाइल प्रति वीडियो
  • नए वीडियो के एक जोड़े पर निर्भर करता है कि पहले कितने काले दृश्य हैं

यहाँ छवि विवरण दर्ज करें


चलाने के लिए पहली स्क्रिप्ट: Detect_black.ps1

 ### Options __________________________________________________________________________________________________________
$ffmpeg = ".\ffmpeg.exe"            # Set path to your ffmpeg.exe; Build Version: git-45581ed (2014-02-16)
$folder = ".\Videos\*"              # Set path to your video folder; '\*' must be appended
$filter = @("*.mov","*.mp4")        # Set which file extensions should be processed
$dur = 4                            # Set the minimum detected black duration (in seconds)
$pic = 0.98                         # Set the threshold for considering a picture as "black" (in percent)
$pix = 0.15                         # Set the threshold for considering a pixel "black" (in luminance)

### Main Program ______________________________________________________________________________________________________

foreach ($video in dir $folder -include $filter -exclude "*_???.*" -r){

  ### Set path to logfile
  $logfile = "$($video.FullName)_ffmpeg.log"

  ### analyse each video with ffmpeg and search for black scenes
  & $ffmpeg -i $video -vf blackdetect=d=`"$dur`":pic_th=`"$pic`":pix_th=`"$pix`" -an -f null - 2> $logfile

  ### Use regex to extract timings from logfile
  $report = @()
  Select-String 'black_start:.*black_end:' $logfile | % { 
    $black          = "" | Select  start, end, cut

    # extract start time of black scene
    $start_s     = $_.line -match '(?<=black_start:)\S*(?= black_end:)'    | % {$matches[0]}
    $start_ts    = [timespan]::fromseconds($start_s)
    $black.start = "{0:HH:mm:ss.fff}" -f ([datetime]$start_ts.Ticks)

    # extract duration of black scene
    $end_s       = $_.line -match '(?<=black_end:)\S*(?= black_duration:)' | % {$matches[0]}
    $end_ts      = [timespan]::fromseconds($end_s)
    $black.end   = "{0:HH:mm:ss.fff}" -f ([datetime]$end_ts.Ticks)    

    # calculate cut point: black start time + black duration / 2
    $cut_s       = ([double]$start_s + [double]$end_s) / 2
    $cut_ts      = [timespan]::fromseconds($cut_s)
    $black.cut   = "{0:HH:mm:ss.fff}" -f ([datetime]$cut_ts.Ticks)

    $report += $black
  }

  ### Write start time, duration and the cut point for each black scene to a seperate CSV
  $report | Export-Csv -path "$($video.FullName)_cutpoints.csv" –NoTypeInformation
}

यह कैसे काम करता है

पहली स्क्रिप्ट सभी वीडियो फ़ाइलों के माध्यम से पुनरावृत्ति करती है जो एक निर्दिष्ट विस्तार से मेल खाती है और पैटर्न *_???.*से मेल नहीं खाती है , क्योंकि नए वीडियो अध्याय का नाम दिया गया था <filename>_###.<ext>और हम उन्हें बाहर करना चाहते हैं।

यह सभी काले दृश्यों को खोजता है और नाम के एक नए CSV फ़ाइल में प्रारंभ टाइमस्टैम्प और ब्लैक सीन अवधि लिखता है <video_name>_cutpoints.txt

यह भी कटौती अंक दिखाया गया है गणना करता है: cutpoint = black_start + black_duration / 2। बाद में, वीडियो इन टाइमस्टैम्प पर खंडित हो जाता है।

आपके नमूना वीडियो के लिए cutpoint.txt फ़ाइल दिखाई देगी:

start          end            cut
00:03:56.908   00:04:02.247   00:03:59.578
00:08:02.525   00:08:10.233   00:08:06.379

एक रन के बाद, आप चाहें तो कट पॉइंट्स को मैन्युअल रूप से जोड़ सकते हैं। यदि आप स्क्रिप्ट को फिर से चलाते हैं, तो सभी पुरानी सामग्री अधिलेखित हो जाती है। मैन्युअल रूप से संपादन करते समय सावधान रहें और अपना काम कहीं और बचाएं।

नमूना वीडियो के लिए काले दृश्यों का पता लगाने के लिए ffmpeg कमांड है

$ffmpeg -i "Tape_10_3b.mp4" -vf blackdetect=d=4:pic_th=0.98:pix_th=0.15 -an -f null

3 महत्वपूर्ण संख्याएं हैं जो स्क्रिप्ट के विकल्प अनुभाग में संपादन योग्य हैं

  • d=4 मतलब केवल 4 सेकंड से अधिक लंबे काले दृश्यों का पता लगाया जाता है
  • pic_th=0.98 "काले" के रूप में एक तस्वीर पर विचार करने के लिए सीमा है (प्रतिशत में)
  • pix=0.15पिक्सेल को "ब्लैक" (ल्यूमिनेन्स में) के रूप में मानने के लिए सीमा निर्धारित करता है। चूंकि आपके पास पुराने वीएचएस वीडियो हैं, इसलिए आपके वीडियो में पूरी तरह से काले दृश्य नहीं हैं। डिफ़ॉल्ट मान 10 काम नहीं करेगा और मुझे सीमा को थोड़ा बढ़ाना पड़ा

यदि कुछ भी गलत होता है, तो उस लॉगफ़ाइल नामक जाँच करें <video_name>__ffmpeg.log। यदि निम्नलिखित पंक्तियाँ गायब हैं, तो उपरोक्त संख्याएँ तब तक बढ़ाएँ जब तक आप सभी काले दृश्यों का पता नहीं लगा लेते:

[blackdetect @ 0286ec80]
 black_start:236.908 black_end:242.247 black_duration:5.33877



चलाने के लिए दूसरी स्क्रिप्ट: cut_black.ps1

### Options __________________________________________________________________________________________________________
$ffmpeg = ".\ffmpeg.exe"            # Set path to your ffmpeg.exe; Build Version: git-45581ed (2014-02-16)
$folder = ".\Videos\*"              # Set path to your video folder; '\*' must be appended
$filter = @("*.mov","*.mp4")        # Set which file extensions should be processed

### Main Program ______________________________________________________________________________________________________

foreach ($video in dir $folder -include $filter -exclude "*_???.*" -r){

  ### Set path to logfile
  $logfile = "$($video.FullName)_ffmpeg.log"

  ### Read in all cutpoints from *_cutpoints.csv; concat to string e.g "00:03:23.014,00:06:32.289,..."  
  $cuts = ( Import-Csv "$($video.FullName)_cutpoints.csv" | % {$_.cut} ) -join ","

  ### put together the correct new name, "%03d" is a generic number placeholder for ffmpeg
  $output = $video.directory.Fullname + "\" + $video.basename + "_%03d" + $video.extension

  ### use ffmpeg to split current video in parts according to their cut points
  & $ffmpeg -i $video -f segment -segment_times $cuts -c copy -map 0 $output 2> $logfile        
}

यह कैसे काम करता है

दूसरी स्क्रिप्ट उसी तरह से सभी वीडियो फ़ाइलों पर निर्भर करती है जिस तरह से पहली स्क्रिप्ट ने की है। यह वीडियो की संगत से केवल कट टाइमस्टैम्प में पढ़ता है cutpoints.txt

अगला, यह अध्याय फ़ाइलों के लिए एक उपयुक्त फ़ाइल नाम रखता है और वीडियो को खंडित करने के लिए ffmpeg को बताता है। वर्तमान में वीडियो फिर से एन्कोडिंग (सुपरफास्ट और दोषरहित) के बिना कटा हुआ है। इसके कारण, कट प्वाइंट टाइमस्टैम्प के साथ 1-2s की अशुद्धि हो सकती है क्योंकि ffmpeg केवल key_frames पर कट कर सकता है। चूंकि हम सिर्फ कॉपी करते हैं और फिर से एनकोड नहीं करते हैं, इसलिए हम अपने दम पर key_frames नहीं डाल सकते हैं।

नमूना वीडियो के लिए आदेश होगा

$ffmpeg -i "Tape_10_3b.mp4" -f segment -segment_times "00:03:59.578,00:08:06.379" -c copy -map 0 "Tape_10_3b_(%03d).mp4"

कुछ भी गलत होने पर संबंधित ffmpeg.log पर एक नज़र डालें



संदर्भ



करने के लिए

  • ओपी से पूछें कि क्या सीएसवी प्रारूप कट फ़ाइल के रूप में पाठ फ़ाइल से बेहतर है, इसलिए आप उन्हें एक्सेल के साथ थोड़ा आसान संपादित कर सकते हैं
    »लागू किया गया
  • टाइमस्टैम्प को [hh] के रूप में प्रारूपित करने का तरीका लागू करें: [mm]: [ss], [मिलीसेकंड] केवल सेकंड के बजाय
    »कार्यान्वित
  • प्रत्येक अध्याय के लिए मोज़ेक png फ़ाइलों को बनाने के लिए एक ffmpeg कमांड को
    लागू करें »कार्यान्वित किया गया
  • यदि -c copyओपी के परिदृश्य के लिए पर्याप्त है या हमें पूरी तरह से फिर से एनकोड करने की आवश्यकता है, तो विस्तृत करें ।
    लगता है कि रयान पहले से ही इस पर है

क्या अच्छी तरह से जवाब! मैं इसकी सराहना करता हूं! दुर्भाग्य से, मैं अभी मैक पर हूं और पहले यह पता लगाने की आवश्यकता होगी कि इसे बैश में कैसे अनुवाद किया जाए।
रयान

मैं PowerShell में काम करने के लिए इसे प्राप्त करने में सक्षम नहीं हूं। लॉग फाइलें खाली रहती हैं।
रेयान

मैं देखूंगा कि मैं सहायक होने के लिए क्या अपलोड कर सकता हूं। बने रहें। आपकी रुचि के लिए धन्यवाद!
रेयान

मैंने प्रश्न में एक नमूना mp4 जोड़ा। आपकी सहायताके लिए धन्यवाद!
रेयान

गोपनीयता उद्देश्यों के लिए, मैं सच्चे स्रोत MOV को अपलोड नहीं करूंगा। मैं इसे काट कर ऑडियो (जैसे मैंने mp4 के लिए किया था) निकालना चाहता हूँ। तो यह वैसे भी एक वास्तविक मूल स्रोत नहीं होगा। फिर भी, यह अपलोड करने के लिए बहुत बड़ा तरीका होगा। और दृश्य-बंटवारे का कदम शायद वैसे भी डिस्क स्थान के प्रयोजनों के लिए MOV फ़ाइलों के बजाय mp4 फ़ाइलों पर होना चाहिए। धन्यवाद!
रयान

3

यहां बोनस है: यह 3 पॉवरशेल स्क्रिप्ट एक मोज़ेक थंबनेल छवि उत्पन्न करता है

आपको प्रति अध्याय वीडियो में एक छवि प्राप्त होगी जो सभी नीचे दिए गए उदाहरण की तरह दिखते हैं।

### Options __________________________________________________________________________________________________________
$ffmpeg = ".\ffmpeg.exe"       # Set path to your ffmpeg.exe; Build Version: git-45581ed (2014-02-16)
$folder = ".\Videos\*"         # Set path to your video folder; '\*' must be appended
$x = 5                         # Set how many images per x-axis
$y = 4                         # Set how many images per y-axis
$w = 384                       # Set thumbnail width in px (full image width: 384px x 5 = 1920px,)

### Main Program ______________________________________________________________________________________________________

foreach ($video in dir $folder -include "*_???.mp4" -r){

  ### get video length in frames, an ingenious method
  $log = & $ffmpeg -i $video -vcodec copy -an -f null $video 2>&1   
  $frames = $log | Select-String '(?<=frame=.*)\S+(?=.*fps=)' | % { $_.Matches } | % { $_.Value }  
  $frame = [Math]::floor($frames / ($x * $y))

  ### put together the correct new picture name
  $output = $video.directory.Fullname + "\" + $video.basename + ".jpg"

  ### use ffmpeg to create one mosaic png per video file
  ### Basic explanation for -vf options:  http://trac.ffmpeg.org/wiki/FilteringGuide
#1  & $ffmpeg -y -i $video -vf "select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#2  & $ffmpeg -y -i $video -vf "yadif,select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output 
    & $ffmpeg -y -i $video -vf "mpdecimate,yadif,select=not(mod(n\,`"$frame`")),scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output       

#4  & $ffmpeg -y -i $video -vf "select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output  
#5  & $ffmpeg -y -i $video -vf "yadif,select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output  
#6  & $ffmpeg -y -i $video -vf "mpdecimate,yadif,select='gt(scene\,0.06)',scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 -vsync vfr $output  

#7  & $ffmpeg -y -i $video -vf "thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#8  & $ffmpeg -y -i $video -vf "yadif,thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
#9  & $ffmpeg -y -i $video -vf "mpdecimate,yadif,thumbnail,scale=`"$w`":-1,tile=`"$x`"x`"$y`"" -frames:v 1 $output
}

मुख्य विचार पूर्ण वीडियो पर छवियों की एक सतत स्ट्रीम प्राप्त करना है। हम ffmpeg के चुनिंदा विकल्प के साथ ऐसा करते हैं ।

सबसे पहले, हम कुल फ्रेम काउंट को एक सरल विधि (जैसे 2000) से पुनः प्राप्त करते हैं और इसे हमारे डिफ़ॉल्ट थंबनेल काउंट (जैसे 5 x 4 = 20) के माध्यम से विभाजित करते हैं। इसलिए हम हर 100 फ्रेम में एक इमेज बनाना चाहते हैं2000 / 20 = 100

जिसके परिणामस्वरूप थंबनेल उत्पन्न करने के लिए ffmpeg कमांड दिख सकती है

ffmpeg -y -i input.mp4 -vf "mpdecimate,yadif,select=not(mod(n\,100)),scale=384:-1,tile=5x4" -frames:v 1 output.png

उपरोक्त कोड में, जैसा कि आप देख 9 विभिन्न -vfसंयोजनों से मिलकर

  • select=not(mod(n\,XXX)) जहां XXX एक संगणित फ्रैमरेट है
  • thumbnail जो स्वचालित रूप से सबसे अधिक प्रतिनिधि फ्रेम का चयन करता है
  • select='gt(scene\,XXX)+ -vsync vfrजहाँ XXX एक दहलीज है जहाँ आपको खेलना है
  • mpdecimate- निकट-डुप्लीकेट फ़्रेम निकालें। काले दृश्यों के खिलाफ अच्छा है
  • yadif- इनपुट इमेज को डिनोटल करें। पता नहीं क्यों, लेकिन यह काम करता है

मेरी राय में संस्करण 3 सबसे अच्छा विकल्प है। अन्य सभी को टिप्पणी दी गई है, लेकिन आप अभी भी उन्हें आज़मा सकते हैं। मैं ज्यादातर धुंधली थंबनेल का उपयोग करने में सक्षम था mpdecimate, yadifऔर select=not(mod(n\,XXX))। हाँ!

आपके नमूना वीडियो के लिए मुझे ये पूर्वावलोकन मिले

यहाँ छवि विवरण दर्ज करें
बड़ा करने के लिए क्लिक करें

यहाँ छवि विवरण दर्ज करें
बड़ा करने के लिए क्लिक करें

मैंने उन संस्करणों द्वारा बनाए गए सभी थंबनेल अपलोड किए । पूर्ण तुलना के लिए उन पर एक नज़र डालें।


बहुत ही शांत! मैं इस पर एक नज़र डालूँगा। मैंने आज घंटों बर्बाद किया select='gt(scene\,0.4)'और काम करने की कोशिश कर रहा हूं । और मुझे fps="fps=1/600"काम भी नहीं मिला । वैसे, क्या आपके पास superuser.com/questions/725734 के बारे में कोई विचार है ? आपकी सभी मदद के लिए आपका बहुत बहुत धन्यवाद। मैं अपने परिवार को पुरानी यादों के टन की खोज में मदद करने के बारे में सुपर उत्साहित हूं।
रयान

क्या आपने उन 5 अन्य एनकोड वेरिएंट को आज़माया है जिन्हें मैंने नीचे सूचीबद्ध किया है ? मैंने "दृश्य" विकल्प के लिए एक कामकाजी उदाहरण जोड़ा। एफपीएस फिल्टर के बारे में भूल जाओ। मैं ज्यादातर धुंधले अंगूठे को हटाने में कामयाब रहा :)
nixda

0

दोनों स्क्रिप्ट की सराहना करें, वीडियो को विभाजित करने का शानदार तरीका।

फिर भी, मुझे वीडियो के साथ कुछ समस्याएं थीं जो बाद में सही समय नहीं दिखा रही थीं और मैं एक विशिष्ट समय पर कूदने में सक्षम नहीं था। एक समाधान demux करने के लिए था और फिर Mp4Box का उपयोग करते हुए धाराओं को मक्स करें।

मेरे लिए एक और आसान तरीका, विभाजन के लिए mkvmerge का उपयोग करना था। इसलिए दोनों लिपियों में फेरबदल करना पड़ा। Det_black.ps1 के लिए, केवल "* .mkv" को फ़िल्टर विकल्प में जोड़ा जाना था, लेकिन यह जरूरी नहीं है कि आप केवल mp4 फाइलों से शुरू करें।

### Options        
$mkvmerge = ".\mkvmerge.exe"        # Set path to mkvmerge.exe
$folder = ".\*"                     # Set path to your video folder; '\*' must be appended
$filter = @("*.mov", "*.mp4", "*.mkv")        # Set which file extensions should be processed

### Main Program 
foreach ($video in dir $folder -include $filter -exclude "*_???.*" -r){

  ### Set path to logfile
  $logfile = "$($video.FullName)_ffmpeg.log"

  ### Read in all cutpoints from *_cutpoints.csv; concat to string e.g "00:03:23.014,00:06:32.289,..."  
  $cuts = ( Import-Csv "$($video.FullName)_cutpoints.csv" | % {$_.cut} ) -join ","

  ### put together the correct new name, "%03d" is a generic number placeholder for mkvmerge
  $output = $video.directory.Fullname + "\" + $video.basename + "-%03d" + ".mkv"

  ### use mkvmerge to split current video in parts according to their cut points and convert to mkv
  & $mkvmerge -o $output --split timecodes:$cuts $video
}

फंक्शन वही है, लेकिन अब तक वीडियो समय के साथ कोई समस्या नहीं है। प्रेरणा के लिए धन्यवाद।


-2

मुझे आशा है कि मैं गलत हूं, लेकिन मुझे नहीं लगता कि आपका पूछना संभव है। वीडियो को पुन: एन्कोडिंग करते समय यह संभव हो सकता है, लेकिन "सरल दोषरहित स्लाइस" के रूप में मुझे किसी भी तरह का पता नहीं है।

कई वीडियो संपादन कार्यक्रमों में एक ऑटो विश्लेषण सुविधा या कुछ समान होगा जो आपके वीडियो को काले फ्रेम पर विभाजित करने में सक्षम हो सकता है लेकिन इसके लिए वीडियो के पुन: एन्कोडिंग की आवश्यकता होगी।

सौभाग्य!


यह बिल्कुल संभव है। आप समस्याओं के बिना दोषरहित तरीके से वीडियो को स्लाइस कर सकते हैं (जैसे कि ffmpeg में सेगमेंट मक्सर के साथ , वीडियो को काटने पर भी ffmpeg विकि देखें )। कोई भी सभ्य वीडियो संपादन कार्यक्रम इसे करने में सक्षम होना चाहिए। एकमात्र मुद्दा दृश्य परिवर्तनों का पता लगाना है।
slhck

1
वास्तव में आप नहीं कर सकते। सबसे बड़ी समस्या keyframes हो सकती है। सभी क्लिप को संपादन टूल में भी प्लेबैक के समय ठीक से प्रस्तुत करने में सक्षम होने के लिए एक कीफ्रेम के साथ शुरू करने की आवश्यकता होती है। अगर ब्लैक फ्रेम कीफ्रेम से शुरू नहीं होता है तो दोषरहित कटौती का उपयोग करते समय असंगति होने वाली है।
जेसनएक्सए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.