コンポジションにあらかじめテロップ用のレイヤーを作成する TEXT1、TEXT2 など
WAVファイルを並べ終わって、コンポジションを選択した状態で下記を実行
CopyLayerNames.jsx
// 選択しているコンポジションのレイヤー名を取得し、aepファイルと同じディレクトリにテキストファイルを生成するスクリプト
(function () {
function getLayerNamesFromComp(comp) {
var layerNames = [];
for (var i = 1; i <= comp.numLayers; i++) {
layerNames.push(comp.layer(i).name);
}
return layerNames;
}
function saveToFile(layerNames, filePath) {
var file = new File(filePath);
if (file.open("w")) {
file.write(layerNames.join("\n"));
file.close();
// 出力ファイルを開く場合
file.execute();
return true;
} else {
return false;
}
}
// スクリプトのメイン処理
app.beginUndoGroup("Save Layer Names to File");
var activeItem = app.project.activeItem;
if (activeItem && activeItem instanceof CompItem) {
var layerNames = getLayerNamesFromComp(activeItem);
if (layerNames.length > 0) {
var projectFile = app.project.file; // 現在のプロジェクトファイル (.aep)
if (projectFile) {
var projectPath = projectFile.path; // .aepファイルのディレクトリ
var textFilePath = projectPath + "/" + "Info_LayerNames_" + activeItem.name + ".txt";
if (saveToFile(layerNames, textFilePath)) {
alert("レイヤー名が以下のファイルに保存されました:\n" + textFilePath);
} else {
alert("ファイルの保存に失敗しました。");
}
} else {
alert("プロジェクトファイルが保存されていません。プロジェクトを保存してください。");
}
} else {
alert("選択したコンポジションにレイヤーがありません。");
}
} else {
alert("コンポジションを選択してください。");
}
app.endUndoGroup();
})();
telop_imp.csv を作成する
AudioLayer TextLayer Telop
WAVのレイヤー名をコピーしてAudioLayer 列に貼り付ける 下記のようなCSVファイルを作成する
AudioLayer TextLayer Telop
07_03_また、逢いましょう。_タカハシ.wav TEXT3 また、逢いましょう
06_02_さよなら_タカハシ.wav TEXT1 さよなら
05_01_ありがとう!_タカハシ.wav TEXT3 ありがとう
04_00_こんにちわ_タカハシ.wav TEXT2 こんにちわ
03_また、逢いましょう。_タカハシ.wav TEXT1 また、逢いましょう
02_さよなら_タカハシ.wav TEXT3 さよなら
01_ありがとう!_タカハシ.wav TEXT2 ありがとう
00_こんにちわ_タカハシ.wav TEXT1 こんにちわ
コンポジションを作成して下記を実行する
telopFromCsv.jsx
(function () {
// 現在選択しているコンポジションを取得
var comp = app.project.activeItem;
// コンポジションが選択されていることを確認
if (comp && comp instanceof CompItem) {
app.beginUndoGroup("Create Telop Text Layers");
// オーディオファイルのレイヤー情報を格納する配列
var audioLayerData = [];
// コンポジション内のレイヤーを確認
for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i);
// オーディオファイルレイヤーを探し、その情報を配列に格納
if (layer instanceof AVLayer && layer.hasAudio) {
audioLayerData.push({
name: layer.name,
inPoint: layer.inPoint,
outPoint: layer.outPoint,
index: i // レイヤーのインデックス
});
}
}
// ファイル選択ダイアログでCSVファイルを選択
var csvFile = File.openDialog("CSVファイルを選択してください", "*.csv");
if (!csvFile) {
alert("CSVファイルが選択されていません。");
app.endUndoGroup();
return;
}
var telopData = [];
csvFile.open("r");
// ヘッダ行をスキップ
csvFile.readln();
// CSVを読み込み、配列に格納
while (!csvFile.eof) {
var line = csvFile.readln();
var columns = line.split(",");
telopData.push({
audioLayer: columns[0],
textLayer: columns[1],
telop: columns[2]
});
}
csvFile.close();
// telopDataの順番を逆にする
telopData.reverse();
// 新しいレイヤーが既存のインデックスを保ちながら追加されるように設定
var currentLayerIndex = comp.numLayers; // 新しいレイヤーを追加するインデックス
// CSVデータに基づいてテキストレイヤーを複製し、テキストを変更
for (var j = 0; j < telopData.length; j++) {
var data = telopData[j];
// オーディオレイヤーを検索 (findの代わりにforループで手動で検索)
var audioLayer = null;
for (var k = 0; k < audioLayerData.length; k++) {
if (audioLayerData[k].name === data.audioLayer) {
audioLayer = audioLayerData[k];
break;
}
}
if (!audioLayer) {
alert("オーディオレイヤー '" + data.audioLayer + "' が見つかりません。");
continue;
}
// 対応するテキストレイヤーを探す
var textLayer = comp.layer(data.textLayer);
if (!textLayer) {
alert("テキストレイヤー '" + data.textLayer + "' が見つかりません。");
continue;
}
// テキストレイヤーを複製
var newTextLayer = textLayer.duplicate();
newTextLayer.name = data.telop;
// 複製したテキストレイヤーのインポイントとアウトポイントを設定
newTextLayer.inPoint = audioLayer.inPoint;
newTextLayer.outPoint = audioLayer.outPoint;
// テキストの内容を変更
newTextLayer.text.sourceText.setValue(data.telop);
// 新しいレイヤーをコンポジションの一番上に移動
newTextLayer.moveToBeginning();
}
app.endUndoGroup();
} else {
alert("コンポジションを選択してください。");
}
})();