在视频上加字幕(200分)

  • 主题发起人 主题发起人 payer
  • 开始时间 开始时间
P

payer

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一块电视卡,想在电视的画面表面写一段文字
请问怎样做呢?给个例子,谢谢
 
[?][?][?][?][?][?]
 
我有,想要吗!
和我联系QQ 87797301 还能显示图片呢!!
星期天我值班,在
 
找到播放窗口的透明色后,用画图工具编辑一个背景色为该透明色的图片,然后在图片的适当位置添加字幕或图片,播放时把图片用看图工具打开后覆盖在播放窗口的上面即可。

透明色的获取方法:
下一款屏幕吸色工具,在播放电视节目时直接吸取播放窗口任意位置的色彩即可得到透明色。
吸色工具下载地址:
http://www.prowt.com/soft/showsoft.asp?id=12
 
更简单的方法:
播放时直接按print screen拷屏键,打开画图粘贴,选取其中可穿透区域即可在此处作图添加字幕。

上面两种方法好处是操作简单,不需要硬件支持,叠加字幕绝对是CPU零资源占用。
不足之处是录像文件中是不会自动叠加这些字幕的。
 
to:selonboy
你的方法是在原播放的表面,再画一个窗口,并透明背景来显示文字或图片?
 
嗯,这样最简单,而且不会影响播放速度。
又可直接输出到CRT上面
 
这个方法不错,如果想直接写屏呢?
 
又加专门字幕的工具。

用"视频叠加王"

http://www.skycn.com/soft/8851.html
http://www.qufc.com/soft/8851.htm

是家庭、广告、商业视频应用的最佳助手,能为视频应用制作普通字幕、特技字幕、卡拉OK、MTV、图象特技、叠加动画、3D动画等。(请安装MicroSoft DirectX8.0 以上版本驱动程序才能正常运行)每步操作都有提示。视频叠加王V1.02版功能更新较多,使用了刚刚研制出的新技术:1、使用了独特的压缩还原技术,能对AVI、DAT、MPG、MPEG-1等视频文件叠加用【视频叠加王编辑器】编辑生成的各种字幕、特技、动画等,一次生成选定格式的AVI文件,无需转换。(VideoWriter.exe)2、针对数码摄像机的DV视频,采用了帧编辑技术,生成DV格式视频速度很快。(DVWriter.exe)3、独家推出软字幕机,能将【视频叠加王编辑器】编辑生成的各种字幕、特技、动画等实时合成视频输出。(VideoOut.exe)4、针对各种软件生成的Avi动画,推出了将AVI转换为BMP序列的工具,供其它软件使用。(VideoToBmp.exe)5、更正了【视频叠加王编辑器】中的一些BUG。6、安装完成后,可以安装附带的两个编码器,在CODEC目录下,一个是DV编码器,一个是无损压缩编码器。下载安装后,请仔细阅读帮助文件;本软件可以无限期使用,未注册版本生成的AVI文件画面上存在干扰文字和图像。
 
无法帮你什么,给你点代码吧!转自别人的加字
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DSPack,DirectShow9;

type
TForm1 = class(TForm)
FilterGraph: TFilterGraph;
VideoWindow: TVideoWindow;
SampleGrabber: TSampleGrabber;
OpenPlay: TButton;
Snapshot: TButton;
OpenDialog: TOpenDialog;
CallBack: TCheckBox;
Image: TImage;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
ColorDialog1: TColorDialog;
Shape1: TShape;
Button1: TButton;
Edit4: TEdit;
Label1: TLabel;
Shape2: TShape;
Button2: TButton;
procedure OpenPlayClick(Sender: TObject);
procedure SnapshotClick(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure SampleGrabberBuffer(sender: TObject;
SampleTime:do
uble;
pBuffer: Pointer;
BufferLen: Integer);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ D閏larations priv閑s }
public
{ D閏larations publiques }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OpenPlayClick(Sender: TObject);
begin

if OpenDialog.Execute then

begin

FilterGraph.Active := False;
FilterGraph.Active := true;
FilterGraph.RenderFile(OpenDialog.FileName);
FilterGraph.Play;
end;

end;


procedure TForm1.SnapshotClick(Sender: TObject);
begin

// SampleGrabber.GetBitmap(Image.Picture.Bitmap)

end;


procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin

CallBack.Checked := false;
FilterGraph.ClearGraph;
FilterGraph.Active := false;
end;


procedure TForm1.SampleGrabberBuffer(sender: TObject;
SampleTime:do
uble;
pBuffer: Pointer;
BufferLen: Integer);
var
hr: HRESULT;
VideoInfo: PVideoInfo;
MediaType: TAMMediaType;
i, j: Integer;
P: PByteArray;
CurrectColor: TColor;

begin

if CallBack.Checked then

begin


hr:=SampleGrabber.SampleGrabber.GetConnectedMediaType(MediaType);
if hr <> S_OK then

Exit;
if IsEqualGUID(MediaType.majortype, MEDIATYPE_Video) then


VideoInfo:=MediaType.pbFormat;
Image.Picture.Bitmap.Width := VideoInfo.bmiHeader.biWidth;
Image.Picture.Bitmap.Height:= VideoInfo.bmiHeader.biHeight;

Image.Picture.Bitmap.Canvas.Lock;

Image.Picture.Bitmap.Canvas.Brush.Color:= Shape2.Brush.Color;
Image.Picture.Bitmap.Canvas.Rectangle(-1, -1,
Image.Picture.Bitmap.Width + 1, Image.Picture.Bitmap.Height + 1);
Image.Picture.Bitmap.Canvas.Brush.Style:=bsClear;

Image.Picture.Bitmap.Canvas.Font.Size:=strtoint(edit4.Text );
Image.Picture.Bitmap.PixelFormat:=pf24bit;

Image.Picture.Bitmap.Canvas.Font.Color:=Shape1.Brush.Color;
Image.Picture.Bitmap.Canvas.Font.Style :=[fsBold];
Image.Picture.Bitmap.Canvas.TextOut(strtoint(Edit1.text),
strtoint(Edit2.text),Edit3.text);

// to avoid flickering


for j := 0 to Image.Picture.Bitmap.Height - 1do

begin

P := Image.Picture.Bitmap.ScanLine[Image.Picture.Bitmap.Height - j - 1];
for i := 0 to Image.Picture.Bitmap.Width - 1do

begin

CurrectColor :=RGB(P[i*3], P[i*3 + 1], P[i*3 + 2]);
//P[i*3];
if CurrectColor <> Shape2.Brush.Color then

begin

// PByte(Integer(pBuffer) + j * Image.Picture.Bitmap.Width*3+i*3)^:=p[i*3];
PByte(Integer(pBuffer) + j * Image.Picture.Bitmap.Width*3 + i*3 )^ := P[i*3];
PByte(Integer(pBuffer) + j * Image.Picture.Bitmap.Width*3 + i*3 + 1)^ := P[i*3 +
1];
PByte(Integer(pBuffer) + j * Image.Picture.Bitmap.Width*3 + i*3 + 2)^ := P[i*3 +
2];
end;

end;

end;



Image.Picture.Bitmap.Canvas.Unlock;


end;

end;


procedure TForm1.FormCreate(Sender: TObject);
begin

ColorDialog1.Color:=clwhite;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

ColorDialog1.Execute;
Shape1.Brush.Color:=ColorDialog1.Color;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin

ColorDialog1.Execute;
Shape2.Brush.Color:=ColorDialog1.Color;
end;


end.
 
用dspack 我不知道怎样控制电视的频道
 

Similar threads

后退
顶部