Open yumetodo opened 1 month ago
node generate-ass.js
でassから字幕付き動画を生成できることを確認
generate-ass.js
const fs = require('fs');
const ffmpeg = require('fluent-ffmpeg');
// 字幕データ(例:テキストと表示時間)
const subtitles = [
{ start: '0:00:01.00', end: '0:00:05.00', text: 'Hello, this is the first subtitle!' },
{ start: '0:00:06.00', end: '0:00:10.00', text: 'And this is the second subtitle!' },
];
// ASSファイルのヘッダー情報
const assHeader = `
[Script Info]
Title: Node.js Generated Subtitle
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,-1,0,1,1.5,0,2,10,10,10,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
`;
// 字幕をASS形式にフォーマット
const assBody = subtitles.map((subtitle) => {
return `Dialogue: Marked=0,${subtitle.start},${subtitle.end},Default,,0,0,0,,${subtitle.text}`;
}).join('\n');
// 完全なASSファイル内容
const assContent = assHeader + assBody;
// ASSファイルを保存
const assFilename = 'output.ass';
fs.writeFileSync(assFilename, assContent, 'utf8');
// 動画ファイルと出力ファイルの指定
const inputVideo = 'input_video.mp4'; // ここに元の動画ファイルのパスを指定
const outputVideo = 'hoge.mp4';
// fluent-ffmpegでASSファイルと動画を結合
ffmpeg(inputVideo)
.outputOptions('-vf', `ass=${assFilename}`) // 字幕フィルターを使ってASS字幕を追加
.save(outputVideo) // 出力する動画ファイル
.on('end', () => {
console.log('字幕付き動画が正常に生成されました');
})
.on('error', (err) => {
console.error('エラーが発生しました: ', err);
});
字幕の合成: Done KeyboardShortcutの合成: Ready
手元にffmpegを落としてきて字幕を埋め込んでみた
サンプルのASS
実行したコマンド
生成された動画 https://github.com/user-attachments/assets/6cd585d5-b79d-4f71-8b1d-6e527d8fffb5