![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пережать видео...
MetalFan © (2006-05-25 17:29:00)как пережать видеофайл
оставивь нетронутым аудиопоток?
MetalFan (2006-05-29 20:06:00) [1]
> 2 Анонимщики и WonderRu
С-П-А-С-И-Б-О!!!
Анонимщики (2006-05-29 14:04:00) [2]http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1085396393
MetalFan (2006-05-29 12:59:00) [3]а я еще раз спрашиваю - что/кто такое WonderRu?!
для меня Ваш ответ прозвучал, как "иди на... туда, не знаю куда".
Анонимщики (2006-05-29 11:19:00) [4]И понятливый вопрошатель.
Еще раз повторяю, к WondeRu обращайся. Там и о временных метках есть в примечаниях.
И никто не виноват, что у тебя то ли файл отчасти битый, то ли кодеки глючные.
MetalFan (2006-05-29 10:11:00) [5]мда, отзывчивый тут народ(((
MetalFan (2006-05-26 14:59:00) [6]билн. сделал так:
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-26 14:55:00) [7]а что за WonderRu?
Анонимщики (2006-05-26 13:29:00) [8]Я же сказал, к WondeRu. Там есть примеры.
MetalFan (2006-05-26 12:26:00) [9]вот пример с 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;
как его нужно модифицировать, чтобы аудио-поток перенести в результирующий файл?
MetalFan (2006-05-26 12:18:00) [10]документацию толковую подскажите (SDK не в счет), если примером помочь не можете)
я с графами в DirectShow не сталкивался(
Анонимщики (2006-05-26 10:48:00) [11]Тебе граф нарисовать или что сделать?
Спрашивай у WondeRu литературу для ленивых.
MetalFan (2006-05-26 08:05:00) [12]мдаа...
видимо никто с DSPack'om не работал или секретничают....