用QT编写一个简易播放器 滑条代码怎么做 要求播放完成后停在最后

用QT编写一个简易播放器 滑条代码怎么做 要求播放完成后停在最后,第1张

其实是很简单的一件事情,根据播放器的时间不停止的设置滑块就是了

我以前开发过一个利用mplayer做播放器的软件

下面是播放的部分代码

void SuperPlayer::Play(const QString &filename, QWidget *playarea){

    process_player->kill()

    if(filename.isNull())

    {

        return 

    }

    if(!playarea)

    {

        playarea = this->label_movie

    }

    this->process_player = new QProcess(this)

    QString play_args = PLAYER_MAIN_PATH

    play_args += PLAYER_PLAY_PARA

    play_args += filename + PLAYER_PLAY_OTHER_PARA

    play_args += QString::number(playarea->winId())

    process_player->setProcessChannelMode(QProcess::MergedChannels)

    this->process_player->start(play_args)

    connect(this->process_player, SIGNAL(readyReadStandardOutput()), this, SLOT(PlayerDataRead()))

    connect(this->process_player, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(PlayerFinished(int,QProcess::ExitStatus)))

    this->process_player->write("get_time_length\n")

    this->process_player->write("volume 60 2\n")

}

程序获取一个文件路径,然后组合出来参数调用外部进程,这个播放器的接口很不错,当前readyReadStandardOutput

这个信号发出的时候就说明播放器的播放就开始了,然后我们在我们的槽函数PlayerDataRead里面

void SuperPlayer::PlayerDataRead(void){

    QString tmp

    this->process_player->write("get_time_pos\n")

    while(process_player->canReadLine())

    {

        QByteArray byte=process_player->readLine()

        byte.replace(QByteArray("\n"),QByteArray(""))

        if(byte.startsWith("ANS_TIME_POSITION"))

        {

            tmp = QString(byte)

            this->slider_time->setValue(tmp.mid(18).toFloat())

            this->label_time->setText(QString::number(this->slider_time->maximum() -

                                       tmp.mid(18).toFloat()) + "S" )

        }

        else if((byte.startsWith("ANS_LENGTH")))

        {

            tmp = QString(byte)

            this->slider_time->setRange(0, tmp.mid(11).toFloat())

            this->slider_time->setValue(0)

        }

    }

}

我们利用播放器的接口不断的获取时间,然后设置对应的时间进度条,

基本就是这个逻辑

Premiere中运动字幕的制作

在影视制作中字幕的运动能起到突出主题、画龙点睛的妙用,比如在影视广告中均是通过文字说明向观众强化产品的品牌、性能等信息。以前只有在耗资数万的专业编辑系统中才能实现的字幕效果,现在在业余条件下在PⅡ级别的PC机上使用优秀的视频编辑软件Premiere 6.5就能实现四种制作滚动字幕的方法。

一 在Premiere中制作字幕文件(扩展名为.ptl)时进行设置;

二 利用Filter滤镜中的Image Pan进行设置;

三 利用Motion对运动路径、位置等进行设置;

四 利用Transition效果中的Push 片段进行设置。 分别介绍如下:

一、在Premiere自带的[Title]窗口中能够建立垂直滚动(Roll)与水平滚动(Crawl)的字幕,文字移动速度取决于该片段在[Timeline]窗口中的长度。

1 从[File]菜单下选择[New>Title],d出[Title] 窗口。

2 在[Title]窗口左侧工具箱中选择[Rolling Title Tool],单击并拖动文本框,以确定文本的大小,输入文字,并在文字首尾预留空行。

3 选择[Title]/ [Rolling Title Tool],在[Direction]选项中选择文字滚动方向:

⊙Move Up :文字向上滚动

⊙Move Down: 文字向下滚动

⊙Move Left: 文字向左滚动

⊙Move Right: 文字向右滚动

如果要进一步设置,选择[Enable Special Timings]:

