ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何编写 mpv EDL 文件把多个源文件的视频片段拼接成一条连续时间线?

如何编写 mpv EDL 文件把多个源文件的视频片段拼接成一条连续时间线? 如何编写 mpv EDL 文件把多个源文件的视频片段拼接成一条连续时间线【免费下载链接】mpv Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv如果你要从几个源文件里各取一段跳过不想要的部分再把它们拼成一条连续时间线来播放mpv 提供的是 EDL 文件。在命令行上对每个文件写--start10 --length20之类参数得到的是一条播放列表而 EDL 文件把这些片段呈现给播放器时是一个虚拟文件——单一虚拟时间线seek、暂停和章节跳转都在整条线上连续工作而不是按列表项切换。完整语法定义在 DOCS/edl-mpv.rst本文按该文档给出可照做的写法。EDL 文件的格式要求首行与三个要素EDL 里每个片段segment由三个要素组成源文件file、源文件内的起始偏移start、片段长度length。文档给出的简化语法是# mpv EDL v0 filename filename,start in seconds,length in seconds写文件时这几条硬规则必须满足文件第一行必须是# mpv EDL v0声明使用格式版本 0。文档明确说明这个版本尚未冻结not frozen yet随时可能变化。start省略时使用 0length省略时使用源文件的估计剩余时长。格式比较严格除空行和注释行外不允许多余空白且必须使用 UNIX 换行符。每行属于三类之一空行或注释行以#作为行首字符其余部分忽略、以!开头的 header 条目影响文件中其他条目、其余都是 segment 条目。安全提示出于安全原因EDL 中使用相对或绝对路径以及任何协议前缀可能被阻止。主路径把两个文件的片段拼成一条时间线下面是文档原样的示例f1.mkv、f2.mkv是文档示例文件名实际操作时替换为你要播放的文件名# mpv EDL v0 f1.mkv,10,20 f2.mkv f1.mkv,40,10按文档描述播放行为是跳过 f1.mkv 的前 10 秒播放接下来的 20 秒然后切到 f2.mkv 完整播放再切回 f1.mkv跳到 40 秒处播放 10 秒之后停止。把这段内容保存为一个文件例如example.edl把它作为播放对象传给 mpvmpv example.edl同样的内容也可以不落盘用文档中列出的内联edl://URI 直接写在命令行。edl://在 DOCS/man/mpv.rst 的 URL 方案一节中描述为 Stitch together parts of multiple files and play them此时用;代替换行更方便文档说明 LF 与;等价处理mpv edl://f1.mkv,length5,start10;f2.mkv,30,20;f3.mkv如何核对拼接结果符合预期播放开始后核对两点这个 EDL 在播放器中表现为一个条目虚拟文件而不是按片段拆开的播放列表——这是它与直接在命令行传多个文件的本质区别。mpv 会为每个 segment 条目向虚拟时间线添加一个隐式章节chapter章节标题默认取条目文件名。文档给出的示例# mpv EDL v0 cap.ts,5,240 OP.mkv,0,90,titleShow Opening按文档得到的时间线有两个章节一个叫 cap.ts 覆盖 0–240 秒另一个叫 Show Opening 覆盖 240–330 秒文档示例结果。对照你写的片段检查章节列表的标题与时间段是否逐段累加正确是判断每个片段是否被正确解析的直接方式。示例第二行同时展示了title参数它为单个 segment 覆盖默认章节标题。位置参数、命名参数与特殊字符转义每个 segment 条目是一个用逗号分隔的参数列表。命名参数写作namevalue位置参数不带名字含义由位置决定——第一位置隐式是file第二位置隐式是start第三位置隐式是length。文档定义的参数名只有file、start、length三个。字符限制参数名字符串不能含%,;\n!值字符串不能含,;\n!。值里如果含有这些字符要用%N%前缀声明字节数把值括起来N是该值的字节数。文档示例# mpv EDL v0 %18%filename,with,.mkv,10,length20,param3%13%value,escaped,param4value2该示例把file设为filename,with,.mkv、start设为10、length设为20、param3设为value,escaped、param4设为value2。时间单位秒或章节号时间值默认是秒的小数。如果设置timestampschapters选项时间戳必须是整数表示从 0 开始的章节号# mpv EDL v0 file.mkv,2,4,timestampschapters文档对这个示例的解释是播放第 3 个章节0 基即 index 2到第 7 个章节index 7开始时结束即共 4 个章节。可选控制章节拷贝默认情况下源片段内的章节会被拷贝到虚拟文件的章节里并且每个片段之后还会插入一个章节。用!no_chapters头可以关闭这一行为。header 条目一般放在文件头之后、任何 segment 条目之前# mpv EDL v0 !no_chapters f1.mkv,10,20 f2.mkv边界、替代路径与限制轨道布局不同的源文件混用正常情况 EDL 里只应放布局兼容的文件。mpv 也会接受编码不同、甚至音/视/字幕轨道数量不同的条目此时由哪个条目暴露哪些虚拟轨道取决于启发式规则可以给某个条目设layoutthis强制以该条目定义轨道布局。如果某个 segment 缺少轨道会出现空洞文档说可能导致不良行为。只是想让若干完整文件依次连播可以用--merge-filesDOCS/man/options.rst 将其描述为假装传给 mpv 的所有文件被拼接成一个文件内部使用的就是 timeline/EDL 支持省去手写偏移参数。录出拼接结果--stream-record用于 EDL 文件一般不会正确工作不要指望用它把虚拟时间线直接落成磁盘文件。扩展头不要当稳定接口!mp4_dash、!new_stream、!track_meta、!global_tags、!delay_open等头都不是核心 EDL 格式的一部分文档明确它们可能随时按 mpv 内部需求被修改或删除。完整语法与所有头条目见 DOCS/edl-mpv.rstedl://URI 与其他 URL 方案见 DOCS/man/mpv.rst解析与时间线集成的实现在 demux/demux_edl.cdemuxer 注册在 demux/demux.c。【免费下载链接】mpv Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表