ورود

View Full Version : نحوه ی اختراع یک فرمت جدید



میلاد قاضی پور
شنبه 21 اسفند 1389, 23:30 عصر
سلام . یک فرمت برای فایل صوتی یا اجرایی یا... چطوری شکل میگیره ؟
ماهیت پروژه اش چجوریه ؟ برنامه نویسی داره ؟ نظریه هست ؟ قرارداده ؟
کلا توضیحاتی در مورد مراحل تولد یک فرمت جدید میخوام .

eshpilen
شنبه 28 اسفند 1389, 10:30 صبح
بنظرم فرمت یه چیز هست، و مثلا کدک یه چیز دیگه.
فرضا MP3 بنظر شما کدک هست یا فرمت یا هردو؟
منظورتون کدومش هست؟

eshpilen
شنبه 28 اسفند 1389, 11:26 صبح
بنظرم باید بگیم که کدک از نوع الگوریتم هست، و فرمت از نوع ساختمان داده.
البته مرزهای اینها در عمل شاید دقیقا مشخص نباشه و با هم آمیخته باشن.
معمولا کدک ها منجر به تولید فرمت مخصوص به خوشون هم میشن. یا درمورد دیتای خروجی یک کدک گفته میشه در فلان فرمت هست. مثلا میگن در فرمت MP3.
خلاصه اصطلاح فرمت رو خیلی وقتا بصورت کلی و برای اشاره به الگوریتم ها هم بکار میبرن. اما درواقع فکر میکنم فرمت بیشتر به دیتای خروجی کدک یا بصورت اختصاصی به ساختمان دادهء مخصوص ذخیرهء این داده ها در فایل باید گفته بشه یا وقتی که دیتا در فرمت نهایی خودش هست (مثلا صرفا داده های خام خروجی کدک نیست و مشخصات و فرمت خاص به اون اضافه شده).
اینا چیزایی بود که به ذهن بنده میرسه.
تاجایی که میدونم کدک ها میتونن خیلی پیچیده باشن و درمورد فرمت های صوتی و تصویری با تعداد زیادی الگوریتم پیشرفته و ریاضیات طراحی میشن. هرکسی نمیتونه یک کدک جدید در این زمینه ها رو تولید بکنه. بخصوص که بخواد مزیت های خودش/نوآوری واقعی ای رو داشته باشه.
فرمت معمولا ساده تر هست. اما فرمت هم میتونه خیلی حساب شده و پیچیده باشه و ارتباط تنگاتنگی با الگوریتم مورد نظر برای تولید و خواندن و پردازش داده ها داشته باشه.
فرمت های ساده و نسبتا ساده ای رو میشه براحتی ایجاد کرد و خیلی از برنامه ها برای کارهای خودشون فرمتهای خاص خودشون رو ایجاد کردن و ما تعداد زیادی فرمت های مختلف داریم که خیلی از اونا کم و بیش شبیه هم هستن.
این فرمتها معمولا بدرد کارهای عمومی تر نمیخورن (صرفا با برنامه و کاربرد محدود خودشون کار میکنن) و مورد استفادهء عموم قرار نمیگیرن، مگر اینکه فرمت کلی تری باشه و بخصوص پیشرفته و حساب شده باشه و مزایای قابل توجهی داشته باشه؛ البته گاهی بخاطر رواج یک برنامهء خاص، فرمت اونهم خیلی معروف و مورد استفاده واقع میشه. مثلا دیگران هم میان و فایل خودشون رو که نرم افزار دیگری با فرمت خاص خودش ایجاد کرده به اون فرمت معروف تبدیل میکنن.
ضمنا بعضی فرمتها واقعا خودشون بر اساس الگوریتم های پیشرفته ای هستن که مثلا برای بهینه سازی ذخیره سازی، سرعت بازیابی، کشف و اصلاح خطا و غیره طراحی شدن. اما فکر میکنم بازم به این فرمتها کدک گفته نمیشه.
سوال بعدی اینه که آیا فرمت مختص ذخیره سازی در فایل هست؟ بنده فکر نمیکنم لزوما محدود به فایل باشه. مثلا احتمالا به ساختار دیتا برای انتقال در شبکه یا Streaming هم فرمت گفته میشه.

اینها تاجایی بود که بنده اطلاعات کلی و استنباط داشتم.

Alireza_Salehi
شنبه 28 اسفند 1389, 12:36 عصر
یک فرمت صوتی یا تصویری بر اساس یک الگوریتم دقیق ریاضی ساخته می شود.
نحوه فشرده سازی جهت کم حجم کردن داده ها
نحوه تبدیل اطلاعات فشرده شده به داده های اصلی
encoding/decoding

