मैत्रीपूर्ण तरीके से ffmpeg की जानकारी प्राप्त करें


108

जब भी मैं ffmpeg के साथ अपने वीडियो फ़ाइलों के बारे में कुछ जानकारी प्राप्त करने की कोशिश करता हूं, तो यह बहुत सारी बेकार सूचनाओं को अच्छी चीजों के साथ मिला देती है।

मैं उपयोग कर रहा हूं ffmpeg -i name_of_the_video.mpg

वहाँ एक दोस्ताना तरीके से पाने के लिए कोई संभावनाएं हैं? मेरा मतलब है कि JSON महान होगा (और यहां तक ​​कि बदसूरत XML ठीक है)।

अब तक, मैंने अपने आवेदन को रेगेक्स के साथ डेटा पार्स कर दिया था, लेकिन कई विशिष्ट कोने हैं जो कुछ विशिष्ट वीडियो फ़ाइलों पर दिखाई देते हैं। मैंने वह सब तय किया जिसका मैंने सामना किया, लेकिन और भी कुछ हो सकता है।

मुझे कुछ ऐसा चाहिए था:

{
  "Stream 0": {
     "type": "Video",
     "codec": "h264",
     "resolution": "720x480"
  },
  "Stream 1": {
     "type": "Audio",
     "bitrate": "128 kbps",
     "channels": 2
  }
}

3
क्या आपने ffprobe पर एक नज़र डाली है ? यह JSON पठनीय आउटपुट प्रदान करता है।
NT3RP

मैंने इसे पहले ही देख लिया है, लेकिन JSON आउटपुट प्रारूप
JBernardo

जवाबों:


292

थोड़ा देर से, लेकिन शायद अभी भी किसी के लिए प्रासंगिक ..

ffprobeवास्तव में जाने के लिए एक शानदार तरीका है। नोट, हालांकि, कि आपको बताने के लिए की जरूरत है ffprobeकि आप किस जानकारी यह प्रदर्शित करना चाहते हैं (साथ -show_format, -show_packetsऔर -show_streamsविकल्प) या यह सिर्फ आप खाली उत्पादन दे देंगे (जैसे आप अपनी टिप्पणी में से एक में उल्लेख)।

उदाहरण के लिए, ffprobe -v quiet -print_format json -show_format -show_streams somefile.asfनिम्नलिखित की तरह कुछ प्राप्त होगा:

{
  "streams": [{
    "index": 0,
    "codec_name": "wmv3",
    "codec_long_name": "Windows Media Video 9",
    "codec_type": "video",
    "codec_time_base": "1/1000",
    "codec_tag_string": "WMV3",
    "codec_tag": "0x33564d57",
    "width": 320,
    "height": 240,
    "has_b_frames": 0,
    "pix_fmt": "yuv420p",
    "level": -99,
    "r_frame_rate": "30000/1001",
    "avg_frame_rate": "0/0",
    "time_base": "1/1000",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "language": "eng"
    }
  }],
  "format": {
    "filename": "somefile.asf",
    "nb_streams": 1,
    "format_name": "asf",
    "format_long_name": "ASF format",
    "start_time": "0.000",
    "duration": "300.066",
    "tags": {
        "WMFSDKVersion": "10.00.00.3646",
        "WMFSDKNeeded": "0.0.0.0000",
        "IsVBR": "0"
    }
  }
}

1
अगर किसी को कभी ज़रूरत पड़े, तो मैंने उस जवाब के आधार पर एक PHP समाधान लिखा है: stackoverflow.com/questions/11805207/…
पाउलो फ्रीटास

इसे खोदने के लिए क्षमा करें, लेकिन क्या इसे गति देने का कोई मौका है? आउटपुट को प्रदर्शित करने में 5-6 सेकंड लगते हैं
मैनजिया

वह अंतिम वाक्य वही है जिसकी मुझे आवश्यकता थी। धन्यवाद :)
मैट फ्लेचर 16

5
लोग ... 4 साल पहले के एक उत्तर के लिए एक टिप्पणी में एक सवाल पूछ रहे हैं, जवाब पाने का लगभग शून्य मौका है ...
पैट्रिक

1
तुम भी उपयोग कर सकते हैं -of jsonके बजाय -print_format json। पूर्व संगत है avprobeजबकि बाद वाला नहीं।
चिह-हसन येन

15

अब इसके -progress -द्वारा प्रारूपित अनुकूल जानकारी प्रिंट करने के लिए उपयोग करना संभव है key=value

ffmpeg  -i video.mp4 .......-s 1920x1080 -progress - -y out.mp4

speed=5.75x
frame=697
fps=167.7
stream_0_0_q=39.0
bitrate=2337.0kbits/s
total_size=6979778
out_time_ms=23893333
out_time=00:00:23.893333
dup_frames=0
drop_frames=0

3
जानकार अच्छा लगा। मुझे आश्चर्य है कि डॉक्स में इसका उल्लेख क्यों नहीं किया गया है ।
दुवराई

यह अच्छा है! डॉक्स में "-प्रोग्रेस -" का उल्लेख नहीं किया गया है, क्योंकि "-" का अर्थ है इसे रोकने के लिए पाइप
क्रिस डब्ल्यू

13

आप कोशिश कर सकते हैं ffprobe। JSON आउटपुट प्राप्त करने के लिए सही कमांड निम्न की तरह दिखना चाहिए:

ffprobe ... -print_format json

2
मैं नवीनतम ffmpeg संकलित किया है, लेकिन कार्यक्रम के json उत्पादन केवल है {}। यह मेरे पास मौजूद वीडियो फ़ाइलों के साथ काम करने के लिए प्रतीत नहीं होता है ...
JBernardo

2
@JBernardo अरे, यदि कोई अन्य व्यक्ति इसमें भाग लेता है, तो आपको -प्रिंट_फॉर्मैट करना होगा, उसके बाद -of नहीं तो यह सिर्फ एक बहुत ही बेकार हो जाएगा {... यहां सामान्य प्रिंट आउटपुट ...}, a के लिए स्वीकृत उत्तर देखें उदाहरण कमांड लाइन
mgrandi

0

ffprobeजिसका एक और उपयोग अच्छी तरह से पारगम्य है:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,bit_rate,codec_name,duration -of csv=p=0:s=x video.mp4

का परिणाम:

h264x600x480x25/1x385.680000x542326

-select_streams v:0केवल वीडियो स्ट्रीम का चयन करता है। यदि आप उस पैरामीटर को हटाते हैं तो आपको प्रत्येक स्ट्रीम के लिए एक लाइन मिलती है।

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