⊙Pre Roll:输入的数字代表有多少帧画面是静止的

⊙Ramp Up:输入的数字代表有多少帧是加速滚动的,如果想要正常速度,则输入0

⊙Ramp Down: 输入的数字代表字幕停止需要的帧数,如果要立即停止,输入0

⊙Post Roll: 输入的数字代表字幕的最后停止帧数,

4 拖动[Title]窗口左下角的滑条,可以预演滚动字幕。

二、Image Pan(镜头运动)滤镜可以模拟摄像机的摇运动和推拉运动效果,可以用来产生滚屏字幕的效果。 (一) 垂直滚动字幕

1 利用Photoshop或其它制图软件制作一个与Premiere中电影有同样宽度并且有足够高度的图片文件,该文件包含有要在电影中放映的文字内容。本例中设置电影分辨率为240×180像素,图片尺寸为240×1200。

2 将制作好的上述文件放入[Timeline]中的Video1A轨(放置在高轨上时要进行相应的Transprant设置)。

3 右键点击该片段,选择[Filter]选项,在[Filter]窗口中选择[Image Pan]单击ADD,Image Pan出现在 [Filter]窗口右边,双击进入[Image Pan Setting]窗口。

4 在[Image Pan Setting]对话框左上部设定start的高度为180,宽度为240,此时在左下部[start]画面顶端出现一个长方形,按下copy键将其复制到[end]中。

5 将右下方[end]画面中顶端的长方形拖至底端,在对话框的预览中显示字幕移动的情况。点击OK回到[Filter]对话框,再点击OK退出[Filter]设置。

(二) 水平滚动字幕

1 要求先制作一个与Premiere中电影有同样高度并且有足够宽度的图片文件,该文件包含要在电影中放映的文字内容。本例中设置电影分辨率为240×180像素,图片文件大小为2400×180。

2 3 4同上

5 将右下方[end]画面中左端的长方形拖至右端,点击OK回到[Filter]对话框,再点击OK退出[Filter]设置。

三、在对文字片段的motion设置中通过设定运动路径、速度以及运动状况,可以实现滚屏字幕。本例为制作一个包含“喜迎澳门回归,盛世国富民强”文字内容的垂直滚动字幕。

1 新建[1.ptl]与[2.ptl],[1.ptl]中文字为“喜迎澳门回归”, [2.ptl]中文字为“盛世国富民强”,字体36号,黑色加粗,文字位于可视区域中央。

2 将[1.ptl]导入[Timeline]的Video1轨,Duration设定为6秒,将[2.ptl]导入[Timeline]的Video2轨,Duration设定为3秒,并使其右端与Video1A轨上的[1.ptl]右端对齐。

3 选中[1.ptl],点击鼠标右键,选择[video]>[motion],出现[motion setting]窗口。在中间[Time]关键帧设置区域,用鼠标左键点击开始处,确定首帧位置,在[Time]下的[Info]窗口中输入首帧位置为(0,60),点击[Time]区域的结尾处,确定尾帧位置为(0,-14),点击左上角预览窗口旁的play键进行预览,按[OK]返回。

4 选中Video2轨的[2.ptl],仿照步骤3进行[motion]的设置,首帧位置为(0,60),尾帧位置为(0,0),按[OK]返回。

四 利用包含文字信息的图片和[Transition]中的[push]过渡效果同样可以制作滚屏字幕。

1在画笔程序中制作包含“喜迎”、“澳门”、“回归”、“盛世”、“国富”、“民强”文字的白底红字静态图片,分别存为1.bmp、2.bmp、3.bmp、4.bmp、5.bmp、6.bmp。

2 将1.bmp导入Video1A轨,选中1.bmp, 点击鼠标右键,选中[Duration],设为6秒(后面步骤中将2.bmp-6.bmp 导入[Timeline]视频轨道后需将各自的[Duration]调整为6秒,以下不再重述。)。

