Abspann für mehrere Videoclips mit verschiedenem Inhalt Automatisieren

So in etwa. siehe Anhang
evtl. noch mein Logo; muss aber nicht sein.

Weißt du zufälligerweise trotzdem, wie man den Interpreten in eine extra Spalte kriegen würde. Rein aus Interesse. Sowas könnte man mal gebrauchen.
 

Anhänge

  • Vorspann.jpg
    Vorspann.jpg
    5 KB · Aufrufe: 19
Zuletzt bearbeitet:
http://www.phreekz.de/wordpress/201...-dateinamen-lesen-und-als-textlayer-ausgeben/

scripting_Dateiname_Layer.jpg
Javascript:
// Example of Reading all Files in a Folder 
// and creating Textlayers from its filenames

// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop

// in case we double clicked the file
app.bringToFront();

// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 0;
// debugger; // launch debugger on next line

var strtRulerUnits = app.preferences.rulerUnits;
var strtTypeUnits = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.POINTS;

var docRef = app.documents.add(1280, 720, 72);
var selRef = app.activeDocument.all;
        
var textColor = new SolidColor();
textColor.rgb.red  = 255;
textColor.rgb.green = 0;
textColor.rgb.blue = 0;
    
// suppress all dialogs
app.displayDialogs = DialogModes.NO;

try {
	// Ask user for input folder
	var inputFolder = Folder.selectDialog("select Folder");
	var fileList = inputFolder.getFiles("*.*");
	for (var i = 0; i < fileList.length; i++) {
		// split example
		var explodedName = fileList[i].name.split(".");
		var newText = explodedName[0] +String.fromCharCode(13)+"from"+String.fromCharCode(13)+explodedName[1];
		//var newText = fileList[i].name;
		var newTextLayer = docRef.artLayers.add();
		newTextLayer.kind = LayerKind.TEXT;
		newTextLayer.textItem.contents = newText;
		newTextLayer.textItem.position = Array(240, 10+i*36);
		newTextLayer.textItem.size = 12;
		newTextLayer.textItem.color = textColor;
	}
}
catch (exception) {
	alert(exception);
}
finally {
	app.displayDialogs = startDisplayDialogs;
}


app.preferences.rulerUnits = strtRulerUnits;
app.preferences.typeUnits = strtTypeUnits;
docRef = null;
textColor = null;
newTextLayer = null;
Das ist ein simples Beispiel. Ordner auswählen. Es werden die Dateinamen ausgelesen, bei mir am Punkt . gesplittet und in ein Textlayer kodiert. Du müsstest nun die Hintergrundfarbe setzen/füllen, den split-String ändern, den Textlayer ändern und jeweils pro Schleifendurchgang zB als jpg speichern.

Mach Dir ne Datei mit Endung jsx, kopier das Beispielscript hinein und mit Doppelklick darauf müsste Photoshop seinen Job starten.

-> Das ist der erste Teil, die Bilddateien erstellen. Danach müsstest Du sie zB mit AVISynth mit den Videodateien mergen.

mfg chmee
 
Hallo,

Vielen Dank für deine Arbeit.
Bei mir werden leider die Leerzeichen als "%20" ausgegeben. Und die Dateiendung bleibt bestehen.
Beispiel:

Shapes%20In%20Motion%20
from
%20Pavel%20Pavlov.mp4

Wie kann ich die Hintergrundfarbe ändern?
Wie kann ich ein Bild einfügen, wie z.B. oben das "CC" Logo?
Wie bringe ich es dazu die Datei als jpeg zu speichern?

Schriftart und Position ändern habe ich hinbekommen.

Danke und viele Grüße
Tom
 
Nun. Der essentielle Teil meinerseits war, Dir aufzuzeigen, dass es geht. Ich hab nicht wirklich die Zeit, Dir die Lösung zu erarbeiten.

Da Du nun mit Javascript in Kontakt gekommen bist, macht es Sinn im Befehlssatz der Sprache zu stöbern.
(A) %20 durch Leerzeichen ersetzen - replace() - das hilft auch bei der Frage, was mit der Endung geschehen soll - am Besten durch Nichts ("") ersetzen :)
(B) Für alle weitereren Fragen gibt es die Samples im Photoshop/Scripting-Ordner. Zudem ist dort der Befehlsschatz der Adobe-API beschrieben.

Es gibt ein Forum, das sich nur mit dem Adobe Scripting beschäftigt. Viele Fragen und Antworten gibt es dort. http://www.ps-scripts.com/bb/index.php

Hier noch ein älteres Beispiel, wie man Dateien speichert: http://www.phreekz.de/wordpress/2009/03/photoshop-scripting-in-jsx/

mfg chmee
 
