特定のタイムラインでYoutubeビデオのサムネイルをキャプチャしたい。(例:3.2秒)node.jsでytdlとfluent-ffmpegを使用して実装しました。ダウンロード終了時にサムネイルをキャプチャすることができました。
var fs = require('fs');
var ytdl = require('ytdl');
var ffmpeg = require('fluent-ffmpeg');
var videostream = fs.createWriteStream('video.flv');
var myytdl = ytdl('http://www.youtube.com/watch?v=A02s8omM_hI');
myytdl.pipe(videostream);
videostream.on('close',function() {
console.log('Downloading complete...');
var proc = new ffmpeg({ source: 'video.flv', nolog: true })
.withSize('150x100')
.takeScreenshots(1, '/home/test', function(err) {
console.log(err || 'Screenshots were saved');
});
});
ただし、ダウンロード中にサムネイルをキャプチャするように実装できませんでした。私がやりたいことの基本的な考え方は以下の通りです。
- X秒から始まるYoutubeビデオをダウンロードしてください。(働いた)
- 読み取り/書き込み可能(デュプレックス)メモリストリームにパイプします(アドバイスが必要)
- ダウンロード中に、ストリームに最初のフレーム(X秒)をキャプチャするのに十分なデータがあるかどうかを確認します。(アドバイスが必要)
- 最初のフレームをキャプチャしてから、ダウンロードを停止します
2の場合、node.jsにはv0.9.xの登場時にデュプレックスストリームが含まれることに気付きましたが、正しく機能していないようです。箇条書き2、3を実装する良いアイデアを持っている人はいますか?