Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Пережать видео...   Найти похожие ветки 

 
MetalFan ©   (2006-05-25 17:29) [0]

как пережать видеофайл
оставивь нетронутым аудиопоток?


 
MetalFan ©   (2006-05-26 08:05) [1]

мдаа...
видимо никто с DSPack"om не работал или секретничают....


 
Анонимщики ©   (2006-05-26 10:48) [2]

Тебе граф нарисовать или что сделать?
Спрашивай у WondeRu литературу для ленивых.


 
MetalFan ©   (2006-05-26 12:18) [3]

документацию толковую подскажите (SDK не в счет), если примером помочь не можете)
я с графами в DirectShow не сталкивался(


 
MetalFan ©   (2006-05-26 12:26) [4]

вот пример с DSPack"om
procedure cl_ConvertVideo(Input,Output:String; prs:cl_Preset; var Progress:integer);
var
 SourceFile  : IBaseFilter;
 multiplexer : IBaseFilter;
 DestFile    : IFileSinkFilter;
 CompFilter  : TFilterList;
 VidFilters  : TSysDevEnum;
 AudFilters  : TSysDevEnum;
 StreamConfig: IAMStreamConfig;
 BasicVideo:IBasicVideo;
 ACM:IBaseFilter;
//  pSourceFile : IBaseFilter;
 pmt: PAMMediaType;
 rslt:HResult;
 lst:TStringList;
 i,w,h           : integer;
begin
with frmJobs do
try
 GJobTime:=0;
 CompFilter  := TFilterList.Create;
 VidFilters := TSysDevEnum.create(CLSID_VideoCompressorCategory);
 AudFilters  := TSysDevEnum.Create(CLSID_AudioCompressorCategory);

 lst:=TStringList.Create;
 lst.Clear;
 For i := 0 to AudFilters.CountFilters - 1 do
   lst.Add(AudFilters.Filters[i].FriendlyName);
 try prs.ACodecIndex:=lst.IndexOf(prs.ACodecName) except prs.ACodecIndex:=-1; end;
 lst.Clear;
 For i := 0 to VidFilters.CountFilters - 1 do
   lst.Add(VidFilters.Filters[i].FriendlyName);
 try prs.VCodecIndex:=lst.IndexOf(prs.VCodecName) except prs.VCodecIndex:=-1; end;
 lst.Clear;
 lst.Free;

//  prs.VCodecGUID:=VidFilters.Filters[VidFilters.FilterIndexOfFriendlyName(prs.VCod ecName)].CLSID;
//  prs.ACodecGUID:=AudFilters.Filters[AudFilters.FilterIndexOfFriendlyName(prs.ACod ecName)].CLSID;

 CaptureGraph.ClearGraph;
 CaptureGraph.Active:=true;

//changing video type
if prs.pType="AVI" then
 with CaptureGraph as ICaptureGraphBuilder2 do
  SetOutputFileName(MEDIASUBTYPE_Avi,
    StringToOleStr(Output), multiplexer, DestFile);

 with CaptureGraph as IGraphBuilder do
  AddSourceFilter(StringToOleStr(Input),
    StringToOleStr(Input), SourceFile);

//  SourceFile.JoinFilterGraph(CaptureGraph as IFilterGraph,StringToOleStr(Input));

 CompFilter.Add(VidFilters.GetBaseFilter(prs.VCodecIndex));
 with CaptureGraph as IGraphBuilder do
   AddFilter(CompFilter.Last, StringToOleStr(prs.VCodecName));

 CompFilter.Add(AudFilters.GetBaseFilter(prs.ACodecIndex));
 with CaptureGraph as IGraphBuilder do
   AddFilter(CompFilter.Last, StringToOleStr(prs.ACodecName));

//connect
 if CompFilter.Count > 0 then
   for i := 0 to CompFilter.Count - 1 do
     with CaptureGraph as ICaptureGraphBuilder2 do
       RenderStream(nil,nil,SourceFile,CompFilter.Items[i],multiplexer);

 CaptureGraph.Play;
 GDSEvent:=-1;
 tmProgress.Enabled:=true;
 tmTimeShow.Enabled:=true;
//  with CaptureGraph as IMediaSeeking do
//    GetCurrentPosition(pos);
except
end;
end;

как его нужно модифицировать, чтобы аудио-поток перенести в результирующий файл?


 
Анонимщики ©   (2006-05-26 13:29) [5]

Я же сказал, к WondeRu. Там есть примеры.


 
MetalFan ©   (2006-05-26 14:55) [6]

а что за WonderRu?


 
MetalFan ©   (2006-05-26 14:59) [7]

билн. сделал так:
var
 lDestFN: string;
 lFilter: IBaseFilter;
 i: Integer;
 lSourceFile  : IBaseFilter;
 lmultiplexer : IBaseFilter;
 lDestFile    : IFileSinkFilter;
 lAudFilters  : TSysDevEnum;
 lCapFilters  : TSysDevEnum;

begin
 if OpenDialog.Execute() then
 begin
   Memo1.Clear;
   CaptureGraph.Active := True;
   CaptureGraph.ClearGraph;
   lDestFN := GetFilename(OpenDialog.FileName);
   if FileExists(lDestFN) then
     DeleteFile(lDestFN);
   with CaptureGraph as ICaptureGraphBuilder2 do
   begin
     SetOutputFileName( MEDIASUBTYPE_Avi,
                        StringToOleStr(lDestFN),
                        lmultiplexer,
                        lDestFile);
   end;
   lAudFilters  := TSysDevEnum.Create(CLSID_AudioCompressorCategory);
   lCapFilters := TSysDevEnum.create(CLSID_VideoCompressorCategory);
  //например XViD
   for i := 0 to lCapFilters.CountFilters - 1 do
     if lCapFilters.Filters[i].FriendlyName = "XviD MPEG-4 Codec" then break;

   lFilter := lCapFilters.GetBaseFilter(i);
   with CaptureGraph as IGraphBuilder do
   begin
     AddSourceFilter( StringToOleStr(OpenDialog.FileName),
                      StringToOleStr(OpenDialog.FileName),
                      lSourceFile );
   end;
   with CaptureGraph as IFilterGraph do
     AddFilter(lFilter, "Compressor");
 with CaptureGraph as ICaptureGraphBuilder2 do
 begin
   RenderStream(nil, nil, lSourceFile, lFilter, lMultiplexer);
   RenderStream(nil,nil, lSourceFile, nil ,lMultiplexer);
 end;

 CaptureGraph.Play;
 while CaptureGraph.State = gsPlaying do
   Application.ProcessMessages;

 CaptureGraph.ClearGraph;
 CaptureGraph.Active := False;

 lAudFilters.Free;
 lCapFilters.Free;
 end;
end;

в результате  получаю:
EC_ERRORABORT - An operation was aborted because of an error.
Для этого образца не указан штамп времени.

файл DivX6+MP3


 
MetalFan ©   (2006-05-29 10:11) [8]

мда, отзывчивый тут народ(((


 
Анонимщики ©   (2006-05-29 11:19) [9]

И понятливый вопрошатель.
Еще раз повторяю, к WondeRu обращайся. Там и о временных метках есть в примечаниях.
И никто не виноват, что у тебя то ли файл отчасти битый, то ли кодеки глючные.


 
MetalFan ©   (2006-05-29 12:59) [10]

а я еще раз спрашиваю - что/кто такое WonderRu?!
для меня Ваш ответ прозвучал, как "иди на... туда, не знаю куда".


 
Анонимщики ©   (2006-05-29 14:04) [11]

http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1085396393


 
MetalFan ©   (2006-05-29 20:06) [12]


> 2 Анонимщики и WonderRu

С-П-А-С-И-Б-О!!!



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.069 c
2-1168035230
Ламер 2.Х
2007-01-06 01:13
2007.01.21
Как отправить все Memo (но не мимо)?


2-1167119945
o_serg
2006-12-26 10:59
2007.01.21
Драйвер с обработкой прерывания


15-1167809375
Хмм
2007-01-03 10:29
2007.01.21
DLL .... а можно ли...


2-1167918377
Neket
2007-01-04 16:46
2007.01.21
Массивы


2-1167752715
Ламер 2.Х
2007-01-02 18:45
2007.01.21
Сайлы