मैं लाइव वीडियो के लिए एक टिकर / भिन्न पाठ जोड़ने के लिए FFmpeg का उपयोग कैसे कर सकता हूं?


2

मैं अपनी हार्ड डिस्क पर एक वीडियो में पाठ जोड़ने में सक्षम हूं, इससे पहले कि मैं इसे ब्राडकास्ट करूं ... कमांड का उपयोग करके।

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

अब, मैं विभिन्न समय उदाहरणों पर विभिन्न ग्रंथों को जोड़ना चाहता हूं। इसे एक फ़ाइल से पढ़ा जाना चाहिए जिसमें प्रारूप प्रारूप है: उदाहरण के लिए

00:00:10: गूगल
00:00:20: याहू
00:00:30: एमएसएफटी
।
।
।
00:00:60: amzn
।
।
।
00:05:30: जावा

क्या फ़ाइल को पढ़ने और निर्दिष्ट समय पर टेक्स्ट जोड़ने का कोई तरीका है? आखिरकार, मैं इसे प्रसारित करने से पहले एक वीडियो में लाइव टिकर प्रतीक जोड़ना चाहूंगा।


निश्चित नहीं है कि "फ्लाई पर" ऐसा करने का कोई तरीका है, लेकिन यदि आप विभिन्न अंतरालों पर पाठ जोड़ना चाहते हैं, तो आप एक उपशीर्षक जैसे प्रारूप का उपयोग करके बेहतर हैं। सीधे और mkv कंटेनर कहने के लिए muxing। उदाहरण: ffmpeg -i infile -i subtitle.srt -scodec copy -acodec copy -vcodec copy outfile.mkv। Srt प्रारूप देखें।
राजिब

जवाबों:


1

से के स्रोत कोड drawtextफिल्टर (से libavfilter/vf_drawtext.cस्रोत पेड़ में), वहाँ एक प्रतीत होता है textfileपैरामीटर जो स्ट्रिंग वाली (के रूप में स्थापित करने के लिए विरोध आकर्षित करने के लिए एक फ़ाइल के लिए पथ निर्दिष्ट कर सकते हैं textअपने उदाहरण के रूप में पैरामीटर)। आप इसे एक फ़ाइलपथ के रूप में प्रयोग करना चाहते हैं textfile, और वीडियो आउटपुट को देखते हुए फ़ाइल को अपडेट कर सकते हैं।

फ़ाइल को अपडेट करने के लिए आपको समानांतर में चलने वाले एक अन्य प्रोग्राम / डेमॉन की भी आवश्यकता होगी (जिसमें केवल प्रदर्शित होने वाला वर्तमान पाठ होगा), लेकिन यह प्रोग्राम काफी तुच्छ होगा जिसे आप सिस्टम घड़ी के साथ सिंक्रनाइज़ कर सकते हैं।


वैकल्पिक रूप से, आप संशोधित कर सकते हैं drawtextएक विशेष वर्तमान timecode (जो के आधार पर स्ट्रिंग प्रदर्शित करने के लिए फिल्टर ही है FFmpeg फिल्टर करने के लिए उपलब्ध है)। हालांकि इसके लिए फ़िल्टर के सोर्स कोड को संशोधित करना और स्क्रैच से पुन: जमा करना होगा, यह समानांतर में चल रहे एक अलग प्रोग्राम / डेमॉन के उपयोग से भी बचना होगा (जब भी FFmpeg एक स्ट्रिंग खींचने का प्रयास करेगा)।

हालाँकि, textfileमानदंड काम करता है (पढ़ें: हर फ्रेम अपडेट किया गया है), जो कि शायद एक बेहतर तरीका होगा, क्योंकि टेक्स्ट फाइल को अपडेट करने के लिए एक साधारण डेमॉन को स्क्रिप्टिंग भाषा में पायथन की तरह लिखा जा सकता है।


बहुत बहुत धन्यवाद। मैंने विकल्प की कोशिश की ... लेकिन यह बहुत ज्यादा पाठ विकल्प की तरह व्यवहार करता है। और फ़ाइल एक ही बार में पढ़ी जा रही है (load_textfile () या लाइन 401 देखें)। अगर मुझे कोई बेहतर जवाब नहीं मिलता है, तो मैं ffmpeg को संशोधित करने की कोशिश करूंगा और देखूंगा कि यह काम करता है या नहीं।
user763410
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.