H.264 প্রবাহ থেকে এখনও ক্যাপচার ffmpeg


7

আমি ffmpeg ব্যবহার করে একটি H.264 বেতার আইপি ক্যামেরা থেকে এখনও ছবিগুলিকে ক্যাপচার করার চেষ্টা করছি। আমি এখানে একটি অনুরূপ প্রশ্ন পাওয়া যায়: আমি ffmpeg সহ একটি H264 ভিডিও ফাইল থেকে একটি ভাল মানের JPEG চিত্রটি কীভাবে বের করতে পারি?

ffmpeg -y -i rtsp://10.2.69.201:554/ch0_0.h264 -r 10 -f image2 /var/www/camera.jpg

আমি যেমন উদাহরণ দেখানো হিসাবে এটি বাস্তবায়িত করেছি। আপনি এখানে যে ছবিটি পেয়েছেন তার একটি নমুনা দেখতে পারেন:

মূলত সমস্যা ইমেজ নীচের অংশ সবসময় blocky হয়। যদি আকাশের আরো বিস্তারিত এবং মেঘ থাকে তবে চিত্রটির সমগ্র অর্ধেকটি ব্লক বা ব্লুরি হতে পারে।

আমার ক্যামেরা সীমিত অপশন সীমিত আছে। যার মধ্যে একটি আই-ফ্রেম ব্যবধান, আপনি এটি 25-100 এর মধ্যে পরিবর্তিত করতে পারেন।

আমি কিভাবে একটি ভাল ইমেজ পেতে পারেন সম্পর্কে কিছু পরামর্শ আছে? আমি ভিডিও ভিডিওতে স্ট্রীমটি সঞ্চয় করতে পারলে এবং প্রতি 2 মিনিটে এখনও এটি সরিয়ে ফেলতে পারতাম না। যে কিছু সহজে সম্পন্ন করা হয়?

এখানে ffmpeg আউটপুট:

ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers
built on Oct  3 2013 07:36:02 with gcc 4.8 (Debian 4.8.1-10)
configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/i386-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --disab  libavutil      52. 18.100 / 52. 18.100
libavcodec     54. 92.100 / 54. 92.100
libavformat    54. 63.104 / 54. 63.104
libavdevice    54.  3.103 / 54.  3.103
libavfilter     3. 42.103 /  3. 42.103
libswscale      2.  2.100 /  2.  2.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  2.100 / 52.  2.100
[h264 @ 0x867ed80] RTP: missed 1 packets
    Last message repeated 1 times
[h264 @ 0x867ed80] mb_type 34 in I slice too large at 17 18
[h264 @ 0x867ed80] error while decoding MB 17 18
[h264 @ 0x867ed80] concealing 5732 DC, 5732 AC, 5732 MV errors in I frame
[h264 @ 0x867ed80] RTP: missed 1 packets
Last message repeated 14 times
[rtsp @ 0x867c640] Stream #1: not enough frames to estimate rate; consider increasing probesize
[rtsp @ 0x867c640] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for  Input Stream #0.1 : mono
Input #0, rtsp, from 'rtsp://10.2.69.201:554/ch0_0.h264':
 Metadata:
title           : H.264 Program Stream, streamed by the LIVE555 Media Server
comment         : ch0_0.h264
 Duration: N/A, start: 0.065833, bitrate: 64 kb/s
Stream #0:0: Video: h264 (Constrained Baseline), yuv420p, 1600x1200, 15.19 tbr, 90k tbn, 180k tbc
Stream #0:1: Audio: pcm_alaw, 8000 Hz, mono, s16, 64 kb/s 
Output #0, image2, to '/var/www/camera.jpg':
Metadata:
title           : H.264 Program Stream, streamed by the LIVE555 Media Server
comment         : ch0_0.h264
encoder         : Lavf54.63.104
Stream #0:0: Video: mjpeg, yuvj420p, 1600x1200, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mjpeg)
Press [q] to stop, [?] for help
[h264 @ 0x8793260] mb_type 34 in I slice too large at 17 18
[h264 @ 0x8793260] error while decoding MB 17 18
[h264 @ 0x8793260] concealing 5732 DC, 5732 AC, 5732 MV errors in I frame 
[image2 @ 0x86d1640] Could not get frame filename number 2 from pattern '/var/www/camera.jpg' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument

উত্তর:


11

