mpv插件实现视频的剪辑和拼接功能

最近在剪辑一些乒乓球视频,需要每一球都剪出来,再拼接在一起,但乒乓球一球就几秒钟,所以用final cut x pro那样的软件其实是需求过剩的,剪完一个视频眼镜好痛,难道就没有那种,一边看视频,一边按一个快捷键,定一个切点,每两个切点一个片段,最后自动拼接多好,然后剪出来的视频,画质无损的工具吗?

于是想到了FFmpeg,但是我总不能手动搞时间切点然后导入shell吧。

重新写一个播放器再基于它写各种视频转换插件是成本很高的,发现mpv播放器是支持lua插件的,那就直接借它的成果来用吧:)参考地址:https://mpv.io/manual/stable/#lua-scripting

思路:通过api得到视频的当前时间绑定键盘的快捷键,记录成时间列表,lua再通过shell将它导入一个文件里面保存,之后再根据时间列表生成一个shell文件,执行它,分割合并的任务就能完成了。

然后经过一天的努力,看mpv的文档写lua和shell,再一天的时间找bug和研究怎么让FFmpeg切的更准,插件终于差不多了。我只想说shell是一个好语言,它可以弥补lua在文件操作上的不足,但有时候也颇为古怪,赋值语句=号多打一个空格居然会导致赋值失败。。。

插件经使用mac osx是完美的,linux没有测,估计问题不大,windows不支持,因为得把shell脚本换成cmd脚本,有兴趣的同学,可以按照shell的写法改成cmd哦。

github地址:https://github.com/rushmj/mpv-video-cutter


同文件夹生成剪辑并拼接的视频


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Qt中,我们可以使用mpv库来实现视频倒退功能。首先,确保已经正确安装并集成了mpv库到Qt项目中。 1. 在Qt项目中创建一个QObject派生的类,用于处理mpv相关操作。 ```cpp class MpvPlayer : public QObject { Q_OBJECT public: explicit MpvPlayer(QObject *parent = nullptr); public slots: void initialize(); // 初始化mpv void loadVideo(QString filePath); // 加载视频文件 void startReverse(); // 开始倒退 void stopReverse(); // 停止倒退 private: void reverseVideo(); // 倒退视频 mpv_handle *mpv; // mpv句柄 QTimer *reverseTimer; // 用于定时倒退 }; ``` 2. 在实现文件中,首先创建一个mpv的实例,并初始化。 ```cpp #include <QTimer> MpvPlayer::MpvPlayer(QObject *parent) : QObject(parent) { mpv = mpv_create(); if (!mpv) { // 初始化mpv失败处理 } } void MpvPlayer::initialize() { // 设置mpv选项,例如窗口ID等 int32_t res = mpv_initialize(mpv); if (res < 0) { // 初始化mpv失败处理 } } ``` 3. 定义倒退视频的函数,并使用QTimer定时执行。 ```cpp void MpvPlayer::startReverse() { reverseTimer = new QTimer(this); connect(reverseTimer, &QTimer::timeout, this, &MpvPlayer::reverseVideo); reverseTimer->start(40); // 每40毫秒倒退一次,可根据需要调整 } void MpvPlayer::stopReverse() { reverseTimer->stop(); reverseTimer->deleteLater(); } void MpvPlayer::reverseVideo() { mpv_command(mpv, reinterpret_cast<const char **>("seek", "-10", "relative+", "exact")); // 根据需要调整倒退时间,此处倒退10秒 } ``` 4. 在其他地方使用MpvPlayer类来实现倒退视频功能。 ```cpp MpvPlayer player; player.initialize(); // 初始化 player.loadVideo("video.mp4"); // 加载视频文件 player.startReverse(); // 开始倒退 // 等待倒退完成 player.stopReverse(); // 停止倒退 ``` 通过以上步骤,我们可以实现Qt中使用mpv库来倒退视频功能。注意在实际项目中可能需要处理更多细节和异常情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值