Dies ist der Artikel zum 5. Tag von After Effects Adventskalender 2016. Der gestrige Artikel stammt von @tetsuoh Ich habe versucht, ErgoDox für Anime-Aufnahmen zu verwenden.
Ich mache ein Video. Das ist Shuto. ** Cinema 4D ** (allgemein bekannt als C4D), das häufig bei der Produktion von Bewegungsgrafiken wie BGA und Vocaloid MV verwendet wird, ist eine 3DCG-Produktionssoftware von MAXON mit Hauptsitz in Deutschland. Viele von Ihnen kennen möglicherweise den Namen des aktuellen After Effects CC, da dieser über eine Funktion wie "Cineware" verfügt und Sie "Cinema 4D Lite" verwenden können, ohne ein eigenständiges C4D-Produkt zu kaufen.
Kommen wir nun zum Hauptthema, aber dieses Mal werde ich ein Skript vorstellen, das die ** Klanganpassung ** ein wenig erleichtert, wenn eine CG-Szene erstellt wird, die mit C4D zur Musik passt. ..
Wie viele von Ihnen vielleicht bemerkt haben, ist dieser Artikel für C4D- und AE-Benutzer gedacht. Es tut mir leid, wenn Sie kein C4D-Benutzer sind. Bitte vergib mir, denn es ist ein AE-Skript Anything ry </ del>
Dies ist übrigens die Umgebung, aber dies verwendet CS6 (11.0.4.2) von Windows 10.
In C4D kann die Vorschau des Arbeitsbildschirms nicht abgespielt werden, wenn die Szene schwer wird. Die Audiowiedergabe kann ruckartig sein oder die Vorschaubildrate kann 1 fps oder weniger betragen. Wenn Sie ein AE-Benutzer sind, denken Sie vielleicht: "Dann ist es eine RAM-Vorschau!", Aber C4D hat keine RAM-Vorschau. Stattdessen ist die Vorschau, die einfach gerendert und dann abgespielt wird, die "Hardware- (Software-) Vorschau" der "Vorschauerstellung", aber wenn die Szene kompliziert wird, ist diese "Vorschauerstellung" auch sehr schwer. Es wird oft.
Bei der Tonanpassung der Videoproduktion werden Sie im Grunde viele Versuche und Irrtümer durchlaufen, um eine Bewegung zu finden, die bequem passt. Wenn Sie diese umfangreiche "Vorschauerstellung" jedoch mehrmals durchführen, werden Sie durch Ausprobieren erschöpft sein. Um effizient zu produzieren, ist es wichtig, wie nahe am idealen Sound-Squeeze-Timing durch Erstellen einer einzelnen Vorschau erreicht werden kann.
Es ist schwierig, das Timing zu erraten, wenn Sie den Sound plötzlich von Anfang an mit C4D abgleichen. AE hat eine Funktion zum Exportieren einer .c4d-Datei. Lassen Sie uns diese also gut nutzen und die von AE erstellte ** Sound Matching Mark ** auf C4D übertragen. Das Verfahren ist wie folgt. ** Alle 1 bis 4 sind AE-Arbeiten. ** **. Das Skript im Titel wird am Ende beschrieben.
Lassen Sie AE normalerweise MP3- oder Musikdateien lesen und eine RAM-Vorschau erstellen. Überprüfen Sie hier das Timing bis zu einem gewissen Grad.
Auf diese Weise können Sie Markierungen auf den Ebenen von Musikdateien platzieren. Wenn Sie beispielsweise in 2 Sekunden eine so feine Bewegung ausführen möchten, ist es schwierig, den Sound mit C4D abzugleichen.
Konvertiert den Markertreffer in 2 in einen Keyframe der Positionseigenschaft der Lichtebene. Sie können es von Hand machen, aber es ist schwierig, also ** automatisieren Sie es mit einem Skript **. Die "Lichtschicht" kann die "Kameraschicht" sein. Alles funktioniert, solange Sie Keyframes in C4D haben.
Sie können das AE-Licht auf C4D bringen, einschließlich der Informationen zu den getroffenen Keyframes. Lassen Sie uns dies auch mit einem Skript automatisieren. Sie können auch manuell über das Menü ** "Datei> Exportieren> CINEMA 4D Exporter" ** exportieren. Zu beachten ist jedoch, dass die ** Keyframe-Vervollständigungsmethode zum Auftreffen auf die Lichtschicht 3 "Stop" ** ist. Sie können mit anderen Komplementmethoden exportieren, aber jede Komplementmethode, die C4D nicht unterstützt, scheint ohne Erlaubnis gebacken zu werden, und Sie wissen nicht, wo sich das Markierungs-Timing befindet. (Abbildung exportiert durch Interpolationsmethode linear)
.c4d
-Datei in C4D und machen Sie einen Ton, indem Sie sich auf das Keyframe-Timing der Lichtschicht beziehen.Wenn Sie die Keyframe-Vervollständigungsmethode auf "Stop" setzen und sie als ".c4d" -Datei exportieren, können Sie das Licht mit den Keyframes nur zum erforderlichen Zeitpunkt wie diesem beim Lesen mit C4D aktivieren. Natürlich ist es in der Produktion erforderlich, mehrmals eine Hardware- (Software-) Vorschau zu erstellen, um zu überprüfen, ob Bewegung und Timing richtig übereinstimmen. Mit dieser Methode ist es jedoch im Allgemeinen erforderlich, die Markierung des Klangs zu erzielen. Sie können sich in einem Zustand bewegen, in dem das Timing stimmt.
Nebenbei habe ich es auch in der BGA von CO5M1C R4ILR0AD von kanone verwendet, die ich kürzlich produziert habe.
Schließlich werde ich das Skript vorstellen, aber auf diese Weise ** "Basierend auf den von AE erstellten Markierungsinformationen wird die Lichtschicht, die in C4D aufgenommen werden kann, mit einem Keyframe versehen und in die C4D-Datei exportiert" ** Es war. Ich konnte mir kein gutes Verfahren vorstellen, um zu erklären, welche Art von Skript ich geschrieben habe und warum ich ein solches Skript geschrieben habe, also habe ich es auf Umwegen geschrieben. Es scheint, dass es kürzlich implementiert wurde, aber da es keine Methode für den Zugriff auf den Komponentenmarker gab, Noriaki iwatanis Skript zum Abrufen des Kompositionsmarkers 351) wird vermietet.
Das unten erstellte Skript. Das Speichern einer Kopie ist mühsam. Speichern Sie daher hier mit Strg + S oder ⌘ + S. ** Stellen Sie sicher, dass das Speicherformat ".jsx" ist. ** **.
markerToC4DasLight.js
//Bei Verwendung mit einer ausgewählten Komponente oder Ebene wird gleichzeitig mit der Komponenten- oder Ebenenmarkierung eine neue Lichtebene erstellt und mit einem Keyframe versehen.
//Wenn eine Ebene ausgewählt ist, verwenden Sie die Markierung für diese Ebene.
//Wenn die Komponente ausgewählt ist(Wenn keine Ebene ausgewählt ist), Verwenden Sie die Komponentenmarkierung.
//Da CS6 keine Methode zum Abrufen des Markers der Komponente hat, habe ich das Skript von nariakiwatani so wie es ist ausgeliehen.
var activeComp = app.project.activeItem; //Aktives Element im Projektfenster abrufen
function main() {
var markers = null;
if (activeComp instanceof CompItem == false) { //Weist andere aktive Elemente als Komponenten ab
alert("Es ist keine Komponente ausgewählt.");
return;
}
if (activeComp.selectedLayers.length > 1) { //Stößt ab, wenn in activeComp zwei oder mehr Ebenen ausgewählt sind
alert ("Wählen Sie nur eine Ebene oder nur Komponenten aus.\Wenn n Ebenen nicht ausgewählt sind, wird die aktive Komponentenmarkierung verwendet.");
return;
} else if (activeComp.selectedLayers.length == 1) { //Wenn nur eine Ebene ausgewählt ist, holen Sie sich die Markierung für diese Ebene
markers = activeComp.selectedLayers[0].property("Marker");
} else if (activeComp.selectedLayers.length == 0) { //Holen Sie sich Markierungen für diese Komponente, wenn keine Ebene ausgewählt ist
markers = getCompMarker(activeComp);
}
if (markers.numKeys < 1) { //Abstoßen, wenn der Marker 0 ist
alert ("Auf der ausgewählten Ebene oder Komponente befinden sich keine Markierungen.");
return;
}
var newLight = activeComp.layers.addLight("Marker_Light", [0, 0]); //Generieren Sie eine Lichtschicht und speichern Sie sie in newLight
newLight.property("position").setValue([0, 0, 0]); //Wenn die Koordinaten der Lichtschicht anfänglich sind, ist dies widerlich. Ändern Sie sie daher
newLight.property("pointOfInterest").setValue([0, 0, 100]);
for (var i=0; i<=markers.numKeys; i++) { //Drücken Sie die Keyframes für die erfassten Marker
var keyIdx = newLight.property("position").addKey((i==0)?0:markers.keyTime(i)); //Drücken Sie einen Keyframe und speichern Sie den Index dieses Keyframes in keyIdx
newLight.property("position").setValueAtKey(keyIdx, [0, 0, i*-10]); //Ändern Sie den Koordinatenwert des Schlüssels basierend auf dem gespeicherten Index
//Ändern Sie die Interpolationsmethode auf die gleiche Weise
newLight.property("position").setInterpolationTypeAtKey(keyIdx, KeyframeInterpolationType.HOLD, KeyframeInterpolationType.HOLD);
}
var version = parseInt(app.version.split(".")[0]);
var msg_export = "Marker_Erzeugtes Licht.\n weiter.Möchten Sie in eine c4d-Datei ausgeben?";
var code_export = (version>11)?5022:5006;
var execute = confirm(msg_export); //Bestätigungsdialog anzeigen
if (execute) app.executeCommand(code_export); //Wenn ja, starten Sie den Exporteur
}
app.beginUndoGroup("markerToC4DasLight"); //von hier
main();
app.endUndoGroup(); //Die Verarbeitung bis zu diesem Punkt kann mit einem Rückgängig zurückgegeben werden
/*
Skript zum Abrufen von Kompositionsmarkierungen in After Effects
2013.10.31 by nariakiiwatani
MIT License - http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license
*/
//Übergeben Sie die Komposition, für die Sie Markierungsinformationen erhalten möchten
function getCompMarker(comp) {
//Holen Sie sich eine Liste der Kompositionen, die im Projekt enthalten sind
function getCompAll(proj) {
var ret = [];
for(var i = 1; i <= proj.numItems; ++i) {
if(proj.item(i) instanceof CompItem) {
ret.push(proj.item(i));
}
}
return ret;
}
//Holen Sie sich Array-Unterschiede
function getArrayDiff(a, b) {
var ret = [];
for(var _a in a) {
var found = false;
for(var _b in b) {
if(a[_a] === b[_b]) {
found = true;
break;
}
}
if(!found) {
ret.push(a[_a]);
}
}
var tmp = a;
a = b;
b = tmp;
for(var _a in a) {
var found = false;
for(var _b in b) {
if(a[_a] === b[_b]) {
found = true;
break;
}
}
if(!found) {
ret.push(a[_a]);
}
}
return ret;
}
//Speichern Sie den Status vor dem Vorgang, da die Auswahlinformationen des Projektfensters ausgeführt werden.
var selected = app.project.selection;
var selection = [];
for(var i = 0; i < selected.length; ++i) {
selection.push(selected[i].selected);
selected[i].selected = false;
}
//Der Hauptteil der Verarbeitung von hier
comp.selected = true; //Wählen Sie die zu exportierende Komposition aus
//"Neue Komposition aus mehreren Elementen" kann nur verwendet werden, wenn das Projektfenster fokussiert ist. Aktivieren Sie es daher zwangsweise.
app.project.showWindow(false);
app.project.showWindow(true);
var allComps = getCompAll(app.project); //Liste der Kompositionen vor der Befehlsausführung
app.executeCommand(2796); //Führen Sie "Neue Komposition aus mehreren Elementen" aus.
var added = getArrayDiff(getCompAll(app.project), allComps)[0]; //Suchen Sie die hinzugefügte Komposition, indem Sie den Befehl ausführen
var marker = added.layer(1).marker; //Dies ist der Marker, den ich wollte!
//Aufräumen von hier
added.remove(); //Erhöhte Komposition löschen
comp.selected = false; //Abwählen
for(var i = 0; i < selected.length; ++i) { //Kehren Sie zum ausgewählten Status zurück, bevor Sie das Skript ausführen
selected[i].selected = selection[i];
}
//Gibt Markierungsinformationen zurück
return marker;
}
Was die Methode zum Lesen von Musik mit C4D betrifft, können Sie, wie Sie sehen können, wenn Sie sie googeln, dem Objekt eine spezielle Spur mit dem Namen ** "Sound" ** hinzufügen (null usw.), dies erfolgt jedoch auch über die Benutzeroberfläche Aufgrund der schlechten Zugänglichkeit müssen Sie jedes Mal, wenn Sie den Parameter "Sound" ändern, die Timeline öffnen, die Spur "Sound" auswählen und im Attribut-Manager anzeigen.
↑ Sie müssen die hinzugefügte Spezialspur "Sound" auswählen und aktivieren. ↓ Diese Eigenschaft kann nicht angezeigt werden
Andere Parameter wie Koordinaten und andere Tags werden ** grundsätzlich im Attributmanager angezeigt, wenn Sie das Objekt oder Tag selbst aus dem Objektmanager (Baum) auswählen **, aber um die Attribute von "Sound" anzuzeigen. Muss ** "Sound" in der Timeline auswählen **. ↑ Auch wenn Sie im Objektmanager das Objekt "null" auswählen, wird die Eigenschaft "sound" nicht angezeigt.
Wenn Sie also einem neuen Nullobjekt (mit dem Namen ** Musik **) eine "Sound" -Spur hinzufügen (tatsächlich ist diese Prozedur ziemlich langwierig) und dann dieses Musikobjekt auswählen, können Sie es einfach zu den "Sound" -Eigenschaften wie diesen hinzufügen Ich habe ein Skript geschrieben, auf das zugegriffen werden kann. Als Mechanismus verwende ich immer das Python-Tag, um den Wert der Registerkarte "Sound" des Attributmanagers ↑ zu überprüfen und in den Wert der speziellen Spur von "Sound" einzufügen. Mit anderen Worten, wenn Sie die Werte von "Sound verwenden" und "Startzeit" in ↑ ändern, wird dies automatisch in der speziellen Spur wiedergegeben.
** * Bitte seien Sie vorsichtig bei der Verwendung! Stellen Sie sicher, dass Sie es als Skriptdatei speichern, ohne es in das Python-Skript-Tag zu kopieren, und führen Sie es über "Skript> Benutzerskript> Skript ausführen" im Menü aus. </ font> **
Speichern Sie das Skript wie beim AE-Skript von hier. ** Stellen Sie sicher, dass das Speicherformat ".py" sowie "jsx" ist. ** **.
addMusic.py
import c4d
import time
def main():
obj = c4d.BaseObject(c4d.Onull)
obj.SetName("Music")
doc.InsertObject(obj)
doc.SetSelection(obj)
tr = c4d.CTrack(obj,c4d.DescID(c4d.DescLevel(c4d.CTsound, c4d.CTsound, 0)))
obj.InsertTrackSorted(tr)
pyTag = obj.MakeTag(c4d.Tpython)
pyTag.SetName("Music")
rootGroup = c4d.GetCustomDataTypeDefault(c4d.DTYPE_GROUP)
rootGroup[c4d.DESC_NAME] = "Sound Properties"
rootGroup[c4d.DESC_SHORT_NAME] = "Sound"
rootGroup[c4d.DESC_TITLEBAR] = 1
rootGroup[c4d.DESC_GUIOPEN] = 1
rootGroup[c4d.DESC_PARENTGROUP] = c4d.DescID()
descId = obj.AddUserData(rootGroup)
secondGroup = c4d.GetCustomDataTypeDefault(c4d.DTYPE_GROUP)
secondGroup[c4d.DESC_NAME] = "Basic Properties"
secondGroup[c4d.DESC_SHORT_NAME] = "Basic"
secondGroup[c4d.DESC_TITLEBAR] = 1
secondGroup[c4d.DESC_GUIOPEN] = 1
secondGroup[c4d.DESC_PARENTGROUP] = descId
descId = obj.AddUserData(secondGroup)
label = ["Use Sound", "Start Time", "Sound"]
default = [1, c4d.BaseTime(), ""]
typ = [c4d.DTYPE_BOOL, c4d.DTYPE_TIME, c4d.DTYPE_FILENAME]
for i in range(3):
bc = c4d.GetCustomDataTypeDefault(typ[i])
bc[c4d.DESC_NAME] = label[i]
bc[c4d.DESC_SHORT_NAME] = label[i]
bc[c4d.DESC_PARENTGROUP] = descId
bc[c4d.DESC_DEFAULT] = default[i]
bc[c4d.DESC_ANIMATE] = c4d.DESC_ANIMATE_OFF
descId2 = obj.AddUserData(bc)
obj[descId2] = default[i]
pyTag[c4d.TPYTHON_CODE] = 'import c4d\n#Welcome to the world of Python\n\n\ndef main():\n obj = op.GetObject()\n tr = obj.GetCTracks()[0]\n tr[c4d.CID_SOUND_ONOFF] = obj[(c4d.ID_USERDATA, 3)]\n tr[c4d.CID_SOUND_START] = obj[(c4d.ID_USERDATA, 4)]\n tr[c4d.CID_SOUND_NAME] = obj[(c4d.ID_USERDATA, 5)]\n'
if __name__=='__main__':
main()
c4d.EventAdd()
Zu diesem Zeitpunkt ist es bereits nach 0:15 Uhr, die veröffentlicht werden soll. Es tut uns leid. Ich habe es in Eile geschrieben, daher war es meiner Meinung nach sehr schwer zu lesen, aber wenn es Fehler oder verwirrende Punkte gibt, kontaktieren Sie mich bitte in den Kommentaren oder auf Twitter!
Wir sehen uns morgen bei @ kickbase Tipps für Männer, die keine Multibyte-Ordnernamen zulassen! Ich bin auch ein Mann, der keine Multi-Byte-Ordnernamen zulässt, also freue ich mich wirklich darauf! * * Aktualisiert am 6. Dezember 2016 ↑ Link hinzugefügt *