Fencmpeg में बिना रीएन्कोडिंग के फ्रैमर्ट बदलें


14

मेरे पास एक mkv (h264) वीडियो है जो 23.976 एफपीएस (24000/1001) है, लेकिन मैं इसे 25fps में बिना रीसेकोडिंग और खोए हुए गुणवत्ता में परिवर्तित करना चाहता हूं। मुझे पता है कि mkvmerge इसे कर सकता है (विकल्प --default-period '0: 25fps' के साथ) लेकिन मैं इसे सीधे ffmpeg से करना चाहूंगा यदि संभव हो तो डॉक्स के अनुसार यह काम करना चाहिए:

ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv

लेकिन जब मैं इसे निष्पादित करता हूं तो मुझे केवल एक ही वीडियो एफपीएस मिलता है। Ffmpeg में इसे (यदि मौजूद है) करने की सही विधि क्या है?


1
मेरा मानना ​​है कि इस समय FFmpeg के साथ संभव नहीं है। -rस्ट्रीम कॉपी के साथ संगत नहीं है, और फ़्रैमरेट को बदलने के लिए बिटस्ट्रीम फ़िल्टर नहीं हैं।
Ely

1
बहुत बुरा। मुझे हर बार mkvmerge का उपयोग करना होगा। धन्यवाद
phat89

1
नियमित ffmpeg के साथ ऐसा करने का एक जटिल तरीका है और ffmpeg के पुराने मॉडल्ड संस्करण के साथ ऐसा करने का सीधा तरीका है। यदि आप रुचि रखते हैं, तो मैं इसे एक उत्तर के रूप में लिखूंगा।
ज्ञान

1
हाँ धन्यवाद..मैं इसे अतिरिक्त टूल के बिना करना चाहूंगा (मुझे पहले से ही ffmpeg की जरूरत है)
phate89

1
@Mulvya आप इस अधिकार के बारे में बात कर रहे हैं ? मैं इसे लिंक करने में झिझक रहा था, लेकिन यह अब पुराना हो गया है। हालांकि नियमित एफएफएमपीपी के साथ इसे करने के लिए इच्छुक तरीके से रुचि रखते हैं।
एली

जवाबों:


15

यहां FFmpeg के वर्तमान संस्करणों का उपयोग करने की विधि दी गई है। यह पहली फ़ाइल के बाद इनपुट के पीटीएस को rescaling नहीं कर रहा है, जबकि कॉनकैट डिमांस्टर पर निर्भर करता है, लेकिन बस एक निश्चित ऑफसेट को लागू करता है। मान लें कि आपके पास एक 30 एफपीएस स्ट्रीम है जिसमें एक टाइमसेल 15360(FFmpeg आउटपुट का विशिष्ट) है। इसका मतलब है कि फ्रेम 0में पीटीएस है 0और फ्रेम 30में पीटीएस है 15360। यदि हम 23040पीटीएस मूल्यों को प्रभावित किए बिना टाइमस्केल को बदल सकते हैं तो यह 45 एफपीएस स्ट्रीम बन जाएगा ।

अनिवार्य रूप से, यही नीचे दी गई विधि है।

1 है । स्रोत गुणों की पहचान करें।

Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s,
       30 fps, 30 tbr, 15360 tbn (default)

आप स्रोत गुणों को नोट करना चाहते हैं, विशेष रूप से संकल्प और tbn


२ अ । (वैकल्पिक) गणना को सरल बनाने के लिए टाइमस्केल को कुछ सुविधाजनक में बदलें।

ffmpeg -i in.mp4 -c copy -an -video_track_timescale 30 in-v30.mp4

यह हमें मिलता है

Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s, \
       30 fps, 30 tbr, 30 tbn (default

यदि आप यह चरण करते हैं, तो नया टाइमस्केल मूल फ़्रैमरेट के बराबर या एक से अधिक होना चाहिए।

२ ब । आवश्यक टाइमस्केल की गणना करें, ताकि लक्ष्य फ्रैमर्ट के लिए x, xस्रोत में # फ्रेम का पीटीएस नया के समान मूल्य होना चाहिए tbn। यदि आपने चरण 2 ए को अंजाम दिया है, तो यह बहुत आसान है और यह बस नया फ्रेमरेट है। तो, लक्ष्य एफपीएस के लिए 45, नया tbnहोना चाहिए 45


। डमी वीडियो जेनरेट करें।

ffmpeg -f lavfi -i color=s=1280x720:r=45:d=1 -profile:v main -video_track_timescale 45 0.mp4

सभी गुण समान होने चाहिए जैसे कि रिज़ॉल्यूशन, H.264 प्रोफाइल, पिक्सेल फॉर्मेट, Refs count..etc सर्वोत्तम परिणामों के लिए।


4 वीडियो को सम्‍मिलित करें।

सबसे पहले एक टेक्स्ट फाइल बनाएं

file '0.mp4'
file 'in-v30.mp4'

फिर, समागम

ffmpeg -f concat -i list.txt -c copy -video_track_timescale 45 45fps.mp4

आउटपुट फ़ाइल में 45 एफपीएस पर चलने वाला दूसरा वीडियो होगा।

। अब, डमी प्रोल को बंद करें

ffmpeg -ss 1.1 -i 45fps.mp4 -c copy -avoid_negative_ts make_zero in45.mp4

और तुम्हारे पास

Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1757 kb/s, \
       45 fps, 45 tbr, 11520 tbn (default)

मैंने कहा कि यह दृढ़ था!


1
बहुत चालाक, अच्छा जवाब।
रोवे मोरहाउस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.