Vide oluşturma hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Vide oluşturma hk.

Mesaj gönderen Lost Soul »

S.A.
Şekil, Resim ve yazıları birleştirerek video oluşturacak bir program yazmayı düşünüyorum.
Anladığım kadarı ile resim ve ses birleştirme işini bilgisayarda yüklü video codec bileşenleri yapıyor.
Bize sadece karelerin fps bilgisini, bulunduğu saniyesini(milisaniyesini) belirlemek düşüyor.
Ancak nasıl yapılacağı konusunda bir fikrim yok. Yani codec bileşenleri (veya api, library) ile iletişim nasıl sağlayacağız.
Ve ona oluşturacağı video içeriği hakkındaki görüntü ve ses bilgisini nasıl göndereceğiz vs.
Doğrudan divx ile ilgili olmasa da herhangi bir formatta video oluşturma hk. bilgiye ihtiyacım var.
Paylaşabileceğiniz örnek çalışma, döküman veya kod var mı acaba.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen mrmarman »

Bazi konularda simdiden karar vermen gerek. En onemlisi urunu video uzerine bindirilmis olarak (embed) yeni bir urune donusturmek zorunda degilsen sadece video oynarken uzerind zamana bagli olarak gorunecek ise sen encoder calismasindan da kurtulursun musterin de render zamanindan.

video uzerinde gosterimi senin yaziliminda yapmak zorunlulugu da bence yazilima ihtiyac surekliligi acisindan lehine bir durum olusturur.

senden tam olarak ne istendigini acarsan tecrubelerimizi paylasiriz.

Daha once mtv turkiye icin video uzerine altyazi hazirlama, senkronizasyon ( timecode video fps uyum ) ve dvd formatinda keylenecek sekilde morpheus yaziliminina alternatif bir yazilim hazirlamistim. video uzerine yazi resim olarak bindirilmek zorunda olduvundan karakter jeneratotu olarak logo veya hareketli video logo da eklenebilir.

ihtiyac buysa teklif sunabilirim, yapilmisi var. :)
En son mrmarman tarafından 17 May 2010 03:00 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen Lost Soul »

Muharrem bey size geçmişteki divx çalışmalarınızdan dolayı maik atmıştım zaten. Sanırım forumu mailinzden ziyade kontrol ediyorsunuz :).

Müşteri odaklı bir program değil benimki. Genel video işlemleri üzerine program denemeleri yapacağm sonra da denemeleri birleştireceğim. 3-5 programla ayrı ayrı yapılan bazı rutin video işlemlerini tek programda toplaycağım. Anlayacağınız tam sizlik bir soru bu :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen mrmarman »

konuya gore degisen cok sahida eposta hesabim var. cevap beklemedigimde o hesaara bakmaya zamanim olmuyor. surekli baktigim gmail hesabimda da olmadigina gore muhtemelen diger hesaplardan birine yazdin. meyse burada gormus oldum.

ayri ayri yazimlarda yapilan islemleri siralarsan daha kolay anlayabilirim. batch operasyonlar icin gordianknot inceleyebilirsin boyutlandirma, kalite azaltma, altyazi embed islemi, format donusumu dublaj sesi ekleime vb. yapabiliyorsun.

imla hatalari icin kusura bakmayin birisini bekliyorken telefondan yaziyorum. parmaklarim yeni alisiyor
Resim
Resim ....Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen Lost Soul »

Gordian Knot programını indirdim ve kontrol ettim. Basit ve etkili bir program (Virtual dub subtitler gibi programları da içinde barındırıyor) Program için teşekkürler. Ancak konuyu açtığım yerden de anlaşılabileceği üzere bu tip işlemleri delphide yapmak istiyorum.

Altyazı ekleme ve watermark da yapmayı planladığım şeyler arasında.
Ancak kanaatimce delphi ile video oluşturabildikten (divx, sıkıştıtrlmamış avi formatı önemli değil)sonra saydığınız ve saydığım şeyleri yapmak programcının her bir frame (resim) üzerinde yapaldiği oynama becerisine kalıyor. Yani burada temel nokta kareleri ve sesleri birleştirip video oluşturmak. Gerisi teferruat.

