जवाबों:
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mp4
N/A
। नीचे सूचीबद्ध अन्य विधियाँ देखें।ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mkv
-skip_frame nokey
केवल मुख्य फ़्रेमों को गिनने का विकल्प जोड़ें ।यदि आपके पास नहीं है तो ffprobe
आप ffmpeg
इसके बजाय उपयोग कर सकते हैं :
ffmpeg -i input.mkv -map 0:v:0 -c copy -f null -
frame=
कंसोल आउटपुट के अंत के पास देखें ।-discard nokey
इनपुट विकल्प (पहले -i
) जोड़ें ।-ignore_editlist 1
इनपुट विकल्प के साथ MP4 / M4V / M4A / MOV संपादित सूची को अनदेखा करें । डिफ़ॉल्ट को संपादित सूची को अनदेखा नहीं करना है।
-v error
यह "जानकारी" आउटपुट (संस्करण जानकारी, आदि) को छुपाता है जो पार्सिंग को आसान बनाता है।
-count_frames
प्रति स्ट्रीम फ्रेम की संख्या की गणना करें और संबंधित स्ट्रीम सेक्शन में इसकी रिपोर्ट करें।
-select_streams v:0
केवल वीडियो स्ट्रीम का चयन करें।
-show_entries stream=nb_frames
या -show_entries stream=nb_read_frames
के लिए केवल प्रविष्टि दिखाएं nb_frames
या nb_read_frames
।
-of default=nokey=1:noprint_wrappers=1
आउटपुट प्रारूप (उर्फ "लेखक") को सेट करें default
, प्रत्येक फ़ील्ड की कुंजी ( nokey=1
) को प्रिंट न करें, और अनुभाग हेडर और फ़ूटर ( noprint_wrappers=1
) को प्रिंट न करें । इस तरह के छोटे विकल्प हैं -of csv=p=0
।
प्रसिद्ध mediainfo
उपकरण फ्रेम की संख्या को आउटपुट कर सकता है:
mediainfo --Output="Video;%FrameCount%" input.avi
MP4 / M4V / M4A फ़ाइलों के लिए।
MP4Box
gpac फ्रेम की संख्या दिखा सकता है:
MP4Box -info input.mp4
Media Info
विचाराधीन वीडियो स्ट्रीम के लिए आउटपुट में लाइन का संदर्भ लें :
Media Info: Language "Undetermined (und)" - Type "vide:avc1" - 2525 samples
इस उदाहरण में वीडियो स्ट्रीम में 2525 फ्रेम हैं।
MP4 / M4V / M4A / MOV फ़ाइलों के लिए।
boxdumper
एल लूट से एक सरल उपकरण है। यह बड़ी मात्रा में सूचना का उत्पादन करेगा। stsz
नमूना आकार बॉक्स अनुभाग के तहत sample_count
फ्रेम की संख्या के लिए देखें । इस उदाहरण में इनपुट में 1900 वीडियो फ्रेम हैं:
boxdumper input.mp4
...
[stsz: Sample Size Box]
position = 342641
size = 7620
version = 0
flags = 0x000000
sample_size = 0 (variable)
sample_count = 1900
stsz
परमाणु हो सकते हैं ।ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mkv
यूनिक्स में, यह आकर्षण की तरह काम करता है:
ffmpeg -i 00000.avi -vcodec copy -acodec copy -f null /dev/null 2>&1 | grep 'frame=' | cut -f 2 -d ' '
ffmpeg -i 00000.avi -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1
यही मैं करता हूं और यह मेरे लिए, और कई अन्य लोगों के लिए बहुत अच्छा काम करता है।) सबसे पहले, नीचे दिए गए स्निपेट में वीडियो की लंबाई ढूंढें:
Seems stream 0 codec frame rate differs from container frame rate: 5994.00
(5994/1) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/stu/Movies/District9.mov':
Duration: 00:02:32.20, start: 0.000000, bitrate: 9808 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1920x1056, 29.97tbr, 2997tbn, 5994tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, 2 channels, s16
Stream #0.2(eng): Data: tmcd / 0x64636D74
आपको Duration: hh:mm:ss.nn
स्रोत वीडियो क्लिप का आकार निर्धारित करने के लिए लगातार और सुरक्षित रूप से ढूंढने में सक्षम होना चाहिए । फिर, प्रत्येक अपडेट लाइन (सीआर, नो एलएफ) के लिए आप पाठ को वर्तमान समय के निशान के लिए पार्स कर सकते हैं:
frame= 84 fps= 18 q=10.0 size= 5kB time=1.68 bitrate= 26.1kbits/s
frame= 90 fps= 17 q=10.0 size= 6kB time=1.92 bitrate= 23.8kbits/s
frame= 94 fps= 16 q=10.0 size= 232kB time=2.08 bitrate= 913.0kbits/s
बस इन स्टेटस लाइन्स से परफेक्ट आउटपुट की उम्मीद न करना ही बेमानी है। वे यहाँ जैसे त्रुटि संदेश शामिल कर सकते हैं:
frame= 24 fps= 24 q=-1.0 size= 0kB time=1.42 bitrate= 0.3kbits/s
frame= 41 fps= 26 q=-1.0 size= 0kB time=2.41 bitrate= 0.2kbits/s
[h264 @ 0x1013000]Cannot parallelize deblocking type 1, decoding such frames in
sequential order
frame= 49 fps= 24 q=26.0 size= 4kB time=0.28 bitrate= 118.1kbits/s
frame= 56 fps= 22 q=23.0 size= 4kB time=0.56 bitrate= 62.9kbits/s
एक बार जब आपके पास समय हो, तो यह सरल गणित है time / durration * 100 = % done
:।
TimeSpan
उससे एक बना हूं , फिर उपयोग करें currentDurationTimeSpan.Ticks / (totalDurationTimeSpan.Ticks / 100)
।
सभी प्रारूप अपनी फ़्रेम गणना या कुल अवधि को संग्रहीत नहीं करते हैं - और यहां तक कि अगर वे करते हैं, तो फ़ाइल अधूरी हो सकती है - इसलिए ffmpeg डिफ़ॉल्ट रूप से उनमें से किसी का भी सटीक रूप से पता नहीं लगाता है।
इसके बजाय, फ़ाइल को समाप्त करने और समय पढ़ने की कोशिश करें, फिर जाते समय वर्तमान समय की गणना करें।
वैकल्पिक रूप से, आप कोशिश कर सकते हैं AVFormatContext->nb_index_entries
या पता चला अवधि, जो कम से कम undamaged AVI / MOV, या लाइब्रेरी FFMS2 पर काम करना चाहिए, जो शायद एक प्रगति पट्टी के लिए परेशान करने के लिए बहुत धीमी है।
आप ffprobe
निम्न कमांड के साथ फ्रेम नंबर प्राप्त करने के लिए उपयोग कर सकते हैं
ffprobe.exe -i video_name -print_format json -loglevel fatal -show_streams -count_frames -select_streams v
जो json
प्रारूप में डेटा प्रिंट करना बताता है
select_streams v
ffprobe
हमें केवल video
स्ट्रीम डेटा देने के लिए कहेंगे और यदि आप इसे हटाते हैं, तो यह आपको audio
जानकारी भी देगा
और आउटपुट जैसा होगा
{
"streams": [
{
"index": 0,
"codec_name": "mpeg4",
"codec_long_name": "MPEG-4 part 2",
"profile": "Simple Profile",
"codec_type": "video",
"codec_time_base": "1/25",
"codec_tag_string": "mp4v",
"codec_tag": "0x7634706d",
"width": 640,
"height": 480,
"coded_width": 640,
"coded_height": 480,
"has_b_frames": 1,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "4:3",
"pix_fmt": "yuv420p",
"level": 1,
"chroma_location": "left",
"refs": 1,
"quarter_sample": "0",
"divx_packed": "0",
"r_frame_rate": "10/1",
"avg_frame_rate": "10/1",
"time_base": "1/3000",
"start_pts": 0,
"start_time": "0:00:00.000000",
"duration_ts": 256500,
"duration": "0:01:25.500000",
"bit_rate": "261.816000 Kbit/s",
"nb_frames": "855",
"nb_read_frames": "855",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0
},
"tags": {
"creation_time": "2005-10-17 22:54:33",
"language": "eng",
"handler_name": "Apple Video Media Handler",
"encoder": "3ivx D4 4.5.1"
}
}
]
}
2. आप उपयोग कर सकते हैं
ffprobe -v error -show_format -show_streams video_name
जो आपको स्ट्रीम डेटा देगा, यदि आप फ्रेम दर जैसी चयनित जानकारी चाहते हैं, तो निम्न कमांड का उपयोग करें
ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 video_name
जो आपके वीडियो की जानकारी के आधार पर एक नंबर देता है, समस्या यह है कि जब आप इस पद्धति का उपयोग करते हैं, तो संभव है कि आपको N/A
आउटपुट मिल जाए ।
अधिक जानकारी के लिए इस पृष्ठ FFProbe टिप्स की जाँच करें
इसे इस्तेमाल करे:
ffmpeg -i "path to file" -f null /dev/null 2>&1 | grep 'frame=' | cut -f 2 -d ' '
*.ts
। आउटपुट एक खाली लाइन है।
चूँकि मेरी टिप्पणी में कुछ बदलाव आया है, मुझे लगा कि मैं इसे एक उत्तर के रूप में छोड़ दूंगा:
ffmpeg -i 00000.avi -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1
यह तेजी से होना चाहिए, क्योंकि कोई एन्कोडिंग प्रदर्शन नहीं किया जा रहा है। ffmpeg
बस फ़ाइल को डिमोक्स करेंगे और जितनी जल्दी हो सके पहली वीडियो स्ट्रीम पढ़ें (डीकोड) करें। पहला grep
कमांड फ़्रेम को दिखाने वाले टेक्स्ट को पकड़ लेगा। दूसरा grep
कमांड उस से सिर्फ संख्या को लेगा। tail
आदेश सिर्फ अंतिम पंक्ति (अंतिम फ्रेम गिनती) दिखाई देगा।
स्टु के जवाब पर निर्माण करने के लिए। यहाँ मैं अपने मोबाइल फोन से वीडियो के लिए फ्रेम दर कैसे पाया। मैंने थोड़ी देर के लिए निम्न आदेश चलाया। इससे पहले कि मैं अधीर और मारा ^ C: फ्रेम की गिनती लगभग ~ 10,000 तक हो जाए
$ ffmpeg -i 2013-07-07\ 12.00.59.mp4 -f null /dev/null 2>&1
...
Press [q] to stop, [?] for help
[null @ 0x7fcc80836000] Encoder did not produce proper pts, making some up.
frame= 7989 fps= 92 q=0.0 Lsize=N/A time=00:04:26.30 bitrate=N/A dup=10 drop=0
video:749kB audio:49828kB subtitle:0 global headers:0kB muxing overhead -100.000042%
Received signal 2: terminating.
$
फिर, मैंने उस पंक्ति से दो सूचनाओं को पकड़ा, जो "फ्रेम =" से शुरू होती है, फ्रेम की गिनती, 7989, और समय, 00: 04: 26.30। आपको पहले समय को सेकंड में बदलने की आवश्यकता है और फिर "फ़्रेम प्रति सेकंड" प्राप्त करने के लिए फ़्रेम की संख्या को सेकंड से विभाजित करें। "फ्रेम प्रति सेकंड" आपकी फ्रेम दर है।
$ bc -l
0*60*60 + 4*60 + 26.3
266.3
7989/(4*60+26.3)
30.00000000000000000000
$
मेरे वीडियो के लिए framerate 30 एफपीएस है।
केवल सटीक मैं यह करने में सक्षम है निम्नलिखित है:
ffprobe -i my_video.mp4 -show_frames 2>&1|grep -c '^\[FRAME'
यह सुनिश्चित करने के लिए कि यह वीडियो के साथ काम करता है:
ffprobe -i my_video.mp4 -show_frames 2>&1 | grep -c media_type=video
ffprobe -i my_video.mp4 -show_frames 2>&1 | grep -c media_type=video
नेक्रो उत्तर के लिए क्षमा करें, लेकिन शायद इसकी आवश्यकता होगी (जैसा कि मैंने हाल ही में ffmpeg रिलीज़ के लिए समाधान नहीं पाया है।
Ffmpeg 3.3.4 के साथ मैंने पाया कि एक को निम्नलिखित के साथ मिल सकता है:
ffprobe -i video.mp4 -show_streams -hide_banner | grep "nb_frames"
अंत में यह आउटपुट फ्रेम काउंट करेगा। इसने मेरे लिए ऑडियो वाले वीडियो पर काम किया। यह दो बार "nb_frames" लाइन देता है, हालांकि, पहली पंक्ति मैं द्वारा परीक्षण किए गए वीडियो पर वास्तविक फ्रेम काउंट था।
मैं php_ffmpeg का उपयोग करता हूं फिर मैं एक फिल्म के सभी समय और सभी फ्रेम प्राप्त कर सकता हूं। बेलो के रूप में
$input_file='/home/strone/workspace/play/CI/abc.rmvb';
$ffmpegObj = new ffmpeg_movie($input_file);
echo $ffmpegObj->getDuration();
echo $ffmpegObj->getFrameCount();
और फिर विस्तार पृष्ठ पर है।
Cmd ->
ffprobe.exe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration -of default=nw=1 "d:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4"
Result ->
r_frame_rate=24000/1001
duration=8177.794625
Calculation ->
Frames=24000/1001*8177.794625=196071
Proof ->
ffmpeg -i "d:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4" -f null /dev/null
ffmpeg version N-92938-g0aaaca25e0-ffmpeg-windows-pacman Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.0 (GCC)
configuration: --pkg-config=pkg-config --pkg-config-flags=--static --extra-version=ffmpeg-windows-pacman --enable-version3 --disable-debug --disable-w32threads --arch=x86_64 --target-os=mingw32 --cross-prefix=/opt/sandbox/cross_compilers/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --enable-libcaca --enable-gray --enable-libtesseract --enable-fontconfig --enable-gmp --enable-gnutls --enable-libass --enable-libbluray --enable-libbs2b --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libzimg --enable-libzvbi --enable-libmysofa --enable-libaom --enable-libopenjpeg --enable-libopenh264 --enable-liblensfun --enable-nvenc --enable-nvdec --extra-libs=-lm --extra-libs=-lpthread --extra-cflags=-DLIBTWOLAME_STATIC --extra-cflags=-DMODPLUG_STATIC --extra-cflags=-DCACA_STATIC --enable-amf --enable-libmfx --enable-gpl --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-librubberband --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxavs --enable-avresample --extra-cflags='-march=core2' --extra-cflags=-O2 --enable-static --disable-shared --prefix=/opt/sandbox/cross_compilers/mingw-w64-x86_64/x86_64-w64-mingw32 --enable-nonfree --enable-decklink --enable-libfdk-aac
libavutil 56. 25.100 / 56. 25.100
libavcodec 58. 43.100 / 58. 43.100
libavformat 58. 25.100 / 58. 25.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 47.100 / 7. 47.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'd:\movies\The.Matrix.1999.1080p.BrRip.x264.YIFY.dut.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.25.100
Duration: 02:16:17.91, start: 0.000000, bitrate: 2497 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 2397 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 93 kb/s (default)
Metadata:
handler_name : GPAC ISO Audio Handler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to '/dev/null':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.25.100
Stream #0:0(und): Video: wrapped_avframe, yuv420p, 1920x800 [SAR 1:1 DAR 12:5], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc58.43.100 wrapped_avframe
Stream #0:1(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
Metadata:
handler_name : GPAC ISO Audio Handler
encoder : Lavc58.43.100 pcm_s16le
frame=196071 fps=331 q=-0.0 Lsize=N/A time=02:16:17.90 bitrate=N/A speed=13.8x
video:102631kB audio:1408772kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
linux
ffmpeg -i "/home/iorigins/Завантаження/123.mov" -f null /dev/null
माणिक
result = `ffmpeg -i #{path} -f null - 2>&1`
r = result.match("frame=([0-9]+)")
p r[1]