3 选择[Windows]>[Show transition],出现过渡效果窗口,选中[PUSH]转场,导入Video1A与Video1B间的Transition 轨道上,左端与1.bmp左端对齐,设定其[Duration]为3秒,双击[push]转场片段,选中[Show Actual Sources]进行预览。

4 调整右下角的效果框,使左侧箭头向上,选中中间方框靠底边的小箭头(选中后小箭头变成红色),在右侧上方选中字母F([F]表示后一个画面从下方向上推动前一个画面,而[R]则正好相反,中间方框周围的小箭头表示画面是水平切入还是垂直切入),点击OK确定。

5 导入[2.bmp]至Video1B轨,其左侧紧接上一行[PUSH]片段的结尾处 。再次 导入[PUSH]过渡片段至Transition 轨道,双击,调整右下角的效果框,使左侧的箭头向下。

6 选择[Timeline]中的[Range Select Tool] 工具,选中Transition 轨道上刚才制作好的两个过渡效果片段,并向右拖动,直至上下轨道均为空白处。

7 选择[Timeline]虚拟片段工具,按住键盘上的[Alt],选中步骤6中的两个过渡效果片段,向右拖动此虚拟片段至轨道空白处,此时步骤6中的两个过渡效果片段已复制成4个,再重复此步骤两次,使Transition 轨道上出现8个过渡效果片段。

8 导入[1.bmp]至Video1A轨,使其左侧与Transition 轨道上第一个 过渡效果片段左侧对齐,导入[2.bmp]至Video1B轨,使其左侧与Transition 轨道上第二个 过渡效果片段左侧对齐,依次将[3.bmp]-[7.bmp]分别上下交错衔接放入Video1A轨和Video1B轨。删去最后一个过渡片段。

9 按住[Alt]预览制作好的滚动字幕。

一、利用在Premiere[Title]窗口中其自带的Roll Tile工具,应该注意的是在文字的首尾要键入适量的空行,否则,文字不会按预期的方式滚动,在字首加空行,会使文字逐步滚入屏幕,在字尾加空行,则逐步滚出屏幕。但是,在[Title]窗口中滚动文本框内无法自动换行,并且还不支持全角方式下的标点符号(如顿号、句号),当文字量较大时,对于从别的应用程序Copy过来的文字无法实现正确的 paste,你只能老老实实重新输入。

二、比较适合多文字的情况。

三、适用于对文字进行比例缩放、旋转的场合,在非屏幕中心位置而要保持滚动效果时,其它三种方法不能胜任,其弱点是画面跳动感较强。

四、适合大字体,如标题的制作,但设置复杂。

通过一个控制正弦波频率的简单例子介绍一下滑动条的使用。

1.创建一个新的空白的GUI。这个例子会用到静态文本框、可编辑文本、滑动条、坐标轴和面板。先在界面中拖入一个面板,用于容纳其他组件。拖入一个静态文本框和一个可编辑文本,静态文本框的属性“string”写成“频率”,可编辑文本框的属性“string”一栏清空;再拖入1个面板控件,其属性“Title”改成“信号波形”,并拖1个坐标轴到该面板上;拖入一个滑动条;整个界面如下图。

2.双击打开滑动条的属性编辑器,其中,“max”、“min”和“value”三个属性是比较重要的。“max”属性是指滑动条滑到最右边时的值,即最大值,一般默认是1;“min”属性是指滑动条滑到最左边的值,一般默认是0。“value”指滑动条的当前值,一般默认是0,所以我们看到的滑动条滑块一开始都处在最左边,我们也可以将“value”改成1,这样子滑块最开始的状态就是处在最右边了。

3.进入滑动条的回调函数,在回调函数中敲入如图的程序段。其中可编辑文本框用来显示滑动条的当前值,坐标轴用来显示正弦波波形,并且正弦波的频率受到滑动条的控制。至此就完成了这个简单的实例。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11273027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存