位置0视频长度处JSON中的意外令牌G

我正在使用video-length来获取Node.js中的视频时长。该代码在Centos中运行良好。

在Ubuntu 16.x中,它显示错误:

ValueErrorTraceback (most recent call last)
<ipython-input-87-5db669cee585> in <module>()
     10 plt.scatter(xs,ys)
     11 plt.plot(xs,[f1(x,0.5) for x in xs])
---> 12 popt,pcov = curve_fit(f1,xs,ys,[0.3])
     13 plt.plot(xs,popt[0]) for x in xs])

/usr/lib64/python2.7/site-packages/scipy/optimize/minpack.pyc in curve_fit(f,xdata,ydata,p0,sigma,absolute_sigma,check_finite,bounds,method,jac,**kwargs)
    749         # Remove full_output from kwargs,otherwise we're passing it in twice.
    750         return_full = kwargs.pop('full_output',False)
--> 751         res = leastsq(func,Dfun=jac,full_output=1,**kwargs)
    752         popt,pcov,infodict,errmsg,ier = res
    753         cost = np.sum(infodict['fvec'] ** 2)

/usr/lib64/python2.7/site-packages/scipy/optimize/minpack.pyc in leastsq(func,x0,args,Dfun,full_output,col_deriv,ftol,xtol,gtol,maxfev,epsfcn,factor,diag)
    381     if not isinstance(args,tuple):
    382         args = (args,)
--> 383     shape,dtype = _check_func('leastsq','func',func,n)
    384     m = shape[0]
    385     if n > m:

/usr/lib64/python2.7/site-packages/scipy/optimize/minpack.pyc in _check_func(checker,argname,thefunc,numinputs,output_shape)
     25 def _check_func(checker,26                 output_shape=None):
---> 27     res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
     28     if (output_shape is not None) and (shape(res) != output_shape):
     29         if (output_shape[0] != 1):

/usr/lib64/python2.7/site-packages/scipy/optimize/minpack.pyc in func_wrapped(params)
    461     if transform is None:
    462         def func_wrapped(params):
--> 463             return func(xdata,*params) - ydata
    464     elif transform.ndim == 1:
    465         def func_wrapped(params):

<ipython-input-87-5db669cee585> in f1(x,a)
      1 from scipy.optimize import minimize
      2 def f1(x,a):
----> 3     m =  minimize(f2,0.,args=(x)).x[0]
      4     return (x + a + m)**2
      5 def f2(theta,a):

/usr/lib64/python2.7/site-packages/scipy/optimize/_minimize.pyc in minimize(fun,hess,hessp,constraints,tol,callback,options)
    595         return _minimize_cg(fun,**options)
    596     elif meth == 'bfgs':
--> 597         return _minimize_bfgs(fun,**options)
    598     elif meth == 'newton-cg':
    599         return _minimize_newtoncg(fun,/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.pyc in _minimize_bfgs(fun,norm,eps,maxiter,disp,return_all,**unknown_options)
    961     else:
    962         grad_calls,myfprime = wrap_function(fprime,args)
--> 963     gfk = myfprime(x0)
    964     k = 0
    965     N = len(x0)

/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.pyc in function_wrapper(*wrapper_args)
    291     def function_wrapper(*wrapper_args):
    292         ncalls[0] += 1
--> 293         return function(*(wrapper_args + args))
    294 
    295     return ncalls,function_wrapper

/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.pyc in approx_fprime(xk,f,epsilon,*args)
    721 
    722     """
--> 723     return _approx_fprime_helper(xk,args=args)
    724 
    725 

/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.pyc in _approx_fprime_helper(xk,f0)
    661         ei[k] = 1.0
    662         d = epsilon * ei
--> 663         grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]
    664         ei[k] = 0.0
    665     return grad

ValueError: setting an array element with a sequence.

我已使用以下代码获取持续时间:

SyntaxError: Unexpected token G in JSON at position 0
    at JSON.parse (<anonymous>)
    at VideoLength (/.../node_modules/video-length/video-length.js:14:24)

我也安装了mediainfo。如果我做错任何事情,请指导我。

调试video-length.js后,我发现在centos和Ubuntu中获得的stdout有以下差异。 在Centos中:

const VideoLength = require('video-length');    
VideoLength(video,{
                bin: '/usr/bin/mediainfo',extended: true
            })
            .then(data => {
                console.log("data: %j",data)
                duration = data['duration']
                console.log("duration: " + duration)
            })
            .catch(err => {
                console.log(err);
            })

在Ubuntu中:

{
"media": {
"@ref": "/var/kurento/tmp/30/27122019/1514kurento-recording.webm","track": [
{
"@type": "General","VideoCount": "1","FileExtension": "webm","Format": "WebM","Format_Version": "2","FileSize": "157078809","FrameRate": "25.028","IsStreamable": "Yes","Encoded_Date": "UTC 2019-12-27 09:44:33","File_Modified_Date": "UTC 2019-12-27 10:56:31","File_Modified_Date_Local": "2019-12-27 16:26:31","Encoded_Application": "GStreamer Matroska muxer","Encoded_library": "GStreamer matroskamux version 1.8.1.1","extra": {
"IsTruncated": "Yes"
}
},{
"@type": "Video","StreamOrder": "0","ID": "1","UniqueID": "2934041311738436184","Format": "VP8","CodecID": "V_VP8","Width": "1920","Height": "1080","PixelAspectRatio": "1.000","DisplayAspectRatio": "1.778","FrameRate_Mode": "CFR","Compression_Mode": "Lossy","Delay": "0.000","Title": "Video","Language": "en","Default": "Yes","Forced": "No"
}
]
}
}

不知道结构差异的原因。仍在调试原因。任何帮助将不胜感激。

annzhang123456 回答:位置0视频长度处JSON中的意外令牌G

您最好自己发现问题,因为您可以看到Ubuntu中的stdout不是有效的JSON字符串,并且lib中的代码执行JSON.parse来解析为对象,因此引发错误。 enter image description here

我建议您不要使用该库,因为该库本身未经测试。如果您还有其他选择,建议您这样做:https://github.com/caffco/get-video-duration

安装

$ npm install --save get-video-duration

用法

const { getVideoDurationInSeconds } = require('get-video-duration')

// From a local path...
getVideoDurationInSeconds('video.mov').then((duration) => {
  console.log(duration)
})

// From a URL...
getVideoDurationInSeconds('http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4').then((duration) => {
  console.log(duration)
})

// From a readable stream...

const fs = require('fs')
const stream = fs.createReadStream('video.mov')

getVideoDurationInSeconds(stream).then((duration) => {
  console.log(duration)
})     
本文链接:https://www.f2er.com/2719279.html

大家都在问