2012-04-17 13 views
16

ठीक है। वास्तव में मुझे ज्यादातर एमपी 4 प्रारूप की आवश्यकता है। लेकिन अगर अन्य प्रकार के लिए भी संभव है तो यह अच्छा होगा। मुझे बस फाइल की अवधि पढ़ने की जरूरत है। मैं सी # 4.0 के साथ ऐसा कैसे कर सकता हूं? 13 minutes 12 secondsmp4, wmv, flv, mov videos से वीडियो अवधि कैसे प्राप्त करें

मैं 3 तृतीय पक्ष व्यय भी उपयोग कर सकते हैं:

तो बात मैं की जरूरत है इस वीडियो की तरह की तरह है। जैसे वे फाइल के बारे में जानकारी को टेक्स्ट फ़ाइल में सहेजते हैं। मैं उस पाठ फ़ाइल को पार्स कर सकता हूं।

धन्यवाद।

उत्तर

11

आप पुस्तकालय आवरण DirectShow.NET के माध्यम से, डायरेक्टशो एपीआई MediaDet वस्तु का उपयोग कर सकते हैं। कोड नमूने के लिए Getting length of video देखें, get_StreamLength आपको सेकंड में अवधि देता है। यह मानता है कि विंडोज़ में एमपीईजी -4 डेमल्टीप्लेक्सर स्थापित है (7 से पहले विंडोज के साथ तीसरे पक्ष के घटकों की आवश्यकता है, मुझे विश्वास है कि यह अन्य answer by cezor पर लागू होता है, हालांकि घटकों को फिर से वितरित करने के लिए स्वतंत्र हैं)।

+0

यह डायरेक्टशॉट एपीआई कहां है? क्या आप मुझे इस तीसरे हिस्से का यूआरएल भी दे सकते हैं? या क्या आपका मतलब है कि लाइट मेगा कोडेक पैक? – MonsterMMORPG

+0

ठीक है एक फ़ाइल की कोशिश की और यह अवधि दिखाता है नैन: डी – MonsterMMORPG

+0

धन्यवाद यह लाइन सेकंड के रूप में सही अवधि देता है: mediaDet.get_StreamLength (आउट मीडिया लम्बाई); – MonsterMMORPG

5

IMHO आप MediaInfo जो आप मीडिया फ़ाइलों के बारे में जानकारी का एक बहुत कुछ देता है इस्तेमाल कर सकते हैं।
इसके लिए एक सीएलआई है ताकि आप इसे अपने कोड से उपयोग कर सकें और आपको आवश्यक जानकारी प्राप्त कर सकें।
आप this link पर एक नज़र डाल सकते हैं।

+0

हैलो। मैं mediainfodll को संदर्भ के रूप में जोड़ने में सक्षम नहीं हूं। तुम जानते हो क्यों ? यहां त्रुटि संदेश: http://img707.imageshack.us/img707/8130/hataow.png – MonsterMMORPG

+0

@MonsterMMORPG: आपको पैराम के साथ एप्लिकेशन कॉल करना होगा और आउटपुट प्राप्त करना होगा, इसे अपने समाधान – Marco

2

मुझे लगता है कि आप FFMPEG लिए देख रहे हैं - http://www.ffmpeg-csharp.com/

वहाँ भी कर रहे हैं कुछ मुफ्त विकल्प है कि इस प्रश्न में उनके बारे में पढ़ सकते हैं - Using FFmpeg in .net?

FFMpeg.NET 
    FFMpeg-Sharp 
    FFLib.NET 

