Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.049 c
2-1166968934
Wahnsinng
2006-12-24 17:02
2007.01.21
Копировать на FTp


15-1167650853
zayatz
2007-01-01 14:27
2007.01.21
Отказ от празднования нового года


4-1152801050
iNV
2006-07-13 18:30
2007.01.21
Как узнать подключенные к компу Card Reader ы?


1-1164875301
Krants
2006-11-30 11:28
2007.01.21
Проблема при копировании таблиц через ClipBoard


3-1162350693
boalse
2006-11-01 06:11
2007.01.21
С чего начать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский