yibie
1
主要是通过 mpv 和 ffmpeg 与 emacs 结合。

- 用户使用 mpv 和 Subed 模式观看视频。
- 当用户到达剪辑的开始位置时,调用
subed-clip-mark-begin
函数。 此函数将当前视频播放位置存储在一个变量中 (subed-clip-beginning
)。
- 当用户到达剪辑的结束位置时,调用
subed-clip-mark-end
函数。 此函数:
- 获取当前的视频播放位置。
- 使用存储的开始位置和当前结束位置,构建一个 ffmpeg 命令行。
- 该 ffmpeg 命令指定输入视频文件,开始时间 (
-ss
),结束时间 (-to
),可选的字幕处理 (-filter:v
如果用户指定嵌入字幕),视频编码器 (-c:v libx264
),音频编码器 (-c:a copy
表示直接复制音频流),和输出文件名 (clip.mp4
)。
- 使用 Emacs 的
call-process
函数执行 ffmpeg 命令。
- ffmpeg 裁剪视频,并将结果保存到
clip.mp4
文件中。
10 个赞
@yibie @manateelazycat 我还真尝试过用 EAF 做一个 eaf-video-editor, 根据 eaf-video-player 改的。
- 它把 eaf-video-player 的播放进度,改为一个剪辑栏,并且通过竖线展示“关键帧”;
- 按
c
把当前时间点设置为 “剪辑起始/结束” 点。如图灰色的框框,表示哪些时间片需要导出;
- 剪辑数据存储倒 org 文件当中,也可以编辑 org 文件的内容来微调;
- 按
e
export 即可导出剪辑的文件。
剪辑页面:
存储为 org 文本:
还有一些小功能例如:
- 在目标视频里添加纯文本帧:[[eaf-ve-text:Hello:10]] 添加10 秒显示 Hello;
- 导出前预览剪辑结果:跳过为标记的时间片段。
6 个赞
emui8
5
我也曾经想实现一个类似的,但是用ffmpeg截取片段总是不精确,好像它只能通过关键帧定位,而不是精确的时间戳,所以最后还是使用更专业的软件了,可以截取非关键帧
Wow, 我把 eaf-video-editor 添加到首页和自动安装脚本了。
是不是直接实现ffmpeg 的elisp bind 更好呀,感觉套工具并不好用
没用,Elisp这边没有多线程, 你接什么过来都会在Emacs这边卡住。
你用EAF框架,你想做啥都可以。