आप इस लिंक को देख सकते हैं http://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for-ffmpeg/

 public VideoFile GetVideoInfo(string inputPath) 
     { 
      VideoFile vf = null; 
      try 
      { 
       vf = new VideoFile(inputPath); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      GetVideoInfo(vf); 
      return vf; 
     } 
     public void GetVideoInfo(VideoFile input) 
     { 
      //set up the parameters for video info 
      string Params = string.Format("-i {0}", input.Path); 
      string output = RunProcess(Params); 
      input.RawInfo = output; 

      //get duration 
      Regex re = new Regex("[D|d]uration:.((\\d|:|\\.)*)"); 
      Match m = re.Match(input.RawInfo); 

      if (m.Success) 
      { 
       string duration = m.Groups[1].Value; 
       string[] timepieces = duration.Split(new char[] { ':', '.' }); 
       if (timepieces.Length == 4) 
       { 
        input.Duration = new TimeSpan(0, Convert.ToInt16(timepieces[0]), Convert.ToInt16(timepieces[1]), Convert.ToInt16(timepieces[2]), Convert.ToInt16(timepieces[3])); 
       } 
      } 
     } 
012 - ffmpeg का उपयोग कर और अवधि को खोजने का उदाहरण के लिए
+0

के अंदर संदर्भ के रूप में उपयोग नहीं कर सकता है यह एक है आवेदन करने के लिए भुगतान करें। वे केवल परीक्षण प्रदान करते हैं। यह मेरे लिए काम नहीं करेगा :( – MonsterMMORPG

+0

@MonsterMMORPG मेरे संपादन को देखो .. –

+0

धन्यवाद लेकिन जैसा कि मैंने कहा है कि वे केवल परीक्षण प्रदान करते हैं। – MonsterMMORPG

9

तुम भी, विंडोज मीडिया प्लेयर इस्तेमाल कर सकते हैं, हालांकि यह alle फ़ाइल प्रकारों का समर्थन नहीं करते आप का अनुरोध किया

using WMPLib; 

public Double Duration(String file) 
    { 
     WindowsMediaPlayer wmp = new WindowsMediaPlayerClass(); 
     IWMPMedia mediainfo = wmp.newMedia(file); 
     return mediainfo.duration; 
    } 
} 
+0

धन्यवाद लेकिन एप्लिकेशन विंडोज सर्वर 2008 पर काम करेगा। मुझे लगता है कि उनके पास विंडोज मीडिया प्लेयर नहीं है – MonsterMMORPG

+0

@MonsterMMORPG ऐसा लगता है कि आप सही हैं http://stackoverflow.com/a/13929540/188926 – Dunc

2

FFmpeg परियोजना एक नामक यह उपकरण, ffprobe जो आप जानकारी आप अपनी मल्टीमीडिया फ़ाइलों के बारे में है और एक अच्छी तरह से स्वरूपित JSON में जानकारी ouput की जरूरत है प्रदान कर सकता है।

उदाहरण के लिए this answer पर एक नज़र डालें।

7

This answer शैल 32 के लिए पी/Invoke के बारे में मुझे सामान्य Windows Vista/7/2008/2008R2 API तक पहुंचने के लिए Windows API Code Pack की याद दिला दी।

यह बहुत आसान था शामिल नमूनों में PropertyEdit डेमो का उपयोग कर, Shell32 एपीआई यह पता लगाने की अवधि की तरह, विभिन्न मीडिया फ़ाइल गुण प्राप्त करने के।

मुझे लगता है एक ही शर्त उचित demultiplexers स्थापित होने के लिए लागू होता है, लेकिन यह काफी सरल था, क्योंकि यह केवल Microsoft.WindowsAPICodePack.dll और Microsoft.WindowsAPICodePack.Shell.dll के लिए संदर्भ जोड़ने और निम्नलिखित कोड की आवश्यकता:

using Microsoft.WindowsAPICodePack.Shell; 
using Microsoft.WindowsAPICodePack.Shell.PropertySystem; 

using (ShellPropertyCollection properties = new ShellPropertyCollection(filePath)) 
{ 
    foreach (IShellProperty prop in properties) 
    { 
     string value = (prop.ValueAsObject == null) ? "" : prop.FormatForDisplay(PropertyDescriptionFormatOptions.None); 
     Console.WriteLine("{0} = {1}", prop.CanonicalName, value); 
    } 
} 

using (ShellObject shell = ShellObject.FromParsingName(filePath)) 
{ 
    // alternatively: shell.Properties.GetProperty("System.Media.Duration"); 
    IShellProperty prop = shell.Properties.System.Media.Duration; 
    // Duration will be formatted as 00:44:08 
    string duration = prop.FormatForDisplay(PropertyDescriptionFormatOptions.None); 
} 

एक के लिए कुछ सामान्य गुण एमपीईजी -4/AAC ऑडियो मीडिया फ़ाइल:

System.Audio.Format = {00001610-0000-0010-8000-00AA00389B71} 
System.Media.Duration = 00:44:08 
System.Audio.EncodingBitrate = ?56kbps 
System.Audio.SampleRate = ?32 kHz 
System.Audio.SampleSize = ?16 bit 
System.Audio.ChannelCount = 2 (stereo) 
System.Audio.StreamNumber = 1 
System.DRM.IsProtected = No 
System.KindText = Music 
System.Kind = Music 
+0

बहुत साफ है, लेकिन अवधि संकल्प सेकंड है - मुझे भी भिन्नता की आवश्यकता है। इस कोशिश करने वाले किसी के लिए ध्यान दें, आपको Windows7APICodePack-Core/शैल में NuGet संदर्भ जोड़ना होगा।इस जवाब के लिए –

+0

बड़ा धन्यवाद !!! –

+0

इसे प्यार करें :) मैं इस बिंदु पर कोडपैक के बारे में सब कुछ हूं। ध्यान दें कि संपत्ति के लिए कच्चे मूल्य विशेष रूप से 10^-7 सेकंड होते हैं ... मुझे नहीं पता कि वास्तव में सभी फ़ाइल प्रकारों के लिए यह विवरण वास्तव में प्रदान किया गया है, लेकिन आप इसकी तलाश कर सकते हैं। कच्चा मूल्य संपत्ति में है "। ValueAsObject" और यह एक सामान्य वस्तु से बाहर निकलने की जरूरत है। मैं इसे जोड़ने का प्रयास करने के लिए उत्तर संपादित कर दूंगा। –