روش فشرده سازی جهت دریافت سریع ترین الگوریتم فشرده سازی
روش باز کردن اطلاعات فشرده شده با سریعترین الگوریتم ممکن
چگونگی فشرده سازی جهت حداقل تخریب بر روی اطلاعات اصلی (lossy)

اینها همگی بر اساس فرمول های دقیق ریاضی انجام می شود. وقی روابط ریاضی با نهایت دقت اثبات و تست شد اقدام به پیاده سازی الگوریتم می کنند. و معمولا موارد زیر رو پیاده می کنند:
encoder/decoder


از کنار هم قرار گرفتن موارد فوق و برقراری ارتباط بین آنها با ابزاری مثل directx چیزی به نام codec بوجود می آید. ولی یک فرمت جدید صرفا از الگوریتم های فشرده سازی و نحوه ذخیره سازی متادیتا تشکیل می شود.

در برخی فرمت های روش های رمزنگاری و ... نیز لحاظ میشود.

البته نحوه پیاده سازی الگوریتم بستگی به کاربرد دارد مثل کم حجم کردن اطلاعات، حفاظت از اطلاعات، ترکیب اطلاعات، حفظ کیفیت اطلاعات و ....
در کاربرد های روزمره اکثرا کم حجم کردن اطلاعات در عین حفظ کیفیت مد نظر است،

Q:What are codecs?A:Most players use DirectShow for playback. DirectShow is a system that uses multiple DirectShow filters as building blocks to construct what is called a DirectShow graph. A file is a root of this graph and the audio and video renderers are the leaves of the graph. During playback data flows from the root to the leaves. Each filter in the graph performs a subtask of the whole process. Typical elements in the graph are a source filter, also called a splitter, and decoders for the audio and video. A source filter is responsible for reading the file format and feeding the data to the other filters downstream in the graph. During graph creation, if DirectShow finds multiple filters that are able to perform the same subtask, then it will typically select the filter that has the highest merit. The merit of a filter is simply a numerical value that indicates the preferability of the filter. Tools exist to alter the merit of a DS filter. Advanced players are often able to manipulate which filters are used in the graph, allowing for example to block or prefer certain filters. If no suitable DirectShow filter can be found to decode a certain audio/video format, then DirectShow is able to fall back to using VFW and ACM codecs (see below) through special wrapper filters.
It is a myth that filters can 'conflict' with each other. If something goes wrong it is simply because some filters in the graph are not performing their subtasks correctly. The filters in this pack are carefully selected to provide you with optimal functionality and a minimal chance of running into problems.
Codec is short for 'compressor-decompressor', a piece of software that is able to decode and encode a certain format. By this definition, a DirectShow filter is not a codec.
Two other systems are VFW (Video For Windows) and ACM (Audio Compression Manager). Components for these system are called codecs, because they are typically able to both encode and decode. These two types of codecs are required by most video editing applications, such as VirtualDub. Traditional video editing applications are not able to use DirectShow. More modern applications are sometimes capable of using DirectShow for decoding, but they usually still require VFW and ACM codecs for encoding.


http://en.wikipedia.org/wiki/Codec

returnx
شنبه 28 اسفند 1389, 12:42 عصر
البته شما هم می تونید یک فرمت خاص خودتون رو برای برنامتون بسازید...
به طور مثال شما می تونید یک فایل Random Access درست کنید و مقادیری که خودتون می خواهید رو با یک الگوریتم مشخص Save کنید و بعد باز یابی کنید ، اگه دقت کنید می بینید تمام فرمت ها یک نوع فایل Random Access یاباینری هستند و داده ها به صورت خاص در این فایل ها نوشته شده و به همین روش خوانده می شوند ....
در حالی که کدک ها و کدر ها وظیفه اصلیشون تبدیل آنالوگ به دیجیتال و بر عکس هست (اگر اشتباه نکرده باشم) و بیشتر برای نمایش و ذخیره فایل های صوتی و تصویری استفاده می شود در حالی که فرمت هایی مثل PDF ، Frm یا هر فرمت دیگری نیاز به کدک نداره...

eshpilen
شنبه 28 اسفند 1389, 18:43 عصر
البته منم منظورم این نبود که کدک ها خودشون الگوریتم هستن. کدک ها درواقع پیاده سازی عملی این الگوریتم ها در سطح برنامه نویسی هستن.

FastCode
شنبه 28 اسفند 1389, 19:45 عصر
همه نوشته هام پرید.
@ms2222:

اینقدر نوشته بودم که ...

فقط پاکش کن.

