节点handbrakejs运行代码,但不输出

所以我有以下代码:

var hbjs = require('handbrake-js'); var encodingOptions = { input: media.file.path, output: media.targetDir+"helloWorld.m4v", quality: 17, optimize: '', encoder: "x264" }; hbjs.spawn(encodingOptions) .on("begin",function(){ console.log('begin') }) .on("error", function(err){ // invalid user input, no video found etc console.log('error!') }) .on("progress", function(progress){ console.log( "Percent complete: %s, ETA: %s", progress.percentComplete, progress.eta ); }) .on("complete", function (complete) { console.log('hello'); }) 

此代码运行,一旦完成,我得到以下控制台消息:

 complete 

现在这是奇怪的部分:

progress输出不显示在控制台中,当我尝试查找文件时,没有文件:S

控制台中没有错误,没有任何表明出现问题的地方?

有没有人有任何想法,这可能是什么?

当我debugging我的完整function,我能够进入this并得到以下output

  [16:13:41] hb_init: starting libhb thread HandBrake rev5474 (2014032499) - Linux x86_64 - http://handbrake.fr 4 CPUs detected Opening uploads/codeschool_13281435328020903.mp4... [16:13:41] hb_scan: path=uploads/codeschool_13281435328020903.mp4, title_index=1 index_parse.c:191: indx_parse(): error opening uploads/codeschool_13281435328020903.mp4/BDMV/index.bdmv index_parse.c:191: indx_parse(): error opening uploads/codeschool_13281435328020903.mp4/BDMV/BACKUP/index.bdmv bluray.c:2356: nav_get_title_list(uploads/codeschool_13281435328020903.mp4) failed [16:13:41] bd: not a bd - trying as a stream/file instead libdvdnav: Using dvdnav version 5.0.3 libdvdread: Encrypted DVD support unavailable. ************************************************ ** ** ** No css library available. See ** ** /usr/share/doc/libdvdread4/README.css ** ** for more information. ** ** ** ************************************************ libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.IFO failed libdvdread:DVDOpenFileUDF:UDFFindFile /VIDEO_TS/VIDEO_TS.BUP failed libdvdread: Can't open file VIDEO_TS.IFO. libdvdnav: vm: failed to read VIDEO_TS.IFO [16:13:41] dvd: not a dvd - trying as a stream/file instead Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'uploads/codeschool_13281435328020903.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 2014-05-09 02:55:07 title : Shaping_Up_With_Angular_JS_Level_2a album_artist : Oliver Tosh encoder : Lavf54.6.100 description : This video is about Shaping_Up_With_Angular_JS_Level_2a Duration: 00:04:18.10, start: 0.000000, bitrate: 1762 kb/s Stream #0.0(eng): Video: h264 (Main), yuvj420p, 1280x720, 1547 kb/s, 29.97 fps, 30 tbr, 30 tbn, 60 tbc Metadata: creation_time : 2014-05-09 02:55:07 Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 127 kb/s Metadata: creation_time : 2014-05-09 02:55:07 Stream #0.2(und): Data: rtp / 0x20707472, 72 kb/s Metadata: creation_time : 2014-05-09 03:46:24 Stream #0.3(und): Data: rtp / 0x20707472, 9 kb/s Metadata: creation_time : 2014-05-09 03:46:24 [16:13:42] scan: decoding previews for title 1 [16:13:42] scan: audio 0x1: aac, rate=48000Hz, bitrate=127426 English (aac) (2.0 ch) Scanning title 1 of 1, preview 2, 20.00 %[16:13:42] scan: 10 previews, 1280x720, 29.970 fps, autocrop = 0/0/0/0, aspect 16:9, PAR 1:1 Scanning title 1 of 1, preview 10, 100.00 %[16:13:42] libhb: scan thread found 1 valid title(s) + title 1: + stream: uploads/codeschool_13281435328020903.mp4 + duration: 00:04:18 + size: 1280x720, pixel aspect: 1/1, display aspect: 1.78, 29.970 fps + autocrop: 0/0/0/0 + chapters: + 1: cells 0->0, 0 blocks, duration 00:04:18 + audio tracks: + 1, English (aac) (2.0 ch) (iso639-2: eng) + subtitle tracks: [16:13:42] 1 job(s) to process [16:13:42] starting job [16:13:42] work: mixdown not specified, track 1 setting mixdown Stereo [16:13:42] work: bitrate not specified, track 1 setting bitrate 160 Kbps [16:13:42] sync: expecting 7735 video frames ERROR: Invalid audio codec: 0x100 [16:13:42] render: lost time: 0 (0 frames) [16:13:42] render: gained time: 0 (0 frames) (0 not accounted for) [16:13:42] libhb: work result = 0 Encode done! HandBrake has exited. 

可能值得尝试添加一些缺less的参数? 我在Linux系统上使用handbrake-js,并按照预期的那样执行这些编码选项:

  var encodingOptions = { input: inputFile, output: outputFile, quality: 17, optimize: '', encoder: "x264" } 

那么,你会打电话给:

 hbjs.spawn(encodingOptions) .on('begin', ...)...; 

顺便说一句,你需要听on.end事件,而不是on.complete 。 从文档:

“结束”在成功完成一个编码任务时被解雇。 始终遵循一个开始的事件,在两者之间取得一些进展。

“完整”当HandbrakeCLI干净地退出时触发。 这并不意味着您的编码按计划完成。

如果你使用Ubuntu 14.04? 有一个MP4文件已知的错误:

https://github.com/75lb/handbrake-js#compatible-platforms

Ubuntu 14.04注意:因为这个原因,从14.04开始,在Ubuntu上转码为MP4失败。

这里的问题是从日志中的这一行:

ERROR: Invalid audio codec: 0x100

出于某种原因,默认的AAC编码器不能在你的系统上工作..作为一个快速的胜利,从官方列表中select一个不同的audio编码器,然后在你的encodingOptions对象中指定它。就像这样:

 var encodingOptions = { ... aencoder: "mp3" }; 
Interesting Posts