1

मैं NReco.VideoInfo library पाया सबसे अच्छा विकल्प है और अब तक अधिक आयु वालों में से कुछ से अधिक आसान हो सकता है। यह पुस्तकालय फ़ाइल पथ देने के रूप में एक सरल है और यह मेटाडाटा बाहर थूक:

var ffProbe = new FFProbe(); 
var videoInfo = ffProbe.GetMediaInfo(blob.Uri.AbsoluteUri); 
return videoInfo.Duration.TotalMilliseconds; 
1

भी विंडोज मीडिया प्लेयर घटक का उपयोग करना, हम वीडियो की अवधि मिल सकती है।
निम्नलिखित कोड का टुकड़ा तुम लोगों की मदद कर सकते:

using WMPLib; 
// ... 
var player = new WindowsMediaPlayer(); 
var clip = player.newMedia(filePath); 
Console.WriteLine(TimeSpan.FromSeconds(clip.duration)); 

और भूल जाओ जो System32 फ़ोल्डर में उपस्थित रहेंगे wmp.dll के संदर्भ जोड़ने के लिए नहीं है।

0
StreamReader errorreader; 
string InterviewID = txtToolsInterviewID.Text; 

Process ffmpeg = new Process(); 

ffmpeg.StartInfo.UseShellExecute = false; 
ffmpeg.StartInfo.ErrorDialog = false; 
ffmpeg.StartInfo.RedirectStandardError = true; 

ffmpeg.StartInfo.FileName = Server.MapPath("ffmpeg.exe"); 
ffmpeg.StartInfo.Arguments = "-i " + Server.MapPath("videos") + "\\226.flv"; 


ffmpeg.Start(); 

errorreader = ffmpeg.StandardError; 

ffmpeg.WaitForExit(); 

string result = errorreader.ReadToEnd(); 

string duration = result.Substring(result.IndexOf("Duration: ") + ("Duration: ").Length, ("00:00:00.00").Length); 
संबंधित मुद्दे