You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JS代码指定路径与文件名导出Photoshop中的MP4视频?

Photoshop JS 视频批量导出与动作动态参数设置

问题背景

需求是将两组MP4文件逐一叠加后导出为MP4,已实现MP4导入PS文档的JS代码,但存在两个问题:

  • 无法通过JS代码指定保存路径和文件名导出MP4
  • Photoshop动作无法设置动态文件名参数

现有导入代码:

function replaceContents(newFile) {
  var docRef = app.open(newFile);
  return docRef;
}

function importVideos(order_number) {
  var doc = app.activeDocument;
  var file = new File('E:/path/' + order_number + '.mp4');
  // 打开目标视频文档
  var docTemp = replaceContents(file);
  // 将视频图层复制到主文档指定组
  var layer = docTemp.activeLayer.duplicate(doc.layerSets.getByName(color), ElementPlacement.PLACEATEND);
  // 关闭临时文档
  docTemp.close(SaveOptions.DONOTSAVECHANGES);
  layer.name = order_number;
  return layer;
}

现有导出框架代码:

function Saving(color) {
  var array1 = app.activeDocument.layerSets.getByName('s');
  var array2 = app.activeDocument.layerSets.getByName(color);
  for (i = 0; i < 5; i++) {
    array1.artLayers[i].visible = true;
    for (j = 0; j < 5; j++) {
      array2.artLayers[i].visible = true;
      doExport(); // 此处需要完善导出逻辑
      array2.artLayers[i].visible = false;
    }
    array1.artLayers[i].visible = false;
  }
}

解决方案一:JS代码指定路径与文件名导出MP4

Photoshop中导出MP4需使用ExportOptionsQuickTime配置导出参数,同时通过File对象指定保存路径。修改doExport函数并调整Saving函数传递文件名参数:

完整导出实现代码

function doExport(outputPath) {
  var exportOptions = new ExportOptionsQuickTime();
  // 配置QuickTime导出参数,按需调整
  exportOptions.alphaChannel = AlphaChannelSelection.NONE;
  exportOptions.audioExportType = AudioExportType.AUDIO_NONE; // 如需保留音频可改为AUDIO_ALL
  exportOptions.quality = 100;
  exportOptions.quickTimeExportType = QuickTimeExportType.H264; // MP4对应H264编码
  exportOptions.timeSpan = new TimeSpan(0, app.activeDocument.duration); // 导出整个视频时长

  // 执行导出
  app.activeDocument.exportDocument(new File(outputPath), ExportType.QUICKTIME, exportOptions);
}

// 修改后的Saving函数,传递动态文件名
function Saving(color) {
  var array1 = app.activeDocument.layerSets.getByName('s');
  var array2 = app.activeDocument.layerSets.getByName(color);
  var outputDir = new File('E:/output/'); // 设置你的导出目录
  if (!outputDir.exists) outputDir.create(); // 目录不存在则创建

  for (var i = 0; i < 5; i++) {
    array1.artLayers[i].visible = true;
    var layer1Name = array1.artLayers[i].name;
    for (var j = 0; j < 5; j++) {
      array2.artLayers[j].visible = true; // 修正原代码循环索引错误
      var layer2Name = array2.artLayers[j].name;
      // 生成动态文件名,格式可自定义
      var outputPath = outputDir.fsName + '/' + layer1Name + '_' + layer2Name + '.mp4';
      doExport(outputPath);
      array2.artLayers[j].visible = false;
    }
    array1.artLayers[i].visible = false;
  }
}

关键说明

  • 使用ExportOptionsQuickTime配置H264编码对应MP4格式
  • 通过File对象指定导出目录,自动创建不存在的目录
  • 利用图层名称或循环索引生成动态文件名,避免文件覆盖

解决方案二:为Photoshop Actions添加动态参数

Photoshop动作本身不支持直接设置动态参数,但可通过以下两种方式实现:

方法1:脚本触发动作时传递参数

先录制基础导出动作(仅保留导出操作,不指定路径和文件名),然后通过JS脚本读取动态参数,修改PS的导出设置后触发动作:

function runActionWithDynamicParams(actionName, setName, outputPath) {
  // 存储全局变量,供动作内脚本读取
  app.putCustomOptions("DynamicOutputPath", outputPath);

  // 触发指定动作
  app.doAction(actionName, setName);
}

// 动作内需添加"运行脚本"步骤,读取全局变量并执行导出
// 动作内的脚本代码:
/*
var outputPath = app.getCustomOptions("DynamicOutputPath");
var exportOptions = new ExportOptionsQuickTime();
exportOptions.quickTimeExportType = QuickTimeExportType.H264;
app.activeDocument.exportDocument(new File(outputPath), ExportType.QUICKTIME, exportOptions);
*/

方法2:使用动作的"提示用户输入"结合变量

  1. 录制动作时,在导出步骤前添加"运行脚本"步骤
  2. 在脚本中使用prompt()获取用户输入的文件名前缀或路径,后续导出时拼接成完整路径
  3. 批量处理时,可提前将参数存入文本文件,脚本读取文本内容作为动态参数

关键说明

  • 动作的动态逻辑需依托JS脚本实现参数注入
  • 避免在动作中硬编码路径/文件名,所有动态部分通过脚本读取变量完成

内容的提问来源于stack exchange,提问作者Sonic Slonik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:10:33