সমস্যা, আপনার আউটপুট ইঙ্গিত হিসাবে, আপনি RTP প্যাকেট অনুপস্থিত এবং সেইজন্য ভিডিওর অত্যাবশ্যক অংশ। আপনার কমান্ড দিয়ে, ffmpeg ঠিক এক চিত্র আউটপুট করবে - যত তাড়াতাড়ি এটি প্রথম ফ্রেমের শেষটি দেখবে - কিন্তু কিছু তথ্য অনুপস্থিত ছিল। সুতরাং এটি ম্যাক্রোব্লক্সগুলির ত্রুটি গোপন করার চেষ্টা করে, তবে এটি ইতিমধ্যেই ডিকোড করা চিত্রটির অংশগুলি অনুলিপি করেই করতে পারে, যা আপনি এখানে দেখছেন এমন কৃত্রিম জিনিসগুলির দিকে নিয়ে যায়।

FFmpeg উইকি একটি উদাহরণ আছে কিভাবে একটি থাম্বনেইল তৈরি করতে এক্স সেকেন্ড :

ffmpeg -i rtsp://10.2.69.201:554/ch0_0.h264 -f image2 -vf fps=fps=1/120 img%03d.jpg

আপনি, অবশ্যই একটি ফাইল স্ট্রিম সংরক্ষণ করার চেষ্টা করতে পারে। এই ক্ষেত্রে, এটি 120 সেকেন্ডের পরে বন্ধ হবে:

ffmpeg -i rtsp://10.2.69.201:554/ch0_0.h264 -c:v copy -t 120 stream.mp4

যদি আপনি করতে পারেন, চেষ্টা করুন একটি সাম্প্রতিক স্ট্যাটিক বিল্ড ডাউনলোড বা কম্পাইল , কারণ আপনার ffmpeg একটু পুরানো এবং আপনি যদি ইতিমধ্যে কোনও বাগ জুড়ে না থাকেন তবে আপনি কখনই তা জানবেন না।


1
তার জন্য ধন্যবাদ. এটা স্ট্রিম রেকর্ড এবং পাশাপাশি এখনও প্রতিটি এক্স সেকেন্ড আউটপুট সম্ভব?
David Findlay

1
হ্যাঁ, এটা বেশ সহজ। পরে -f image2 -vf … img%03d.jpg সহজভাবে অন্য আউটপুট যোগ করুন। মূলত এটা ffmpeg -i <input> <output-1 options> <output-1 file> <output-2 options> <output-2 file> …
slhck

5

দ্য RTP: missed 1 packets বার্তাটি আপনার সূত্র থেকে কিছু তথ্য অনুপস্থিত একটি সূত্র।

যোগ করার চেষ্টা করুন -rtsp_transport tcp আগে -y UDP পরিবর্তে টিসিপি ব্যবহার করার বিকল্প।


হ্যাঁ, যদি আপনি টিসিপি ব্যবহার করতে সক্ষম হন তবে এটি একটি দুর্দান্ত টিপ। এবং যদি আপনি কম বিলম্বিত এবং যথেষ্ট ব্যান্ডউইথ সঙ্গে একটি স্থিতিশীল লিঙ্ক আছে মানে আমি সক্ষম। আপনি যদিও কিছুটা বেশি স্ট্রিম বিলম্বিত অভিজ্ঞতা হতে পারে।
Yngve Sneen Lindal

3

হাই আমার আইপি ক্যামেরা থেকে আরটিএসপি প্রবাহের সাথে কিছুটা আগে একই সমস্যা ছিল। ffmpeg সংস্করণ 1.0 ২1 নভেম্বর ২01২ ২0:41:28 জিকেসি 4.4.6 (জিसीसी) 20120305 এ নির্মিত

নিচের অংশে ব্লুর অংশ হিসাবে আমার একই থাম্বনেইল ফলাফল ছিল।

আমি ব্যবহৃত কমান্ড ছিল:

ffmpeg -i {RTSP_SOURCE} -ss 00:00:01 -f image2 -vframes 1 thumb.jpg

আমার সমস্যাটি সমাধান করা হয়েছিল যখন আমি -ss প্যারামিটারে মিলিসেকেন্ড অংশটি সম্পন্ন করেছি:

ffmpeg -i {RTSP_SOURCE} -ss 00:00:01.500 -f image2 -vframes 1 thumb.jpg

আমি অফিসিয়াল FFMPEG ডকুমেন্টেশনের একটি উদাহরণে এটি পাওয়া যায় এবং এটি আমার ক্ষেত্রে কাজ করে।

https://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video


আমার দিকে ইস্যুটি সিপিইউ ছিল যা ফ্রেম এনকোডিং ছিল ওভারলোড করা হয়েছিল, একটি পিএনজি তৈরি করেছিল এবং তারপর দ্বিতীয় ধাপ হিসাবে জেপিজি তে রূপান্তর করেছিল।
user230910
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.