Bilinen tüm programlarda dikkat edileceği üzre programlar yahu acaba ben hangi formatlarda video oluşturabilirim demeyip. Windowsun arayüzünden kullanıcıya bilgisayarındaki yüklü codeclerin listesini getirip (xVid, mp4, mov vs. vs.) hangi yüklü codec sıkıştırmasını kullanmak istediğini soruyor.
Bu da demek oluyor ki frame ve sesleri program verip sıkıştırma işini windowsa bırakıyor ya da öyle birşey.
Sonuç olarak
En basitinden kendi oluşturduğum (mesela runtime da oluşturulmuş jpeg veya bmp) atyorum 500 adet kareyi 25 fps ile bir ses dosyası eşliğinde video dosyasında dönüştürme işini nasıl yapabilirim.

Keza.
Mevcut bir video dosyasını yüklü codecler ile açıp her bir frameine veya audio streamına nasıl erişebilirim.
Mesela bu linkte avifil32.dll kütüphanesindeki fonksyionları kullanarak bmp (serisin)den avi'ye dönüştürme işlemi yapmış. Burdaki fonksiyonları çözümleyip bi de ses dosyası ekleme yaptık mı tamamdır işte :)

video sıkıştırma ayarları için ise gene bu library için şöyle bir tip tanımı yapılmış.

Kod: Tümünü seç

type

  AVI_COMPRESS_OPTIONS = packed record
    fccType: DWORD; // stream type, for consistency
    fccHandler: DWORD; // compressor
    dwKeyFrameEvery: DWORD; // keyframe rate
    dwQuality: DWORD; // compress quality 0-10,000
    dwBytesPerSecond: DWORD; // bytes per second
    dwFlags: DWORD; // flags... see below
    lpFormat: DWORD; // save format
    cbFormat: DWORD;
    lpParms: DWORD; // compressor options
    cbParms: DWORD;
    dwInterleaveEvery: DWORD; // for non-video streams only
  end;
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen mkysoft »

sanırım avi ve mpeg dökümanlarını okuyarak en temelden başlamalısınız. codeclerin çalışma mantığı üzerinede bazı yazılar okumanız gerekecektir. delphinin başına oturmadan önce bu tür dökümanları okumanızı tavsiye ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen mrmarman »

Merhaba.
@Lost Soul yazdı:Ancak kanaatimce delphi ile video oluşturabildikten (divx, sıkıştıtrlmamış avi formatı önemli değil)sonra saydığınız ve saydığım şeyleri yapmak programcının her bir frame (resim) üzerinde yapaldiği oynama becerisine kalıyor. Yani burada temel nokta kareleri ve sesleri birleştirip video oluşturmak. Gerisi teferruat.
şeklindeki ifade tam doğru değil. Video dosyaları teorik olarak frame'lerden oluşsa da, gerçekte frame farklarından oluşurlar. Şöyle ifade etmeye çalışayım.

Aşağıda yazacaklarım bir video dosyası içinde neler dönüyor onları özetlemek amaçlıdır. Bunu kavramadan bu tip bir projeye başlamamak lazım. @mkysoft çok haklı. Onun için sana soru soracak konu başlıkları oluşsun diye biraz laf kalabalığı yapıcam, müsadenle. :idea:

KeyFrame ismi verilen anahtar karelerde tüm ekranın tam boy kaydı tutulur. Takip eden karelerde ise sadece bu KeyFrame ile farkları araştırılır ve o farklar tutulur. Yani 1 gerçek resim frame (keyframe) ardından da 25kare/saniye hızındaki video için örneğin 25x (n) saniye frame değişiklikler tablosundan meydana gelir.