Alireza_Salehi
شنبه 28 اسفند 1389, 22:39 عصر
در حالی که کدک ها و کدر ها وظیفه اصلیشون تبدیل آنالوگ به دیجیتال و بر عکس هست (اگر اشتباه نکرده باشم) و بیشتر برای نمایش و ذخیره فایل های صوتی و تصویری استفاده می شود در حالی که فرمت هایی مثل PDF ، Frm یا هر فرمت دیگری نیاز به کدک نداره...
تبدیل آنالوگ به دیجیتال ربطی به این مبحث نداره، بحث سر کد گذاری داده های دیجیتال خام RAW هستش.

m.soleimani
شنبه 28 اسفند 1389, 23:01 عصر
همه نوشته هام پرید.
@ms2222:

اینقدر نوشته بودم که ...

فقط پاکش کن.

اگر از فایر فاکس استفاده می‌کنی فکر کنم آقا موسوی یه اکستنشن برای رفع این مشکل طراحی کرده بودن تاپیکش یادم نیست پیغام خصوصی بدی شاید برات بفرسته گویا سرش شلوغه موفق باشید./

returnx
شنبه 28 اسفند 1389, 23:54 عصر
ظاهرا زیاد اشتباه نوشتم :خجالت:

فقط پاکش کن.
متاسفانه نمی تونم پست رو حذف کنم(نمیشه)....:افسرده:

همه نوشته هام پرید.
اگه یکبار دیگه بنویسد ، ممنون میشم ،تا ما متوجه اشتباهمون بشیم...

اگر از فایر فاکس استفاده می‌کنی فکر کنم آقا موسوی یه اکستنشن برای رفع این مشکل طراحی کرده بودن تاپیکش یادم نیست پیغام خصوصی بدی شاید برات بفرسته گویا سرش شلوغه موفق باشید./
"http://barnamenevis.org/showthread.php?277357-Barnamenevis-?????-Firefox-Extension-??-????-??????-???????-????-??-quot-????-??????-????-quot&goto=newpost (http://barnamenevis.org/"http://barnamenevis.org/showthread.php?277357-Barnamenevis-?????-Firefox-Extension-??-????-??????-???????-????-??-quot-????-??????-????-quot&goto=newpost")"

FastCode
یک شنبه 29 اسفند 1389, 01:04 صبح
خلاصش رو دوباره مینویسم:
۱.طراحان کدک همیشه دوست دارن کدکشون sequential باشه تا در حالت stream کار کنه.این برای pdf هم که شما هیچی حسابش نکردین صادقه.
۲.کلاْ سیستم های کامپیوتری هیچ ربطی به آنالوگ ندارن.حداقل توی کدی که شما میتونید توی زبون های managed هم بنویسیدشون ربطی به چیزهای آنالوگ ندارند.
مثال:چون ممکنه خری پیدا بشه که FFmpeg رو با C# بنویسه.(از نظر تئوری ممکنه) پس نتیجه میگیریم تمام کلماتی که در FFmpeg هستند مربوط به کارهای دیجیتال هستند.
۳.کدک و دکودر و فرمت رو درست با هم قاطی کنید.باور کنید گیج شدم.
۴.دفعه قبلی چهار تا بود.!!؟

من از کروم استفاده میکنم.(GNU/Linux)

sali444
یک شنبه 29 اسفند 1389, 04:13 صبح
آره. فرمتها الگوریتمن.
فک کن یه کلاس رو میخوای به صورت باینری ذخیره کنی.
خب خودش یه فرمت جدیده.
ببین:
#include<iostream.h>
#include<fstream.h>
class student
{
char title = "Barnamenevis";
char name;
float m,p,a;
public:
void average()
{
a=(m+p)/2;
}
void input()
{
cout<<"Enter Name: ";
cin>>name;
cout<<"m: ";
cin>>m;
cout<<"p: ";
cin>>p;
}
void output()
{
cout<<name<<":"<<a<<endl;
}
float geta()
{
return a;
}
float cmp(student s)
{
if( a > s.a )
return 1;
else if(a == s.a)
return 0;
else
return -1;
}
};

int main()
{
student s1;
s1.input();
ofstream outbin("student.dat",ios::binary);
outbin.write((char *)&s1,300);
outbin.close();
ifstream inbin("student.dat");

}


این یه چیز خیلی سادس که چن وقت پیش نوشتم.
فایل خروجی برنامه یه فرمت خاصه. پسوندشم هرچیزی می تونه باشه.

returnx
یک شنبه 29 اسفند 1389, 14:55 عصر
منظور من دقیقا چیزی بود که جناب sali444 کدش قرار دادن ...
در مورد کدک ها ، اشتباه کردم، شرمنده...