- 选出很多片段, 每个片段来自一个动画原片
- 再把所有这些片段串联起来 (特效另说)
- 最后附上 BGM 音轨
一共三步; 要完成第一步, 有个神奇的开源项目叫 avconv (衍生自大名鼎鼎而且同样神奇的 ffmpeg), 这个项目允许开发者使用一行命令行指令从一个视频中剪切出一小段内容, 具体方法是
- avconv -ss 片段开始时间 -i 输入视频文件 -t 片段持续时长
不用多说, 这个方法虽直接, 但是一个 MAD 动辄上百个片段, 每个都手动打一遍这个命令会非常麻烦, 因此, madmagia 项目的核心就是利用一个解析器将一个结构更简单的顺序脚本文件内容转换成上面那样的指令的序列, 并自动调用 mencoder (另一个神奇的视频编码解码项目, 名满天下的 mplayer 就是此项目的应用程序之一) 合并这些片段和 BGM, 比如, 以下两行
分别表示从第 2 个视频第 10:30 秒剪出 5 秒, 然后接上从第 4 个视频第 00:20 开始的 2 秒. 通常一个视频需要编写相当长的脚本, 比如上面给出的示例视频共有接近 300 个片段, 完整脚本文件参见这里. 因为 MAD 往往会长达好几分钟, 因此引入了分节机制, 允许仅制作从长长的脚本中仅选出一部分制作, 观看, 调试, 节省时间. 具体的用户应用文档戳这里. 现状. 目前项目的短版是缺乏特效, 主要原因是没找到合适的 avconv 参数. 已经支持的简单特效包括
- 2 10:30 5
- 4 00:20 2
- 播放某一帧内容
- 拉长/缩短一段视频内容以与音频同步
- 水平翻转视频画面内容
- 画面渐变切换
- 画面重叠
- 渐暗/渐亮/闪烁
- 画面剪切
- 视频编码器 mpeg4 (目前已测试对其它视频编辑工具兼容性最好, 而且短分镜最同步的编码器) 对某些 mp4 文件不支持; 在这种情况下, 建议使用同样画质的 Mkv 原片
- video_slice.py 视频分割, 画面提取的实现
- audio_slice.py 音频分割的实现, 测量音频文件长度也在这里
- sequence.py 剪切脚本文本分析实现
- avmerge.py 视频音频合并
- shell.py 对 Python 的 Popen 函数的同步化封装
- config.py 配置文件解析
- init.py 初始化, 新建空目录和样例文件
- partial.py 视频分段输出, 长度检视, 片段导出
- view_frame.py 视频单帧查看
- export_srt.py 输出 SRT 字幕或 LRC 歌词