(n) saniye'de bir keyframe olsun şeklindeki kararı videoyu encode eden kullanıcı veriyor. Bu key frame sıklığı artarsa videonun boyutları çok artıyor. (bir sürü bitmap ardarda gibi düşünebilirsin) Keyframe sıklığı azalırsa da iki keyframe arasında bir veri sorunu olursa o hata sonraki keyframe'e kadar ekranda boyama/tarama/karelenme/sıvama şeklinde sürüyor. Sonraki keyframe sağlam ise o frame'e gelince ekran yeniden tümüyle tazeleniyor.

Constant Bitrate kavramı, sabit bir veri oranı seçip ona göre encode etmeye deniyor. Fayda zarar analizi aşağıda.
Keyframe çok sık aralıklı olursa bitrate denen veri oranı yükseldiğinden video performansını zorluyor, video dosyasının boyutu büyüyor, durağan sahneler olan videolar için müsrif davranılmış gereğinden fazla veri kaydı yapılmış oluyor.

Keyframe çok seyrek aralıklı olursa bitrate düşüyor, video performansı artıyor, dosya boyutu küçülüyor. Bu güzel gibi görünebilir ama madalyonun bu tarafında durağan sahnelerde eknomik bir dosya elde ederek fayda sağlandığı halde, aksiyon / çok hareketli sahnelerde sıçrama, karelenme, kalite bozukluğu oluşuyor.

Bir film içinde aksiyon sahneleri de olur durağan sahneler de. Bu durumda neye karar vericez. işte bu durumda Variable Bitrate kavramı yani sahnenin nabzına göre şerbet verecek şekilde değişken yoğunlukta keyframe aralığı belirlemek söz konusu. Bunun için iki tur işlem yapılır. ( yine encodere bu işi yaptırıyoruz. korma :) ) ilk turda video dosyası analiz edilerek nerelerde yüksek resim farkları var nerelerde düşük resim farkları var not edilir. Sonra da bu aralıklara gelindikçe ihtiyaç kadar veri oranı tayin edilir.


Bu bağlamda kare kare işlem yapmak demek aslında o kadar basit olmayıp, önce keyframe'den asıl resmi al, sonra farkları ekle ve oluşan kareye istediğin resmi ekle, onu keyframe yap sonra da bir seri farkı bu yeni güncellemeye göre değiştir (okuma işini zaten sen değil player codec yapıyor, sen sonra ürünü encoder codec'e post edip one pass, two pass şeklinde render ettiriyorsun.) ve de sürenin uzunluğu da bilgisayarın işlemcisi ve ram gibi performans kabiliyetiyle ters orantılı.
Resim
Resim ....Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen Lost Soul »

Her zamanki gibi üşenmeden detaylıca yazdığınız bilgilendirme için teşekkür ederim.

Bu durumda alıntı yaptığınız
Ancak kanaatimce delphi ile video oluşturabildikten (divx, sıkıştıtrlmamış avi formatı önemli değil)sonra saydığınız ve saydığım şeyleri yapmak programcının her bir frame (resim) üzerinde yapaldiği oynama becerisine kalıyor. Yani burada temel nokta kareleri ve sesleri birleştirip video oluşturmak. Gerisi teferruat
cümlesini
Ancak kanaatimce delphi ile video oluşturabildikten (divx, sıkıştıtrlmamış avi formatı önemli değil)sonra saydığınız ve saydığım şeyleri yapmak programcının her bir frame (resim) üzerinde (frameden önceki en son keyframe ile birleştirdikten sonra) yapaldiği oynama becerisine kalıyor. Yani burada temel nokta kareleri ve sesleri birleştirip video oluşturmak. Gerisi teferruat
şeklinde değiştirdikten sonra.
1. Henüz deneme şansım olmadı ama Sanırım bir önceki yazdığım cevapta verdiğim web sayfasındaki kod video oluşturma esnasındaki codec; codec'e bağlı olarak keyframe,, bitrate gibi işleri kendisi hallediyor. Fakat bu örnekte ses olayı mevcut değil.
2. İşlemin tersiyle ilgili (avi dosyasını okuma) ilgili henüz örnek bir kod bulamadım. (aslında buldum ama kod 1994 yılında yazılmış ve bildiğimiz sıkıştırlmamış RGB formatlı avi dosyasını codec library ile değil kendi nacizane çözümlemeriyle halletmeye çalışmış ve onda da ses örneğin yok.) Bu durumda key frame vs. gibi olayları delphi dilinde çözümleme şansım olmadı.
ancak gene verdiğim linkteki

