DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: Odmfkqe
今日帖子: 20
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/3/22 12:54:28
标题:
如何从视频文件中截取一幅画面? 浏览:439
加入我的收藏
楼主: 这几天做个Win64程序,用Firemonkey做。
有一系列视频文件,需要从每个视频文件中截取一幅画,来作为视频文件列表的列表项图片,有点类似Windows资源管理器中浏览视频文件时的缩略图效果。希望直接用从视频文件中截取画面,而不是播放出来后截屏的方式。
请教大家有什么实现方法?

我看了PasLibVlc,好像得Play后,才能截取。
----------------------------------------------
-
作者:
男 xuchuantao (暗黑天使) ▲▲▲▲△ -
注册会员
2020/3/22 13:28:20
1楼: 那就调用ffmpeg
----------------------------------------------
按此在新窗口浏览图片
作者:
男 hsj (hsj) ★☆☆☆☆ -
盒子活跃会员
2020/3/23 16:10:02
2楼: 不需要播放吧,你看看苦力的ffvcl
----------------------------------------------
qq:171833017,靖源软件http://www.dxmylove.com
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/3/24 9:15:22
3楼: 谢谢两位,我先试试看直接调用ffmpeg.exe来生成
----------------------------------------------
-
作者:
男 hsj (hsj) ★☆☆☆☆ -
盒子活跃会员
2020/3/24 11:06:55
4楼: 很早之前写的,自己都不记得了
FFDecoder := TFFDecoder.Create(nil);
        try
          if not FFDecoder.AVLibLoaded then
          begin
          if not FFDecoder.LoadAVLib(GetCurrentPath + 'plugin') then
          begin
          msg := FFDecoder.LastErrMsg;
          Exit;
          end;
          end;
          if not FFDecoder.LoadFile(fn) then
          begin
          msg := '文件打开错误' + #13#10 + fn + #13#10 + FFDecoder.LastErrMsg;
          Exit;
          end;
          apts := Round(0.5 * mi.PlayTime);
          if FFDecoder.Seek(apts) or FFDecoder.Seek(APTS, [sfBackward]) or FFDecoder.Seek(APTS, [sfAny]) then
          begin
          FFDecoder.Decode;
          bmp := TBitmap.Create;
          try
          FFDecoder.CopyToBitmap(bmp);
          BmpFitStretch(bmp, ThumbWidth, ThumbHeight);
          waterfn := getcurrentpath + 'images\mp4demo.png';
          JyGetImageWater(bmp, waterfn, x, y);
          bmp2gif(bmp, newfn);
          finally
          bmp.Free;
          end;
          end
          else
          begin
          msg := 'mp4缩略图获取失败!' + FFDecoder.LastErrMsg;
          Exit;
          end;
          Application.ProcessMessages;
        finally
          FFDecoder.Free;
        end;
----------------------------------------------
qq:171833017,靖源软件http://www.dxmylove.com
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/3/24 17:08:02
5楼: 嗯,下了个ffvcl lite版,发现生成的图片加了水印。再折腾折腾。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/25 16:03:42
6楼: 其实也是要解码播放的。

现在的视频,大多是 264 或 MPEG4 类似的格式,也就是帧间压缩。不可能不解码单独从文件里面取出一帧数据,就能得到画面。

视频文件里面的一帧数据,是不能单独解压缩的,除非刚好是关键帧。其它的帧,都要参考前面的帧或者参考关键帧才能解码为图片。

所以,如果你有办法搜到关键帧,单独提取出来解码为图片。要么,不如直接播放解码。

直接播放解码,如果是 WINDOWS 底下,玩 Delphi 的话,很简单,用那套 Dspack 控件,加上网上开源的 FFDshow 也就是一套将 FFMPEG 的解码库封装为 DirectShow 的 DirectShow Filter,安装到你的电脑里面,用 Dspack 控件去调用。

上述玩法我这里写不了太详细。有需要的话,我再写详细教程。

Dspack 官方只支持到 D7 没有再更新。我修改了一点支持到新版 Delphi,我的 CSDN 下载资源里面有。我也放到我的 github 里面了。
----------------------------------------------
-
作者:
男 wj2310 (wj2310) ★☆☆☆☆ -
注册会员
2020/3/25 17:09:28
7楼: 支持支持









把DELPHI当作爱好了,在线培训系统http://www.nxexam.com
----------------------------------------------
wj2310
作者:
男 codecoolie (CodeCoolie) ▲▲▲▲▲ -
注册会员
2020/4/4 23:57:05
8楼: 呃,简化版的 FFDecoder 我没加水印啊,难道我记错了? FFPlayer 播放截图好像加了水印。
----------------------------------------------
FFmpeg for Delphi http://www.CCAVC.com http://www.DelphiFFmpeg.com
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/4/5 12:19:45
9楼: @codecoolie,苦力兄,你应该是加了水印的。
我直接编译Lite包里附的PlayerDemo程序,点击里面的Capture按钮,截的图如下:

按此在新窗口浏览图片

另外,Lite版的TFFPlayer的Seek()方法好像是屏蔽了吧?设不了播放进度跳转。
----------------------------------------------
-
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/4/5 19:20:14
10楼: FFDecoder确实没有加水印。我之前是用FFPlayer试的。
----------------------------------------------
-
作者:
男 codecoolie (CodeCoolie) ▲▲▲▲▲ -
注册会员
2020/4/17 23:18:18
11楼: 简化版阉割的功能见控件包内的文本说明

如果用demo的话,遇到阉割的功能调用,会有相应log输出
----------------------------------------------
FFmpeg for Delphi http://www.CCAVC.com http://www.DelphiFFmpeg.com
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行35.15625毫秒 RSS