हैंडब्रेक कैप्चर समय / निर्माण समय को कैसे संरक्षित करें?


14

हैंडब्रेक एक कमाल का वीडियो कम्प्रेशन टूल है, लेकिन यह वीडियो कैप्चर होने के बाद मूल कैप्चर टाइम को संरक्षित करने के लिए प्रतीत नहीं होता है। इसे ठीक करने के लिए कोई भी विचार?


@slhck हां मेरा मतलब है क्रिएशन टाइम। मैं अपने वीडियो को प्रबंधित करने के लिए लाइटरूम का उपयोग करता हूं और संपीड़न के बाद, कैप्चर / क्रिएशन का समय संशोधित समय बन जाता है।
पिक्सल्फ्रीक

जवाबों:


21

आप 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 सौंपा गया है।
  • फ़ाइल 1 से आउटपुट के लिए केवल वीडियो / ऑडियो / उपशीर्षक धाराओं को मैप करें ( -map 1), इसलिए हम पहले से परिवर्तित बिटस्ट्रीम लेते हैं
  • फ़ाइल 0 से आउटपुट तक केवल मेटाडेटा मैप करें ( -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 के साथ सभी करना चाहते हैं:

वास्तव में, आपको वास्तव में हैंडब्रेक का उपयोग करने की आवश्यकता नहीं है यदि आप FFmpeg का उपयोग कर सकते हैं, जो हैंडब्रेक वैसे भी निर्भर करता है। सबसे सरल मामले में आप अपना रूपांतरण इस तरह कर सकते हैं:

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4

यह x264 एनकोडर और AAC ऑडियो के साथ इनपुट को आउटपुट फ़ाइल में बदल देगा, मूल मेटाडेटा की नकल करेगा। आउटपुट की गुणवत्ता को बदलने के लिए, आप कर सकते हैं:

  • वीडियो के लिए CRF मान बदलें। कम का मतलब है बेहतर गुणवत्ता। 23 डिफ़ॉल्ट है, और 18 से नीचे कुछ भी संभवतः दृष्टिहीन होगा।
  • ऑडियो के लिए बिटरेट बदलें। अधिक जानकारी के लिए AAC एन्कोडिंग गाइड देखें ।

अधिक के लिए FFmpeg विकि पर x264 एन्कोडिंग गाइड पढ़ें ।


1
वाह, यह एक अच्छा वर्कअराउंड है, हालांकि थोड़ा कठिन लग रहा है, काश हैंडब्रेक यह पीछे का दृश्य करता है। धन्यवाद!
pixelfreak

मेटाडेटा ट्रांसफर कमांड काम करता है, लेकिन रूपांतरण करने के लिए अंतिम कमांड ने मुझे एक Unknown encoder 'libfaac'त्रुटि दी
पिक्सफ्रीक

तब आपके ffmpeg को FAAC सपोर्ट के साथ संकलित नहीं किया जाता है। -c:a aac -strict experimentalइसके बजाय कोशिश करें ।
slhck

5

दुर्भाग्य से ऐसा लगता है कि हैंडब्रेक इसे अपने दम पर नहीं कर सकता है, लेकिन इसी तरह ffmpeg उदाहरण के लिए, टाइमस्टैम्प को touchयूनिक्स कमांड का उपयोग करके संपीड़न के बाद मूल से कॉपी किया जा सकता है :

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

यह दी गई संदर्भ फ़ाइल के समान ही संपीड़ित फ़ाइल पर टाइमस्टैम्प सेट करेगा।


1
यह फ़ाइल के लिए टाइमस्टैम्प सेट करेगा, हाँ, लेकिन केवल फाइल सिस्टम में। EXIF डेटा में सही "दिनांक / समय मूल" टाइमस्टैम्प नहीं होगा।
स्टीफन श्रग्युजर

3

मुझे ऐसा करने का एक आसान तरीका मिला, एक अलग सॉफ्टवेयर का उपयोग करके Adapter: http://www.macroplant.com/adcape/

इसमें हैंडब्रेक जैसी सभी उन्नत सेटिंग्स नहीं हैं, लेकिन यह काम करता है (ffmpeg का उपयोग करके भी) और मेटाडाटा को मेरी आवश्यकता है।


1
मुझे नहीं लगता कि एडॉप्टर ऐसा करने में सक्षम है। मैंने अभी नवीनतम संस्करण का परीक्षण किया है और कहीं भी मेटाडेटा बनाए रखने के लिए सेटिंग नहीं ढूँढ सकता। इसके अतिरिक्त, यह सभी वीडियो फ़ाइल प्रकारों को परिवर्तित करने के लिए प्रतीत नहीं होता है, जैसे कि एमटीएस, आदि
jjj

बहुत बुरा यह सोनी के m2ts प्रारूप के साथ संगत नहीं है
डिएगो विएरा

2

मैं macOS Yosemite और HandBrakeBatch का उपयोग कर रहा हूं - इसका उपयोग फ़ाइलों को परिवर्तित करने के लिए करता हूं , लेकिन "प्राथमिकताएं" मेनू में "फ़ाइल निर्माण और संशोधन तिथियां" बॉक्स पर क्लिक करें।

फिर, मैं लाइटरूम 5 में वीडियो आयात करता हूं, लेकिन वे अभी भी निर्माण की तारीखों को नहीं रखते हैं। लेकिन, सबसे महत्वपूर्ण बात, फाइल्स को सही क्रिएशन डेट के साथ फाइंडर में दिखाया गया है। इसलिए मैंने उन सभी को लाइटरूम लाइब्रेरी → मेटाडेटा (राइट डायलॉग कॉलम) → कैप्चर टाइम → फ़ाइल के निर्माण की तिथि में परिवर्तन: सभी का चयन किया।

मेरे पास 850 पुराने पारिवारिक वीडियो थे - मुझे यह प्रक्रिया 100 बैचों में करनी थी। बहुत सी फाइलों के साथ हैंडब्रेक क्रैश।


अच्छा लगा, इस ऐप का भरपूर उपयोग करके खुद को देख सकते हैं।
calum_b

ध्यान दें कि ऐप अब नहीं रखा गया है : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck

1

मैंने एक बैश स्क्रिप्ट बनाई जो कि 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


1

यदि आप फ़ाइल-स्तर संशोधन समय का मतलब है, तो मैं एक ही समस्या थी, और इसे exiftool के साथ पुनर्प्राप्त करने में सक्षम था ।

exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4

यह मेटाडाटा और FileModifyDateसे लेता है input.mp4और इसे कॉपी करता है output.mp4

इसे स्वचालित करने के लिए क्योंकि मेरे पास बड़ी संख्या में फ़ाइलें ट्रांसकोड करने के लिए थीं, मैंने श्रिंकव्रप नामक एक टूल बनाया, जो पहले FFmpeg के साथ ट्रांसकोड करता है (मैं अधिक मेटाडेटा को संरक्षित करने की आवश्यकता के कारण हैंडब्रेक से दूर चला गया), फिर एक्सफ़िल्टुल के साथ संशोधन टाइमस्टैम्प को पुनः प्राप्त करता है।


0

बहुत खोज के बाद, मैंने ज्यादातर अपने नए हैंडब्रेक-कम्प्रेस्ड वीडियो फ़ाइलों के बनाए / संशोधित किए गए दिनांक को अधिलेखित करने के लिए बनाए / संशोधित किए गए सही तिथि के साथ पुरानी वीडियो फ़ाइलों का उपयोग करने पर छोड़ दिया। चूंकि मेरे अधिकांश वीडियो में फ़ाइल नाम में तारीख / समय होता है, इसलिए मैंने प्रयोग किया और काम करने के दो तरीके मिले। पहला और सबसे अच्छा उन्नत रेनमर की टाइमस्टैम्प विधि का उपयोग करना है, जो न केवल फ़ाइल नाम को संशोधित, निर्मित और एक्सेस की गई फ़ाइल की तारीख को बदल सकता है। https://www.advancedrenamer.com/download

मुझे एक पॉवरशेल स्क्रिप्ट भी मिली। https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ जिसे प्रोग्रामर द्वारा अन्य फ़ाइल नाम / तिथि प्रारूपों के लिए अनुकूलित किया जा सकता है। अपनी वर्तमान स्थिति में यह केवल तभी काम करता है जब फ़ाइल नाम की संरचना ठीक वैसी ही हो जैसी कि उस उदाहरण में है।

सौभाग्य से फ़ाइल नाम में संशोधित तारीख के बिना मेरे वीडियो की संख्या काफी कम है मैं उन्हें मैन्युअल रूप से बदल सकता हूं, बहुत लंबा नहीं लगेगा।

मैंने ffmpeg का उपयोग करने की कोशिश की, लेकिन इसका map_metadata कमांड केवल फ़ाइल के अंदर डेटा को बदलता है, न कि संशोधित तिथि, फ़ाइल से बना। इस तरह का आंतरिक मेटाडेटा हैंडब्रेक पहले से ही किसी भी तरह से ठीक करता है।


0

प्रोग्राम MyFFmpeg यह बहुत अच्छी तरह से करता है। इसके विकल्पों में सोर्स फाइल से ओरिजिनल क्रिएशन / मोडिफाइड डेट रखने का विकल्प है ।

मैं इसकी तलाश में था क्योंकि मेरे पास Plex सर्वर पर मेरे घर के वीडियो हैं और फाइलें निर्माण तिथि द्वारा आयोजित की जाती हैं, जो कि यदि आप किसी विशेष वर्ष से सामान देखना चाहते हैं तो बहुत उपयोगी है।

दुर्भाग्य से यह एक मुफ्त विकल्प नहीं है, वर्तमान में इसकी लागत 20 यूरो या लगभग 21 यूएस है। आपके पास लाइसेंस खरीदने से पहले 10 उपयोगों के लिए एक परीक्षण है। आश्चर्यचकित कुछ मुक्त ffmpeg GUIs के पास यह विकल्प नहीं है या नहीं है।


0

जब मैं अपने अविश्वसनीय रूप से बड़े GoPro MP4 वीडियो को H.264 में संकुचित करता हूं, तो मैं निर्माण तिथि को बनाए रखने की कोशिश करता हूं।

मुझे प्रोग्राम हैंडब्रेकबैच मिला । सृजन की तारीख (मेटाडेटा) को ध्यान में रखते हुए, एक ही बार में 1000 से अधिक फ़ाइलों को संपीड़ित करने की आवश्यकता है।

कोई अन्य कार्यक्रम नहीं मिला है जो ऐसा करने में सक्षम हैं। FFmpeg, हैंडब्रेक और अद्भुत वीडियो कनवर्टर के साथ प्रयास किया, लेकिन नहीं।


ध्यान दें कि हैंडब्रेकबैच अब नहीं रखा गया है : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.