VapourSynth常用插件——L-SMASH Source 读取视频

文章目录[x]
  1. 1:插件简介
  2. 2:插件下载
  3. 3:使用方法
  4. 4:注意事项

大家好,我是Ace,这篇文章会介绍VapourSynth读取视频的插件L-SMASH的使用方法,希望大家能够喜欢。

插件简介

在VapourSynth中,读取视频是第一步,因此首先介绍读取视频的插件。所有的Source插件可以到官网页面查看,比较常用的就是L-SMASH Source,可以正确地按照原位深读取视频。

插件下载

请查看VapourSynth教程的《VapourSynth 插件介绍及常用插件下载》篇,里面的插件包带有该插件。

使用方法

示例代码:

import vapoursynth as vs
from vapoursynth import core

# 写上你想要读取的视频的路径(绝对路径和相对路径都可以)
file_path = "00002.m2ts"

# 读取视频
src = core.lsmas.LWLibavSource(file_path, threads=1)

# 输出视频
src.set_output()

在VSEdit中运行该代码,可以得到紫罗兰TV版的最后一集最后一个分镜。

嗯?怎么又是这段代码?别着急,现在我们要详细讲解一下其中的src = core.lsmas.LWLibavSource(file_path, threads=1)这一行。

根据L-SMASH的文档,我们发现这个函数其实长这个样

LWLibavSource(string source, int stream_index = -1, int threads = 0, int cache = 1, int seek_mode = 0, int seek_threshold = 10, int dr = 0, int fpsnum = 0, int fpsden = 1,  int variable = 0, string format = "", int repeat = 0, int dominance = 1, string decoder = "")

我们调用函数的时候,只传递了两个参数,而且第一个参数没有写原参数名,但是第二个写了原参数名。

这是因为在Python中,在进行函数的参数传递时,存在两种参数传递方法,一种是位置参数传递,另一种是关键字参数传递。位置参数传递即为按照原参数的位置,直接将参数按照位置顺序传递进去。关键字参数就是按照"形参名=实参"的方式进行传递,并且关键字参数都有一个初始值,可以忽略不用赋值。

推荐大家结合使用位置参数和关键字参数,个人习惯是对于一个很明显的参数使用位置参数,后面的参数均使用关键字参数,能够使得函数的调用非常清晰。

回到正题,在该函数的参数中,在绝大多数的使用情况中,我们只会用到source和threads两个参数。

source参数需要传入的是源文件的路径。

threads代表去解码流的线程数(线程在计算机中是可以并行运行的),若按照默认参数传入0,L-SMASH将会自动判断并决定该解码线程数。

那为什么需要将threads赋值为1呢?因为如果在多线程的电脑上使用该插件读取视频,并且该视频总帧数小于该插件自动分配的线程数,将会无故报错和闪退。

注意事项

在第一次通过该插件读取视频时,会在视频的同目录生成一个该视频的索引文件(以.lwi为扩展名),该索引文件会预读一次视频的所有帧,将每帧的位置信息存入,在之后再次读取的时候,能够快速地通过索引文件中地信息快速读取视频帧。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

20 − 17 =