如何在 Photoshop 中快速将数百个图层变成动画续集?

平面设计 adobe-photoshop 动画片
2022-02-13 20:06:29

我的印象是photoshop只支持手动调整时间轴,一次只能编辑一帧。如果我有数百层,创建一个只有几秒钟的 gif 需要几天时间。我怀疑这就是 gif 的制作方式。有没有更快的方法将图层变成动画续集?

2个回答
  1. Window > Timeline
  2. 单击Create Video Timeline按钮。
  3. 时间轴面板菜单选择Convert Frames > Covert to Frame Animation
  4. 时间轴面板菜单选择Make Frames from Layers

从那里你必须手动改变时间、补间、序列等。

我写了一个脚本,因为我厌倦了手动编辑它,给你。

//make a video timeline
// =======================================================
var idconvertTimeline = stringIDToTypeID( "convertTimeline" );
    var desc4 = new ActionDescriptor();
executeAction( idconvertTimeline, desc4, DialogModes.NO );




var layerName = app.activeDocument.activeLayer.name;
var firstLayer = app.activeDocument.activeLayer;
//alert(layerName);
var secondLayerName;
var secondLayer;
var thirdLayerName;
var thirdLayer;

secondLayerName = layerName.replace("(1)","(2)");
//alert(secondLayerName);
secondLayer = app.activeDocument.layers.getByName(secondLayerName);
//alert(secondLayer);   

// =======================================================
var idDplc = charIDToTypeID( "Dplc" );
    var desc6 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref2 = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref2.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
    desc6.putReference( idnull, ref2 );
executeAction( idDplc, desc6, DialogModes.NO );

firstLayer.visible = false;

for(var i = 2; i < 38; i++){
var str = "(" + i + ")";
var str2 = "(" + (i+1) + ")"; 

thirdLayerName = secondLayerName.replace(str,str2);
//alert(thirdLayerName);
thirdLayer = app.activeDocument.layers.getByName(thirdLayerName);
//alert(thirdLayer);




// =======================================================
var idDplc = charIDToTypeID( "Dplc" );
    var desc7 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref3 = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref3.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
    desc7.putReference( idnull, ref3 );
executeAction( idDplc, desc7, DialogModes.NO );

secondLayer.visible = false;

secondLayerName = thirdLayerName;
secondLayer = thirdLayer;   


}