Kod: Tümünü seç

const
  // AVISaveOptions Dialog box flags

  ICMF_CHOOSE_KEYFRAME = 1; // show KeyFrame Every box
  ICMF_CHOOSE_DATARATE = 2; // show DataRate box
  ICMF_CHOOSE_PREVIEW = 4; // allow expanded preview dialog
  ICMF_CHOOSE_ALLCOMPRESSORS = 8; // don't only show those that
  // can handle the input format
  // or input data
  AVIIF_KEYFRAME = 10;
 

AVIIF_KEYFRAME = 10
bana okuma işlemi için yine aynı kütüphaneyi kullanabileceğim (avifil32.dll)
ve

Kod: Tümünü seç

  AVI_COMPRESS_OPTIONS = packed record
    fccType: DWORD; // stream type, for consistency
    fccHandler: DWORD; // compressor
    dwKeyFrameEvery: DWORD; // keyframe rate
    dwQuality: DWORD; // compress quality 0-10,000
    dwBytesPerSecond: DWORD; // bytes per second
    dwFlags: DWORD; // flags... see below
    lpFormat: DWORD; // save format
    cbFormat: DWORD;
    lpParms: DWORD; // compressor options
    cbParms: DWORD;
    dwInterleaveEvery: DWORD; // for non-video streams only
  end;

  AVI_STREAM_INFO = packed record
    fccType: DWORD;
    fccHandler: DWORD;
    dwFlags: DWORD;
    dwCaps: DWORD;
    wPriority: word;
    wLanguage: word;
    dwScale: DWORD;
    dwRate: DWORD;
    dwStart: DWORD;
    dwLength: DWORD;
    dwInitialFrames: DWORD;
    dwSuggestedBufferSize: DWORD;
    dwQuality: DWORD;
    dwSampleSize: DWORD;
    rcFrame: TRect;
    dwEditCount: DWORD;
    dwFormatChangeCount: DWORD;
    szName: array[0..63] of char;
  end;

  BITMAPINFOHEADER = packed record
    biSize: DWORD;
    biWidth: DWORD;
    biHeight: DWORD;
    biPlanes: word;
    biBitCount: word;
    biCompression: DWORD;
    biSizeImage: DWORD;
    biXPelsPerMeter: DWORD;
    biYPelsPerMeter: DWORD;
    biClrUsed: DWORD;
    biClrImportant: DWORD;
  end;

  BITMAPFILEHEADER = packed record
    bfType: word; //"magic cookie" - must be "BM"
    bfSize: integer;
    bfReserved1: word;
    bfReserved2: word;
    bfOffBits: integer;
  end;
