iMovie (दोषरहित नहीं, लेकिन पहले से बेहतर)
iMovie v10 (मूल प्रश्न पूछे जाने के कुछ समय बाद जारी किया गया था) अब बेहतर तरीके से अधिक मीडिया प्रकारों को संभालता है, इसलिए अधिकांश H.264 (mp4, m4v, mov, AVHDC, mts, mt2s) सामग्री के आयात को फिर से एन्कोड करता है।
यह अभी भी, निर्यात पर फिर से सांकेतिक शब्दों में बदलना होगा, इसलिए तकनीकी रूप से दोषरहित नहीं हो सकता - एक और नई सुविधा, हालांकि, निर्यात गुणवत्ता को अनुकूलित करने की क्षमता है, जो करीब-से-दोषरहित हो सकती है। मुझे लगता है कि उत्तर का यह हिस्सा अन्य 'प्रोजेक्ट संचालित' वीडियो एडिटिंग सॉफ़्टवेयर (जैसे प्रीमियर या फ़ाइनल कट) के लिए समान रूप से लागू हो सकता है क्योंकि मुझे लगता है कि वे सभी आम तौर पर आउटपुट पर फिर से एनकोड करते हैं, हालांकि आमतौर पर सटीक ट्रिमिंग के लिए उपयोग करना बहुत आसान होता है।
निजी तौर पर, मुझे लगता है कि आम तौर पर एक एकल फिर से सांकेतिक शब्दों में बदलना एक बड़ी समस्या नहीं है, लेकिन यह समझें कि आपने विशेष रूप से दोषरहित समाधान के लिए कहा था, इसलिए ...
दोषरहित (लेकिन अधिक जटिल तरीका!)
कम से कम इसके कुछ हिस्से को फिर से एनकोड करने के बिना आप कितनी अच्छी तरह वीडियो को काट सकते हैं, इसकी तकनीकी सीमाएँ हैं, और यह मूल रूप से आई-फ्रेम आवृत्ति पर निर्भर करता है। यदि हर फ़्रेम एक आई-फ्रेम है, तो आप कहीं भी काट सकते हैं, लेकिन यदि वे केवल कुछ सेकंड में हैं, तो आप केवल बिना सामग्री खोए या फिर से एनकोड किए कम से कम उन i-फ़्रेमों पर दोषरहित रूप से कटौती कर सकते हैं (कम से कम भाग स्ट्रीम) इसलिए यह एक आई-फ्रेम के साथ शुरू हो सकता है।
ffmpeg
यह SO Q & A विशेष रूप से यह प्रश्न उठाता है कि आई-फ्रेम्स का उपयोग कैसे करें ffmpeg
। मुझे ऐसा करने के लिए किसी भी GUI ऐप्स का पता नहीं है, लेकिन मूल रूप से आप निम्न की तरह एक कमांड चलाते हैं:
ffmpeg -i input.m4v -vcodec copy -acodec copy -ss 00:01:20.000 -t 00:37:50.000 output.m4v
दो बार निर्दिष्ट कर रहे हैं शुरू और अवधि , और सेकंड या के रूप में या तो निर्दिष्ट किया जा सकता hh:mm:ss.ss
है, और -acodec copy
और -vcodec copy
ffmpeg फिर से एनकोड के लिए निर्देश दे।
मुझे बिल्कुल यकीन नहीं है कि अगर आप बहुत जल्दी कटौती करते हैं तो क्या होता है, लेकिन मुझे लगता है कि वीडियो अनिवार्य रूप से रिक्त है (या शायद भ्रष्ट है, खिलाड़ी पर निर्भर करता है) जब तक कि यह एक आई-फ्रेम से सामना नहीं करता है। तो आप शायद अपने कट से पहले निकटतम आई-फ्रेम ढूंढना चाहते हैं। यह उत्तर उस समस्या का हल करता है ffprobe
और awk
, थोड़ा अजीब है। अनिवार्य रूप से आप ffprobe
फ़्रेम को स्कैन करने और flags=K
अपने आदर्श कट-पॉइंट से पहले निकटतम कीफ़्रेम ( ) खोजने के लिए उपयोग करते हैं। वीडियो के प्रत्येक फ्रेम के लिए पूर्ण आउटपुट को इस तरह देखा जा सकता है:
ffprobe -select_streams v -show_frames <INPUT>
लिंक किए गए उत्तर इस कमांड को एक विशिष्ट समय से पहले एक keyframe खोजने के लिए आपूर्ति करते हैं:
ffprobe -select_streams v -show_frames -v quiet INPUT.mp4 |
awk -F= '
/pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } }
/pkt_pts_time/ { if (i && ($2 >= 150)) print $2; }
' | head -n 1
और अंत में, अगर आपको वास्तव में दो आई-फ्रेम के बीच कहीं कटौती करने की आवश्यकता है, तो आप वीडियो को विभाजित कर सकते हैं और फिर से जुड़ सकते हैं। इस उत्तर की जानकारी के आधार पर , यह कुछ इस तरह होना चाहिए:
ffmpeg -f concat -i list_of_videos.txt -c copy OUTPUT.mp4
जहाँ list_of_videos.txt
एक साधारण टेक्स्ट फ़ाइल उन फाइलों को सूचीबद्ध करती है जिन्हें आप संक्षिप्त करना चाहते हैं।
सारांश
iMovie शायद ज्यादातर मामलों (v10 के बाद से) के लिए पर्याप्त है, और बहुत आसान है।
ffmpeg इसे हानिरहित (या दोषरहित रूप से बहुत करीब) कर सकता है, थोड़े से फिडलिंग के साथ; कठिनाई का स्तर इस बात पर निर्भर करता है कि आप सटीक शुरुआती बिंदु और आई-फ्रेम्स की आवृत्ति के बारे में कितना चुस्त हैं।