2017-07-13 4 views
0

fluent-ffmpegを使用して、私はノードを使って一緒に編みたいビデオの動的リストを持っています。以下のコードは動作しますが、手作業で書かれています。これをチェーン関数でどのようにループに変換するのですか?ダイナミックデータでチェーンメソッドをループする方法は?

私はeval()を調べて、それがうまくいかず、結束している約束が私が探しているものであるかどうかは分かりません。

ffmpeg() 
    .input('video/video_after0.mp4') 
    .input('video/video_after1.mp4') 
    .input('video/video_after2.mp4') 
    .input('video/video_after3.mp4') 
    .input('video/video_after4.mp4') 
    .input('video/video_after5.mp4') 
    .input('video/video_after6.mp4') 
    .input('video/video_after7.mp4') 
    .input('video/video_after8.mp4') 
    .input('video/video_after9.mp4') 
    .input('video/video_after10.mp4') 
    .input('video/video_after11.mp4') 
    .input('video/video_after12.mp4') 
    .input('video/video_after13.mp4') 
    .input('video/video_after14.mp4') 
    .input('video/video_after15.mp4') 
    .input('video/video_after16.mp4') 
    .input('video/video_after17.mp4') 
    .input('video/video_after18.mp4') 
    .input('video/video_after19.mp4') 
    .input('video/video_after20.mp4') 
    .input('video/video_after21.mp4') 
    .input('video/video_after22.mp4') 
    .input('video/video_after23.mp4') 
    .input('video/video_after24.mp4') 
    .input('video/video_after25.mp4') 
    .input('video/video_after26.mp4') 
    .input('video/video_after27.mp4') 
    .input('video/video_after28.mp4') 
    .input('video/video_after29.mp4') 
    .input('video/video_after30.mp4') 
    .input('video/video_after31.mp4') 
    .input('video/video_after32.mp4') 
    .input('video/video_after33.mp4') 
    .input('video/video_after34.mp4') 

    .on('error', function(err) { 
    console.log('An error occurred while merging video files: ' + err.message); 
    }) 
    .on('end', function() { 
    logger.info('****** STEP 6 ENDED ******'); 
    callback(null); 
    }) 
    .mergeToFile('video/video_after.mp4', '/video/temp'); 

はここeval()を使用しての私の試みですが、それは動作しません:

var ffmpegInputCommand = "ffmpeg()"; 

    // For Loop to create the ffmpeg().input() command for multiple inputs: 
    async.forEach(array, function(data, done) { 
    if (data.id < array.length - 1) { 
     ffmpegInputCommand += ".input('" + videoAfter + data.id + ".mp4')"; 
    } 
    done(); 
    }, function (err) { 
    if (err) throw err; 
    else { 
     eval(ffmpegInputCommand).on('error', function(err) { 
     console.log('An error occurred while merging video files: ' + err.message); 
     }) 
     .on('end', function() { 
     logger.info('****** STEP 6 ENDED ******'); 
     callback(null); 
     }) 
     .mergeToFile('video/video_after.mp4', '/video/temp'); 
    } 
    }); 
    // End: For-Loop 
} 

変数は、この上記のコードの前に定義されていました。

+1

ループを使用しようとする試みを示し、それがうまくいかなかった理由/理由を説明してください。今、あなたの質問はあなたにループコードを書くように頼んでいるだけです。 – zero298

+0

私は 'eval'試行で更新しました – ksy

+0

さて、なぜあなたは' eval() 'を使う必要があると思いますか? – zero298

答えて

1

なぜ簡単なループを作ってみませんか?

start = 0; 
max = 35; 
while (start < max) { 
    fname = 'video/video_after'+str(start)+'.mp4' 
    ffmpeg().input(fname) 
    start += 1; 
} 
0

それは、特定の理由のためにチェーンに持っている場合は、次のような何かを試みることができる:

var i = 0; 
var ffmpeg = ffmpeg(); 
while (i < 35) { 
    ffmpeg = ffmpeg.input('video/video_after'+str(start)+'.mp4'); 
    i++; 
} 

ffmpeg.on('error', function(err) { 
    console.log('An error occurred while merging video files: ' + err.message); 
}) 
.on('end', function() { 
    logger.info('****** STEP 6 ENDED ******'); 
    callback(null); 
}) 
.mergeToFile('video/video_after.mp4', '/video/temp'); 
0

本当に戻り値または前のinput()にチェーンinput()に必要がある場合は、私が使用することをお勧めしますa reduce()。あなたは最も確かにeval()を使用する必要はありません。

  1. 連結するファイルの配列を作成します。普段
  2. チェーンmergeToFile()呼び出しを行うようffmpeg()
  3. reduce()それら
  4. は、あなたの加入者を接続します。

次のことを考えてみましょう:

let files = []; 
for (let i = 0; i < 34; i++) { 
    files.push(`video/video_after${i}.mp4`); 
} 

files 
    .reduce((prev, curr) => prev.input(curr), ffmpeg()) 
    .on("error", err => console.log(`An error occurred while merging video files: ${err.message}`)) 
    .on("end",() => { 
     logger.info("****** STEP 6 ENDED ******"); 
     callback(null); 
    }) 
    .mergeToFile('video/video_after.mp4', '/video/temp'); 

私はあなたのハングアップだと思う「どのように私は、様々な文字列の動的なリストを構築します」です。上記の例では、ループと文字列の連結、またはテンプレートリテラルを使用します。私はcallbackがどこに定義されているのか分からないが、意図したとおりに動作していると思う。

関連する問題