উত্তর:
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
ইনপুট বিকল্পের সাথে এমপি 4 / এম 4 ভি / এম 4 এ / এমওভি সম্পাদনা তালিকা উপেক্ষা করুন। ডিফল্ট হ'ল সম্পাদনা তালিকাকে অগ্রাহ্য করা নয় ।
-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
এমপি 4 / এম 4 ভি / এম 4 এ ফাইলগুলির জন্য।
MP4Box
জিপিএসি থেকে ফ্রেমের সংখ্যাটি প্রদর্শন করতে পারে:
MP4Box -info input.mp4
পড়ুন Media Info
প্রশ্ন ওঠা ভিডিওর স্ট্রিম জন্য আউটপুটে লাইন:
Media Info: Language "Undetermined (und)" - Type "vide:avc1" - 2525 samples
এই উদাহরণে ভিডিও স্ট্রিমের 2525 ফ্রেম রয়েছে।
এমপি 4 / এম 4 ভি / এম 4 এ / এমওভি ফাইলগুলির জন্য।
boxdumper
l-smash থেকে একটি সাধারণ সরঞ্জাম। এটি প্রচুর পরিমাণে তথ্য আউটপুট দেবে। 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
বা সনাক্তকৃত সময়কাল, যা অন্তত অবিকৃত এভিআই / এমওভি, বা লাইব্রেরি এফএফএমএস 2 নিয়ে কাজ করা উচিত, যা সম্ভবত অগ্রগতি বারের জন্য বিরক্ত হওয়া খুব ধীর।
আপনি 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
আউটপুট হিসাবে পেতে পারেন ।
আরও তথ্যের জন্য এই পৃষ্ঠাটি দেখুন এফএফপ্রোব টিপস
এটা চেষ্টা কর:
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
$
আমার ভিডিওর ফ্রেমরেট 30 fps।
আমি যে সঠিকভাবে এটি করতে সক্ষম হয়েছি তা হ'ল:
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" লাইন দেয়, তবে প্রথম লাইনটি আমি পরীক্ষিত ভিডিওগুলিতে প্রকৃত ফ্রেম গণনা ছিল।
আমি পিএইচপি_এফএমপিগ ব্যবহার করি তবে আমি চলচ্চিত্রের সমস্ত সময় এবং সমস্ত ফ্রেম পেতে পারি। নীচে হিসাবে
$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
লিনাক্স
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]