হ্যান্ডব্রেক একটি দুর্দান্ত ভিডিও সংক্ষেপণ সরঞ্জাম, তবে কোনও ভিডিও সংকোচনের পরে এটি মূল ক্যাপচারের সময়টি সংরক্ষণ করবে বলে মনে হয় না। কোন ধারনা কিভাবে এটা ঠিক করতে হবে?
হ্যান্ডব্রেক একটি দুর্দান্ত ভিডিও সংক্ষেপণ সরঞ্জাম, তবে কোনও ভিডিও সংকোচনের পরে এটি মূল ক্যাপচারের সময়টি সংরক্ষণ করবে বলে মনে হয় না। কোন ধারনা কিভাবে এটা ঠিক করতে হবে?
উত্তর:
FFmpeg ব্যবহার করে ভিডিওটি পুনরায় এনকোড করার প্রয়োজন ছাড়াই আপনি বিদ্যমান মেটাডেটা এক ফাইল থেকে অন্য ফাইলটিতে অনুলিপি করতে পারেন । এটি মূলত এক সেকেন্ড সময় নেয়। এটি করার জন্য, তিনটি ফাইল ধরে নেওয়া যাক:
in.mp4
- রূপান্তর করার আগে আসল ফাইলout.mp4
- হ্যান্ডব্রেক রূপান্তরের পরে ফাইলfixed.mp4
- "সংশোধন" মেটাডেটা সহ ফাইলনতুন ফাইলটিতে সম্পূর্ণ মেটাডেটা রেকর্ডটি অনুলিপি করতে FFmpeg কমান্ডটি হ'ল:
ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
এটি ভেঙে ফেলার জন্য, এটি নিম্নলিখিতগুলি করে:
in.mp4
এবং out.mp4
) নিন, যা যথাক্রমে 0 এবং 1 আইডি নির্ধারিত হয়।-map 1
) এ কেবল ভিডিও / অডিও / সাবটাইটেল স্ট্রিমগুলি মানচিত্র করুন , তাই আমরা ইতিমধ্যে রূপান্তরিত বিট স্ট্রিমগুলি গ্রহণ করি-map_metadata 0
) পর্যন্ত কেবল মেটাডেটা মানচিত্র করুন-c copy
ভিডিওটি পুনরায় এনকোডিংয়ের পরিবর্তে সমস্ত বিটস্ট্রিমগুলি অনুলিপি করতে অনুলিপি কোডেক ( ) ব্যবহার করুন।এর পরে, আপনি অবশ্যই পুনরায় নামকরণ fixed.mp4
করতে পারেন out.mp4
।
উদাহরণ হিসাবে, এখানে আমার আসল ফাইলটির মেটাডেটা রেকর্ডের অংশ:
$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19
হ্যান্ডব্রেক রূপান্তর হওয়ার পরে ফাইলটি এখানে:
$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35
মেটাডেটা ম্যাপিংয়ের পরে এখানে চূড়ান্ত ফাইলটি রয়েছে:
$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]
$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19
আসলে, আপনি যদি এফএফপিপেইগ ব্যবহার করতে পারেন তবে হ্যান্ডব্রেকটি ব্যবহার করার দরকার নেই, যা হ্যান্ডব্রেক যেভাবেই নির্ভর করে। সবচেয়ে সহজ ক্ষেত্রে আপনি আপনার রূপান্তরটি এইভাবে করতে পারেন:
ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4
এটি x264 এনকোডার এবং এএসি অডিও সহ ইনপুটটিকে আউটপুট ফাইলে রূপান্তর করবে, মূল মেটাডেটা অনুলিপি করবে। আউটপুটটির গুণমান পরিবর্তন করতে, আপনি:
আরও জন্য FFmpeg উইকিতে x264 এনকোডিং গাইড পড়ুন ।
Unknown encoder 'libfaac'
ত্রুটি দিয়েছে
-c:a aac -strict experimental
পরিবর্তে চেষ্টা করুন।
দুর্ভাগ্যক্রমে মনে হচ্ছে হ্যান্ডব্র্যাকটি নিজে থেকে এটি করতে পারে না, তবে একইভাবে ffmpeg উদাহরণস্বরূপ, টাইমস্ট্যাম্পগুলি touch
ইউনিক্স কমান্ডটি ব্যবহার করে সংক্ষেপণের পরে মূল থেকে অনুলিপি করা যেতে পারে :
touch -r MVI_1234.MOV compressed_MVI_1234.m4v
এটি প্রদত্ত রেফারেন্স ফাইলের মতো সংকুচিত ফাইলের টাইমস্ট্যাম্পটি সেট করবে।
আমি এটি করার একটি সহজ উপায় খুঁজে পেয়েছি Adapter
: একটি আলাদা সফটওয়্যার ব্যবহার করে : http://www.macroplant.com/adapter/
এটিতে হ্যান্ডব্রেকের মতো সমস্ত উন্নত সেটিংস নেই তবে এটি কাজ করে (এছাড়াও ffmpeg ব্যবহার করে) এবং আমার প্রয়োজন মেটাটাটা ধরে রাখে।
আমি ম্যাকোস ইয়োসেমাইট এবং হ্যান্ডব্রেকব্যাচ ব্যবহার করছি - ফাইলগুলি রূপান্তর করতে এটি ব্যবহার করুন, তবে "পছন্দসমূহ" মেনুতে "ফাইল তৈরি এবং পরিবর্তনের তারিখগুলি রাখুন" বক্সে ক্লিক করুন।
তারপরে, আমি লাইটরুম 5 এ ভিডিওগুলি আমদানি করি তবে তারা এখনও তৈরির তারিখ রাখে না। তবে, সবচেয়ে গুরুত্বপূর্ণ, ফাইলগুলি সঠিক অনুসন্ধানের তারিখ সহ ফাইন্ডারে প্রদর্শিত হয়। তাই আমি লাইটরুমের লাইব্রেরিতে all মেটাডেটা (ডান ডায়ালগ কলাম) → ক্যাপচার সময় File ফাইলের তৈরির তারিখে পরিবর্তন All সমস্ত পরিবর্তন করে তাদের সকলকে নির্বাচন করেছি।
আমার 850 টি পুরানো পারিবারিক ভিডিও রয়েছে - আমার 100 টি ব্যাচে এই প্রক্রিয়াটি করতে হয়েছিল Hand অনেক ফাইল সহ হ্যান্ডব্রেক ক্র্যাশ।
আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি যা touch
উপরে প্রস্তাবিত হিসাবে ব্যাচটি মেটাডেটা স্থানান্তর করতে পারে । এটি কাজ করার জন্য আপনার পৃথক ডিরেক্টরিতে আপনার মূল এবং রূপান্তরিত ফাইলগুলি থাকতে হবে, প্রতিটি একই সংখ্যক ফাইলের সাথে থাকতে হবে (ডিরেক্টরিগুলিতে কেবলমাত্র ফাইল ফাইল থাকতে হবে, যেমন অন্যান্য ফাইল / ডিরেক্টরি হস্তক্ষেপ করবে) এবং একই ক্রমে। তারপরে এটি কেবল মেটাডেটা অনুলিপি করে আপনি সম্পূর্ণ প্রস্তুত এবং শেষ করেছেন। স্ক্রিপ্টটি সমস্ত ফাইল জোড়া তালিকাবদ্ধ করে যাতে আপনি চাইলে শেষ পর্যন্ত ত্রুটিগুলি পরীক্ষা করতে পারেন।
কোডটি আমার প্রথম যথাযথ বাশ স্ক্রিপ্ট হিসাবে সম্ভবত নিকটতম হতে পারে না তবে এটি আমার পক্ষে বেশ দ্রুত এবং স্থিতিশীল ছিল, তাই এখানে চলে যায়:
#!/bin/bash
#Sets IFS to \n to allow for filenames with spaces
IFS=$'\n'
#Source directory and converted direcotry
dir1=$1
dir2=$2
#Array with source filepaths
srcf=()
#Array with converted filepaths
cnvf=()
#Adds filepaths from the source directory to srcf array
for file in $(ls -1 $dir1); do
srcf+=("$dir1/$file")
done
#Adds filepaths from the converted directory to cnvf array
for file in $(ls -1 $dir2); do
cnvf+=("$dir2/$file")
done
#Checks if source and convert folders have the same number of files
if [ ${#srcf[*]} -eq ${#cnvf[*]} ]
then
#Counter variable
fnum=0
#Loops through the arrays and runs touch command on pairs of files to transfer the metadata
while [ $fnum -lt ${#srcf[*]} ]; do
echo $fnum
echo ${srcf[$fnum]} ${cnvf[$fnum]}
touch -r ${srcf[$fnum]} ${cnvf[$fnum]}
((fnum++))
done
else
echo "The provided paths do not have the same number of files. Both paths must have the same number of files in the same order."
fi
চালানোর জন্য: sudo bash script.sh /sourcedir /converteddir
আপনি যদি ফাইল-স্তরের পরিবর্তনের সময় বলতে চান তবে আমারও একই সমস্যা ছিল এবং এক্সিফটোল দিয়ে এটি পুনরুদ্ধার করতে সক্ষম হয়েছি ।
exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4
এই মেটাডাটা নেয় এবং FileModifyDate
থেকে input.mp4
এবং কপি এটি output.mp4
।
এই স্বয়ংক্রিয় হিসাবে আমি ট্রান্সকোড ফাইল সংখ্যক ছিল, আমি নামক একটি সরঞ্জাম তৈরি Shrinkwrap যে সঙ্গে প্রথম ট্রান্সকোড FFmpeg (আমি দূরে handbrake থেকে কারণ আরো মেটাডাটা সংরক্ষণ করা প্রয়োজন এর সরানো), তারপর exiftool সঙ্গে পরিমার্জন টাইমস্ট্যাম্প recovers।
অনেক অনুসন্ধানের পরে, আমি বেশিরভাগ আমার নতুন হ্যান্ডব্রেক-সংক্ষেপিত ভিডিও ফাইলগুলির তৈরি / সংশোধিত তারিখটি ওভাররাইট করতে সঠিক তারিখ তৈরি / সংশোধিত সহ পুরানো ভিডিও ফাইলগুলি ব্যবহার করা ছেড়ে দিয়েছি। যেহেতু আমার বেশিরভাগ ভিডিওর ফাইলের তারিখ / সময় রয়েছে তাই আমি পরীক্ষা করে কাজ করার দুটি পদ্ধতি পেয়েছি। প্রথম এবং সর্বোত্তম হ'ল অ্যাডভান্সড রেনামারের টাইমস্ট্যাম্প পদ্ধতিটি ব্যবহার করা, যা কেবল ফাইলের নাম নয়, ফাইলের তারিখ পরিবর্তন, তৈরি এবং অ্যাক্সেস করতে পারে। https://www.advancedrenamer.com/download ।
আমি একটি পাওয়ারশেল স্ক্রিপ্টও পেয়েছি https://www.michaelmiklis.de/set-creation-and-modication-date-from-filename/ যা অন্য ফাইলের নাম / তারিখের ফর্ম্যাটের জন্য প্রোগ্রামার দ্বারা অভিযোজিত হতে পারে। বর্তমান অবস্থাতে এটি কেবলমাত্র তখনই কাজ করে যদি ফাইলের নামটি যেমন উদাহরণ হিসাবে রয়েছে ঠিক তেমন কাঠামোযুক্ত হয়।
ভাগ্যক্রমে ফাইল নামটিতে সংশোধিত তারিখ ব্যতীত আমার ভিডিওর সংখ্যা কম হ'ল আমি নিজে নিজে এগুলি পরিবর্তন করতে পারি, খুব বেশি সময় লাগবে না।
আমি ffmpeg ব্যবহার করার চেষ্টা করেছি, তবে এর মানচিত্র_মেডাটাটা কমান্ড কেবল ফাইলের ভিতরে ডেটা পরিবর্তন করে, তারিখ পরিবর্তিত হয় না, ফাইলটি নিজেই তৈরি করে created এই জাতীয় অভ্যন্তরীণ মেটাডাটা হ্যান্ডব্রেক ইতিমধ্যে যাইহোক ভাল করে।
মাইএফএফম্পেগ প্রোগ্রামটি এটি খুব ভাল করে। এর বিকল্পগুলিতে উত্স ফাইল থেকে মূল তৈরি / পরিবর্তিত তারিখ রাখার বিকল্প রয়েছে ।
আমি এটি সন্ধান করছিলাম কারণ আমার একটি হোম প্লাস্টিক সার্ভারে আমার ভিডিও রয়েছে এবং ফাইলগুলি তৈরির তারিখ দ্বারা সংগঠিত করা হয়, আপনি যদি কোনও নির্দিষ্ট বছর থেকে স্টাফ দেখতে চান তবে এটি খুব কার্যকর।
দুর্ভাগ্যক্রমে এটি একটি নিখরচায় বিকল্প নয়, বর্তমানে 20 ইউরো বা প্রায় 21 মার্কিন ডলার ব্যয়। আপনাকে লাইসেন্স কেনার আগে তাদের 10 টি ব্যবহারের জন্য একটি ট্রায়াল রয়েছে। অবাক করা কিছু ফ্রি ffmpeg জিইউআই নেই বা এই বিকল্পটি যুক্ত করুন।
আমি আমার অবিশ্বাস্যভাবে বড় GoPro MP4 ভিডিওগুলিকে H.264 এ সংকুচিত করার সময় আমি তৈরির তারিখ বজায় রাখার চেষ্টা করি।
আমি হ্যান্ডব্র্যাকব্যাচ প্রোগ্রামটি পেয়েছি । এটি তৈরির তারিখ (মেটাডেটা) রাখার সময় আমার একবারে 1000 টিরও বেশি ফাইল সংকোচনের প্রয়োজন what
এটি করতে সক্ষম এমন কোনও অন্যান্য প্রোগ্রাম খুঁজে পান নি। এফএফম্পেগ, হ্যান্ডব্রেক এবং ওয়ান্ডারফুল ভিডিও কনভার্টারের সাহায্যে চেষ্টা করা হয়েছে, কিন্তু নেই।