Vielen Dank für die Hilfe, chmee.

Ich nehme an, dass http://www.phreekz.de dein blog ist? Würde da gerne den "Spenden"-Button in Anspruch nehmen.
Weil von "Vielen Danks" hast du wahrscheinlich schon den Keller voll^^

viele Grüße
Tom
 
Wenn ich helfen kann.. :) Betrachte es als egoistischen Trieb, sowas wie ein Mutter-Theresa-Komplex :) (Danke übrigens)

mfg chmee
 
Also bei mir klappt gar nichts. :(
Die Hintergrundfarbe ändert sich nicht, obwohl dies in einem Beispiel so gezeigt wird.

Code:
var bgColor = new SolidColor();
bgColor.rgb.red = 140;
bgColor.rgb.green = 125;
bgColor.rgb.blue = 120;
backgroundColor = bgColor;
 
var docRef = app.documents.add(1280, 720, 72, DocumentFill.BACKGROUNDCOLOR);

Die Leerzeichen lassen sich nicht herstellen "%20":

Code:
newTextLayer.textItem.contents = newText.replace ("%20", " ");

Und das Speichern funktioniert auch nicht.
Es kommt folgende Skriptwarnung:
"Syntaxfehler: Allgemeiner Photoshop-Fehler. Die Funktion steht in dieser Version vo PS möglicherweise nicht zur Verfügung.
-Konnte keine Kopie speichern unter "\...\Shapes in Motion
from
...", weil der Dateiname nicht gültig war."






Code:
// Example of Reading all Files in a Folder 
// and creating Textlayers from its filenames
 
// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop
 
// in case we double clicked the file
app.bringToFront();
 
// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 0;
// debugger; // launch debugger on next line
 
var strtRulerUnits = app.preferences.rulerUnits;
var strtTypeUnits = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.POINTS;


var bgColor = new SolidColor();
bgColor.rgb.red = 140;
bgColor.rgb.green = 125;
bgColor.rgb.blue = 120;
backgroundColor = bgColor;

var docRef = app.documents.add(1280, 720, 72, DocumentFill.BACKGROUNDCOLOR);
var selRef = app.activeDocument.all;
    
var textColor = new SolidColor();
textColor.rgb.red  = 0;
textColor.rgb.green = 140
textColor.rgb.blue = 200;

// suppress all dialogs
app.displayDialogs = DialogModes.NO;
 
try {

    // Ask user for input folder
    var inputFolder = Folder.selectDialog("select Folder");
    var fileList = inputFolder.getFiles("*from*");
    for (var i = 0; i < fileList.length; i++) {
        // split example
        var explodedName = fileList[i].name.split("from");
        var newText = explodedName[0] +String.fromCharCode(13)+"from"+String.fromCharCode(13)+explodedName[1];
        //var newText = fileList[i].name;
        var fontName = "Philosopher";    
        var newTextLayer = docRef.artLayers.add();
        newTextLayer.kind = LayerKind.TEXT;
        newTextLayer.textItem.contents = newText.replace ("%20", " ");
        newTextLayer.textItem.position = Array(340, 50+i*36);
        newTextLayer.textItem.size = 36;
        newTextLayer.textItem.color = textColor;
        newTextLayer.textItem.font = fontName;
        
      saveFile = new File(newText+".jpg");
      saveOptions = new JPEGSaveOptions(); 
      saveOptions.embedColorProfile = true;
      saveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
      saveOptions.matte = MatteType.NONE; 
      saveOptions.quality = 9;

activeDocument.saveAs(saveFile, saveOptions, true,Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES) ;

               
    }
}


catch (exception) {
    alert(exception);
}
finally {
    app.displayDialogs = startDisplayDialogs;
}
 

app.preferences.rulerUnits = strtRulerUnits;
app.preferences.typeUnits = strtTypeUnits;
docRef = null;
textColor = null;
newTextLayer = null;
 
Okay, Hintergrundfarbe wechseln hat jetzt geklappt:
Code:
var docRef = app.documents.add(1280, 720, 72,);
var selRef = app.activeDocument.all;
    
var textColor = new SolidColor();
textColor.rgb.red  = 0;
textColor.rgb.green = 140
textColor.rgb.blue = 200;

var bgColor = new SolidColor();
bgColor.rgb.red = 140;
bgColor.rgb.green = 125;
bgColor.rgb.blue = 150;
backgroundColor = bgColor;

docRef.selection.selectAll(); docRef.selection.fill(backgroundColor); docRef.selection.deselect();



EDIT.
Das mit dem "ersetzen durch" auch, beinahe.
Code:
        newTextLayer.textItem.contents = newText.replace (/%20/g, "");

Problem ist jetzt nur, dass in der dritte Zeile vor dem Artist ein Leerzeichen auftritt.



Folgendes funktioniert zum speichern auch nicht:
"Skriptwarnung: Fehler: Da Dokument wurde noch nicht gespeichert.

Code:
var doc = app.activeDocument;
var docName = doc.name;
docName = docName.match(/(.*)(\.[^\.]+)/) ? docName = docName.match(/(.*)(\.[^\.]+)/):docName = [docName, docName];
var saveName = new File(decodeURI(doc.path)+'/'+docName[1]+'.jpg');
saveJPEG( app.activeDocument, saveName, 10 );
 
Zuletzt bearbeitet:
Filename und Videoname sind nun identisch.
Das Leerzeichen vor dem Artist habe ich nicht wegbekommen.

Ein riesiges Problem bleibt, ab dem zweiten Durchlauf überlappt die Schrift. Wie sage ich Photoshop, das es von vorne anfangen soll?
Code:
// Example of Reading all Files in a Folder 
// and creating Textlayers from its filenames
 
// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop
 
// in case we double clicked the file
app.bringToFront();
 
// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 0;
// debugger; // launch debugger on next line
 
var strtRulerUnits = app.preferences.rulerUnits;
var strtTypeUnits = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.POINTS;




var docRef = app.documents.add(1280, 720, 72,);
var selRef = app.activeDocument.all;
    
var textColor = new SolidColor();
textColor.rgb.red  = 255;
textColor.rgb.green = 255
textColor.rgb.blue = 255;

var bgColor = new SolidColor();
bgColor.rgb.red = 99;
bgColor.rgb.green = 185;
bgColor.rgb.blue = 232;
backgroundColor = bgColor;

docRef.selection.selectAll(); docRef.selection.fill(backgroundColor); docRef.selection.deselect();

// suppress all dialogs
app.displayDialogs = DialogModes.NO;
 
try {

    // Ask user for input folder
    var inputFolder = Folder.selectDialog("select Folder");
    var fileList = inputFolder.getFiles("*from*");
    for (var i = 0; i < fileList.length; i++) {
        // split example
        
        var explodedName = fileList[i].name.split("from");
        var newText = explodedName[0] +String.fromCharCode(13)+"from"+String.fromCharCode(13)+explodedName[1];
        //var newText = fileList[i].name;
        var fontName = "Philosopher";    
        var clearName = newText.replace (/%20/g, " ");
        var clearerName = clearName.replace (/.mp4/g,"");
        var newTextLayer = docRef.artLayers.add();
        newTextLayer.kind = LayerKind.TEXT;
        newTextLayer.textItem.contents = clearerName;
        newTextLayer.textItem.position = Array(200, 450+i*36);
        newTextLayer.textItem.size = 36;
        newTextLayer.textItem.color = textColor;
        newTextLayer.textItem.font = fontName;
        activeDocument.flatten();
        
    
    saveFile = new File("/C/2 CC Attribution Share Alike/"+fileList[i].name.replace (/.mp4/g,"")+".jpg");
      saveOptions = new JPEGSaveOptions(); 
      saveOptions.embedColorProfile = true;
      saveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
      saveOptions.matte = MatteType.NONE; 
      saveOptions.quality = 9;

activeDocument.saveAs(saveFile, saveOptions, true,Extension.LOWERCASE);
//activeDocument.close(SaveOptions.DONOTSAVECHANGES) ;


               
    }
}


catch (exception) {
    alert(exception);
}
finally {
    app.displayDialogs = startDisplayDialogs;
}
 

app.preferences.rulerUnits = strtRulerUnits;
app.preferences.typeUnits = strtTypeUnits;
docRef = null;
textColor = null;
newTextLayer = null;
 

Anhänge

  • Shapes In Motion from Pavel Pavlov.jpg
    Shapes In Motion from Pavel Pavlov.jpg
    51 KB · Aufrufe: 12
  • Sea Urchins - Planktonic Origins from Parafilms.jpg
    Sea Urchins - Planktonic Origins from Parafilms.jpg
    35,7 KB · Aufrufe: 9
Du musst das Objekt TextLayer nach dem Speichern wieder löschen. Oder Du setzt einmalig, vor der Schleife, den TextLayer ohne Inhalt und beschriftest immer wieder neu anstatt einen neuen Layer zu erstellen. Hier ist ein Script, das den ersten Textlayer findet. Damit könntest Du darauf zugreifen.

Leerzeichen am Anfang und am Ende werden mit trim() entfernt. ABER diese Funktion gibt es erst seit Neuerdings in den neueren Browsern, deswegen möchte ich keine Grantie geben, ob sie im Adobe-Scripting funktioniert.

mfg chmee
 
Zurück