Форум: "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.039 c