C# Video Üzerine Yazı Yazma
-
Geliştirmekte olduğum bir yazılım var, c# windows forms application olarak amacı karşı tarafın bilgisayarına kurduğumda kişinin ekranda ne yapıyor ne ediyor diye ekran görüntüsünü .wmv, .avi formatlarınıda destekler biçimde ister standart olarak kaydetme ister sıkıştırıp kaydetme olanağı tanıyan bir program.
ScreenCaptureVideoProfile.Quality ayarlaması
ScreenCaptureVideoProfile.FrameRate ayarlaması ile uğraşıyorum sistemin temelinde bu gibi kodlarım yatmakta (merak edenler için)
using Microsoft.Expression.Encoder;
using Microsoft.Expression.Encoder.ScreenCapture;
using Microsoft.Expression.Encoder.Live;
gibi kütüphaneler ile çalışıyorum geliştirdiğim yazılımın başka spesifik özellikleride mevcut detaya girmeyeceğim
Müridler esas mesele sizlerin görüşene başvurmamın nedeni gayet güzel kaydetmiş olduğum videonun içine bir de Label olarak yazı eklemek istiyorum video kaydedilirken, ne tür parametreler geçirebilirim nasıl bir class yazmalıyım ne gibi eventlere/triggerlara ihtiyacım olacak bilemedim o labeli o videonun içine nasıl gömerim program kullanıcının ekranında yaptıklarını kayıt altına alması esnasında, video kaydetmeye başladığı esnada (record butonuna basıldığı anda) ? Bu olayı tarih için istiyorum videonun sağ alt köşedinde tarih yazdırıp ona göre arşivleme yapacağım.
Ciddi anlamda .net teknolojilerine hakim olup c# bilenlerin yanı sıra tüm müritlerden fikir almak isterim. İngilizce dahil olmak üzere kaynaklardan araştırdım fakat elle tutulur birşey bulamadım.
Şimdiden teşekkürler.
-
işine yararsa watermark özelliği var,
http://stackoverflow.com/questions/3359789/video-capturing-uploading-processing-streaming-back-net-c-sharp
SharpShooter tarafından 20/Eyl/12 13:41 tarihinde düzenlenmiştir -
bu konudaki en kapsamlı yazılım directshow .net in librarysi dir http://directshownet.sourceforge.net/
-
inceliyorum Sharp, eyvallah
-
Sharp, senin önerdiğin watermarking olayı bana uymuyor çünkü orda
"Adding the image we want to use as a watermark to the second track (we use a gif image with a transparent background)"
şeklinde yapıyor yani gif olarak hazırlayıp gömmüş ben tarih girceğim için otomatik bilgisayarın tarihini alıp videonun içine gömen bir sistem olsun istiyorum, oda olmadı en kötü kodlama ile tek tek videoların içine gömerim o günün tarihi neyse manual olarak, yeterki bir yol yöntem bulabileyim örnek hiçbirşey bulamadım ScreenCaptureJob, videoprofillerinin içinde kayboldum; onun için watermarking olayı yattı. Bu tip videonun içine birşeyler işleme ile ilgili daha önce herhangi bir tecrübem yok özel sektörde asp.net, c# ile web applicationlar geliştiren bir firmada çalışıyorum, kendimi bu işin içinde buldum.
-
hocam programı tamamladığında paylaşcanmı, pazarlıyacanmı ?
-
programı tamamladığımda kendime keylogger yapacağım :) , çalıştığım şirket başka maksat ile kullanacak ; program hazır sadece bu dediğim özelliğin tarihin video üstüne eklenmesi ve birkaç özellik daha kodluyorum şu an, iki farklı versiyonunu yazdım 1. cisinde resim olarak işleyip ard arda resimleri getiriyor kendine göre artıları eksileri olduğu için 2.versiyonunda direk .avi , .wmv, . mpeg olarak kaydediyorum istediğim bir klasöre sonra o klasöre kaydedilmiş bilgisayarda olan biten ekran görüntüsü videosunu otomatik klasörde gizleme kodunu yazıcam, 1 dakika ekran görüntüsünü kaydeden videonun kapladığı alan şu an 127 kb çift sıkıştırma işlemi yapılarak ekran görüntü kalitesi düşük ama okunabilcek düzeyde, aynı şekilde bu yazdığım programın mantığında external disklerde film arşiviniz var ise 500 gb 1tb nız dolu komple diyelim benim program onları süzgeçten geçircek 500 gb film kalitelerinin biraz düşmesini göz önüne aldığın taktirde rahat 370 gb lara kadar geriler...
1.versiyonumun iskelet kodları aşağıdaki gibi, güzelde bir user-interface zamanım olduğu müddetçe yapıcam
namespace KullaniciEkranKaydiAlma
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 25;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void button3_Click(object sender, EventArgs e)
{
timer2.Enabled = true;
timer2.Interval = 25;
}
int resimNo;
private void timer1_Tick_1(object sender, EventArgs e)
{
Bitmap ekran = new Bitmap(1024, 768, PixelFormat.Format24bppRgb);
Rectangle ekranParcasi = Screen.AllScreens[0].Bounds;
Graphics grafik = Graphics.FromImage(ekran);
grafik.CopyFromScreen(ekranParcasi.Left, ekranParcasi.Top, 0, 0, ekranParcasi.Size);
ekran.Save(@"x:\ekran\resim" + resimNo + ".jpg", ImageFormat.Jpeg);
resimNo++;
}
int resimNo2;
private void timer2_Tick(object sender, EventArgs e)
{
try
{
pictureBox1.Image = Image.FromFile(@"x:\ekran\resim" + resimNo2 + ".jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
resimNo2++;
}
catch
{
timer2.Enabled = false;
MessageBox.Show("KAYIT KAYDETME TAMAMLANDI!");
}
}
private void pictureBox1_Click(object sender, EventArgs e){}
private void Form1_Load(object sender, EventArgs e){}
{
}
}
}
-
unbalanced hocam, dediğin library'yi inceledim baya spesifik şeyleri kapsıyor bir tarafından tutulabilir eyvallah
-
aslında şu anda kullanmış olduğum using Microsoft.Expression.Encoder; kütüphanesinin böyle bir özelliği olsa çok işime yarayacak fakat araştırmalarım dahilinde rastlayabilmiş değilim veya Expression blend aynı şekilde nasıl kullanılabilir acaba...
-
2. versiyonu paylaşabilirsen yardımcı olmaya çalışalım,
araştırdğım kadarıyla yapan eden yok
-
amacın sadece bir bitmap e yazı yazdırmaksa şu şekilde yapabilirsin.. ortada ses olmadığı için kolay yazıyı eklemek.
private void timer1_Tick_1(object sender, EventArgs e) { Bitmap ekran = new Bitmap(1024, 768, PixelFormat.Format24bppRgb); Rectangle ekranParcasi = Screen.AllScreens[0].Bounds; Graphics grafik = Graphics.FromImage(ekran); grafik.DrawString("Deneme ....", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0)); grafik.CopyFromScreen(ekranParcasi.Left, ekranParcasi.Top, 0, 0, ekranParcasi.Size); ekran.Save(@"x:\ekran\resim" + resimNo + ".jpg", ImageFormat.Jpeg); resimNo++; }
sanırm grafik.drawstring işine yarar