如何通过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:使用动作的"提示用户输入"结合变量
- 录制动作时,在导出步骤前添加"运行脚本"步骤
- 在脚本中使用
prompt()获取用户输入的文件名前缀或路径,后续导出时拼接成完整路径 - 批量处理时,可提前将参数存入文本文件,脚本读取文本内容作为动态参数
关键说明
- 动作的动态逻辑需依托JS脚本实现参数注入
- 避免在动作中硬编码路径/文件名,所有动态部分通过脚本读取变量完成
内容的提问来源于stack exchange,提问作者Sonic Slonik
相关产品推荐
相关产品推荐

