আমি 0.1 fps এ লাইভ স্ট্রিম থেকে চিত্রগুলি দখল করতে livestreamerএবং ব্যবহার ffmpegকরতে যাচ্ছি :
livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=1/10 out%04d.png" https://www.ustream.tv/channel/number worst
আমি এর আউটপুট ওভাররাইট করতে ffmpeg পেতে পারি না, তাই এটি out%04d.pngপ্যাটার্ন দিয়ে নতুন ফাইল তৈরি করা চালিয়ে যায় । এটি ঠিক আছে, আমি সর্বাধিক নতুন আউট ফাইলের ট্র্যাক রাখতে এবং পুরানো ফাইলগুলি মুছতে পারি। যাইহোক, livestreamerপ্রক্রিয়াটি কখনও কখনও বিভিন্ন কারণে প্রস্থান করে এবং আমি যতক্ষণ না এটি চালাতে চাই তা স্বয়ংক্রিয়ভাবে পুনরায় চালু করতে চাই।
সাবস্কেল ব্যবহারের একটি প্রচেষ্টা সিটিআরএল-সি-তে যেমন প্রত্যাশা করেছিল তেমন প্রতিক্রিয়া দেখায়নি কারণ সাব-শেলের উপর সিগন্যালটি পাস করা হয়নি:
#!/bin/bash
( while true; do
livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=0.1 out%04d.png" https://www.ustream.tv/channel/number worst
done ) &
while true; do
newestImage=${code to find newest image}
postProcess $newestImage
deleteOldImages
sleep 5
done
আমি যখন SIGINTউপরের স্ক্রিপ্টে প্রেরণ করি তখন আমি যে শেলটি প্যারেন্ট স্ক্রিপ্ট শুরু করেছিলাম তা বন্ধ করার পরেও সাবশেলটি জীবিত থাকে। আউটপুট ডিরেক্টরিটি নতুন ফাইলগুলির সাথে প্লাবিত হয় যখন কোডগুলি যেগুলি মুছতে পারে সেগুলি আর চালিত হচ্ছে না। একটিও trapসাহায্য করেনি:
trap "kill $SUBSHELL_PID" SIGINT
( ... ) & # subshell as above
SUBSHELL_PID=&!
এটির সাথে আমি পিতামাতার স্ক্রিপ্টকে বাধা দিতেও সক্ষম হইনি। স্পষ্টতই, আমি আদৌ ব্যাশে সিগন্যাল হ্যান্ডলিংয়ের সাথে অভিজ্ঞ নই, তাই আমাকে যে পরামর্শ দেয় সে সম্পর্কে আমি খুশি। প্যারেন্ট স্ক্রিপ্টটি যতক্ষণ চলবে ততক্ষণ আমাকে ফ্রেম গ্র্যাবারটি পুনরায় চালু করতে হবে এবং পুরানো ফাইলগুলি মুছতে তাদের নজর রাখতে হবে।
সম্পাদনা করুন: সাবসেল প্রথম স্থানটিতে একটি খারাপ ধারণা হতে পারে? আমি কি কোনওভাবে livestreamerপটভূমিতে লঞ্চ করতে পারি এবং হয় আমি যখন চাই তখন এটি মেরে ফেলতে পারি, বা নিজে থেকে বের হয়ে গেলে পুনরায় চালু করতে পারি?