Avi Stream Infıo, Avi Compress Options yapıları (ki bunlar gene aynı dll dosyasındaki verileri yorumlamak için oluşturulmuş yapılar) bu kütüphanenin codeclerle etkileşimli çalıştığını gösterir (ki zaten bu dll dosyası windows\system32 altında.

Sizin geçmişte yaptığınız divx üzerine çalışmalar da bu şekilde doğrudan codeclerle etkileşimli mi çalışıyordu yoksa. divx lerin 2-3 tipte geçtiği dönemlerde verileri kendi imkanlarınızla mı yorumladınız [umarım 1'inci olasılıktır. :) ]

mrmarman yazdı: senden tam olarak ne istendigini acarsan tecrubelerimizi paylasiriz.
sanırım burada karşılıklı paylaşımdan çok (tecrübesizliğimden dolayı) tecrübenizden faydalanmayı istemekten başka bir yapabileceğim birşey yok. :(
mrmarman yazdı: Daha once mtv turkiye icin video uzerine altyazi hazirlama, senkronizasyon ( timecode video fps uyum ) ve dvd formatinda keylenecek sekilde morpheus yaziliminina alternatif bir yazilim hazirlamistim. video uzerine yazi resim olarak bindirilmek zorunda olduvundan karakter jeneratotu olarak logo veya hareketli video logo da eklenebilir.

ihtiyac buysa teklif sunabilirim, yapilmisi var. :)
aslında yaptığınızı söylediğiniz bu çalışma bütün video işlemlerinin bir özeti niteliğinde.
Zira bir Video dosyasını açıyorsunuz (ki hem ses hem görüntü var içinde )
Yorumluyorsunuz
Karelere metin ve/veya watermark ekliyorsunuz
Ve dosyası yeniden encode edip kaydediyorsunuz.

Elbetteki sizden bu programın kodlarını olduğu gibi isteyemem. Ancak
  • Dosyayı açma
  • Frame'i alıp yorumlama (keyframe ile birleştirme)
  • Audio Streami yorumlama
  • Bunları tekrar kaydetme
kısımlarını şöyle biraz kırpıp paylaşırsanız hoş bi güzel olur :)
işin teorik kısmını son yazınızda oldukça güzel bir özetle açıklamışsınız.
pratik kısmını ise paylaşacağınızı umduğum kodların, teknik makale misali bana anlatabileceğini düşünüyorum.
Kodları kitap/makale misali okumakta üzerime yoktur. :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen mrmarman »

Merhaba.
@Lost Soul yazdı:Elbetteki sizden bu programın kodlarını olduğu gibi isteyemem. Ancak

Dosyayı açma
Frame'i alıp yorumlama (keyframe ile birleştirme)
Audio Streami yorumlama
Bunları tekrar kaydetme
kısımlarını şöyle biraz kırpıp paylaşırsanız hoş bi güzel olur
işin teorik kısmını son yazınızda oldukça güzel bir özetle açıklamışsınız.
pratik kısmını ise paylaşacağınızı umduğum kodların, teknik makale misali bana anlatabileceğini düşünüyorum.
Kodları kitap/makale misali okumakta üzerime yoktur.
Buradaki isteklerinin altyapasını oluşturmuşsan bu projenin yarısını bitirmişsin demektir. Ancak bu projenin ilk yarısı olduğundan sana anlatmamızı istediğin kısım ikinci kısım oluyor. Örnek vermek gerekirse bir konuyu İngilizce tartışmak için önce İngilizcenin öğrenilmesi gerekiyor. Tartışma ikinci kısımdır.

En basitinden bırak Videoyu, Audio stream yorumlama demişsin ki çok genel bir istek...
PCM - WAV - MP3 - OGG nedir.
Conatiner nedir, codec bileşeni nedir.
Binary structure olarak bir dosyaya baktığında bu dosyanın türünü bilmen gerekir.
Montajı bir kenara bırakalım, senin projenin bu dosyanın ne tür bir dosya olduğunu anlaması, teknik bilgilerini çıraması lazım. Sen şimdi oradan başla. Böylece bir video veya audio dosyanın teknik yorumunu alabilir, bozuk bir video dosyasının yeniden tamirini dahi yapabilirsin. ( DivXTurk projemde ilk ele aldığım sıralama bu idi. Sene 1996 ) 2000 yılına geldiğimde daha yeni yeni video dosyası tamir index düzeltme vs. işlemlerini anlayarak yapabiliyordum.

Vakit çok değerli. Vakit buldukça makale halinde yazarım. Zaten daha önce yazdığım başlıkları da referans olarak veririm ... Tavsiyem Doom9.ORG sitesini takip et. Orada da sorularım ve cevaplarım var. İngilizce ama olsun kodlar ve içerik ile soruları cevapları anlayabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Vide oluşturma hk.

Mesaj gönderen Lost Soul »

tavsiye ettiğiniz siteye bakıp tavsiye ettiğiniz aşama (bir dosyanın türünü özelliklerini kullanılan ses türünü vs algılama) ile başlarım. İlginize Teşekkürler.
Cevapla