কালো দৃশ্যে লম্বা ভিডিওগুলিকে ছোট অধ্যায়গুলিতে বিভক্ত করতে এখানে দুটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে।
এগুলি সনাক্ত করুন_ব্ল্যাক.পিএস 1 এবং কাট_ব্ল্যাক.পিএস 1 হিসাবে সংরক্ষণ করুন। উইন্ডোজের জন্য ffmpeg ডাউনলোড করুন এবং স্ক্রিপ্টটি বিকল্প বিভাগের অধীনে আপনার ffmpeg.exe এবং আপনার ভিডিও ফোল্ডারের পথটি বলুন।
উভয় স্ক্রিপ্টগুলি বিদ্যমান ভিডিও ফাইলগুলিকে স্পর্শ করবে না, সেগুলি অচ্ছুত থাকবে।
তবে আপনার ইনপুট ভিডিওগুলি যেখানে রয়েছে সেখানে একই জায়গায় আপনি বেশ কয়েকটি নতুন ফাইল পাবেন
- উভয় ব্যবহৃত এফএফএমপিগ কমান্ডের জন্য কনসোল আউটপুট সহ ভিডিও প্রতি একটি লগফিল
- ম্যানুয়াল সূক্ষ্ম সুরের জন্য কালো দৃশ্যের সমস্ত টাইমস্ট্যাম্প সহ ভিডিও প্রতি সিএসভি ফাইল
- পূর্বে কয়টি কালো দৃশ্য সনাক্ত হয়েছে তার উপর নির্ভর করে কয়েকটি নতুন ভিডিও
চালানোর জন্য প্রথম স্ক্রিপ্ট: সনাক্ত করুন_ব্ল্যাক.পিএস 1
### 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>
এবং আমরা সেগুলি বাদ দিতে চাই।
এটি সমস্ত কালো দৃশ্যের সন্ধান করে এবং একটি নতুন সিএসভি ফাইল নামের শুরুর টাইমস্ট্যাম্প এবং কালো দৃশ্যের সময়কাল লিখেছে <video_name>_cutpoints.txt
এছাড়া কাটা পয়েন্ট দেখানো হয়েছে হিসাব: cutpoint = black_start + black_duration / 2
। পরে, ভিডিওটি এই টাইমস্ট্যাম্পগুলিতে ভাগ হয়ে যায়।
আপনার নমুনা ভিডিওর জন্য কাটপয়েন্টস.টেক্সট ফাইলটি প্রদর্শন করবে:
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
একটি পিক্সেলকে "কালো" হিসাবে বিবেচনা করার জন্য প্রান্তিক মান নির্ধারণ করে (আলোকসজ্জাতে)। আপনার যেহেতু পুরানো ভিএইচএস ভিডিও রয়েছে তাই আপনার ভিডিওগুলিতে সম্পূর্ণ কালো দৃশ্য নেই scenes ডিফল্ট মান 10 কাজ করবে না এবং আমাকে প্রান্তিকরটি কিছুটা বাড়িয়ে দিতে হয়েছিল
যদি কিছু ভুল হয়ে যায় তবে ফোন করা সম্পর্কিত লগফাইলে চেক করুন <video_name>__ffmpeg.log
। নীচের লাইনগুলি অনুপস্থিত থাকলে, আপনি সমস্ত কালো দৃশ্য সনাক্ত না করা পর্যন্ত উপরে বর্ণিত সংখ্যাগুলি বাড়িয়ে দিন:
[blackdetect @ 0286ec80]
black_start:236.908 black_end:242.247 black_duration:5.33877
চালানোর জন্য দ্বিতীয় স্ক্রিপ্ট: কাট_ ব্ল্যাক.পিএস 1
### 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
}
এটা কিভাবে কাজ করে
দ্বিতীয় স্ক্রিপ্ট সমস্ত স্ক্রিপ্ট ফাইলগুলিতে একই স্ক্রিপ্টটির পুনরাবৃত্তি করে script এটি কোনও ভিডিও সম্পর্কিত সম্পর্কিত কাট টাইমস্ট্যাম্পগুলিতে পড়ে cutpoints.txt
।
এর পরে, এটি অধ্যায় ফাইলগুলির জন্য উপযুক্ত ফাইলের নাম রাখে এবং ffmpeg কে ভিডিও বিভাগে জানায়। বর্তমানে ভিডিওগুলি পুনরায় এনকোডিং ছাড়াই কাটা হয়েছে (সুপারফিট এবং লসলেস)। এর কারণে, কাট পয়েন্ট টাইমস্ট্যাম্পগুলির সাথে 1-2s এর অসতর্কতা থাকতে পারে কারণ ffmpeg কেবল কী_ফ্রেমে কাটতে পারে। যেহেতু আমরা কেবল অনুলিপি করছি এবং পুনরায় এনকোড করব না, তাই আমরা কী_ফ্রেমগুলি নিজেরাই sertোকাতে পারি না।
নমুনা ভিডিওর জন্য আদেশটি হবে
$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 দেখুন
তথ্যসূত্র
করতে
সিপিভি ফর্ম্যাটটি কাট পয়েন্ট ফাইল হিসাবে কোনও পাঠ্য ফাইলের চেয়ে ভাল কিনা ওপিকে জিজ্ঞাসা করুন, তাই আপনি এক্সেল দিয়ে কিছুটা সহজ সম্পাদনা করতে পারেন le
বাস্তবায়িত
টাইমস্ট্যাম্পগুলি [hh] হিসাবে ফর্ম্যাট করার একটি উপায় প্রয়োগ করুন: [মিমি]: [এসএস], [মিলিসেকেন্ড] কেবলমাত্র সেকেন্ডের চেয়ে
»বাস্তবায়িত
প্রতিটি অধ্যায়ে মোসাইক পিএনজি ফাইল তৈরি করতে একটি ffmpeg কমান্ড প্রয়োগ করুন le
বাস্তবায়িত
ওপির -c copy
দৃশ্যের জন্য যথেষ্ট কিনা বা আমাদের পুরোপুরি পুনরায় এনকোড করা দরকার বিশদ।
মনে হচ্ছে রায়ান ইতিমধ্যে এতে রয়েছে ।