[PYTHON] Einführung eines AE-Skripts, das die Klanganpassung in C4D möglicherweise etwas vereinfacht

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.

Einführung

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.

Sound Matching Probleme in C4D

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. qiita_advent2016_1_1.png

qiita_advent2016_1_2.png

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.

Lösung und Verfahren

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.

1. Lesen Sie die Musikdatei auf der AE-Seite und überprüfen Sie das Timing mithilfe der RAM-Vorschau

Lassen Sie AE normalerweise MP3- oder Musikdateien lesen und eine RAM-Vorschau erstellen. Überprüfen Sie hier das Timing bis zu einem gewissen Grad.

2. Setzen Sie den ** AE-Marker ** auf das charakteristische Sound-Timing, das der Schlüsselpunkt für das Quetschen des Sounds ist

qiita_advent2016_1_3.png 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.

3. Erstellen Sie eine helle Ebene und rahmen Sie die Koordinaten usw. zum gleichen Zeitpunkt wie der in 2 installierte Marker ein.

qiita_advent2016_1_5.png 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.

4. Exportieren Sie die Komposition in das Format .c4d

qiita_advent2016_1_6.png 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) qiita_advent2016_1_7.png

5. Lesen Sie die exportierte .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. qiita_advent2016_1_8.png 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. qiita_advent2016_1_13.PNG

Über das Skript

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;
}

Bonus C4D Skript

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.

qiita_advent2016_1_14.PNG ↑ Sie müssen die hinzugefügte Spezialspur "Sound" auswählen und aktivieren. ↓ Diese Eigenschaft kann nicht angezeigt werden qiita_advent2016_1_11.PNG

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 **. qiita_advent2016_1_10.PNG ↑ 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. qiita_advent2016_1_12.PNG 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> ** qiita_advent2016_1_15.png

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()

    • Sofort nach Veröffentlichung hinzugefügt * Yarita-san Gemäß der C4D-Standard-Benutzeroberfläche ist der Zugriff auf die Eigenschaft "Sound" so einfach wie das Hinzufügen von MoGraphs "Sound Effector" zur Szene. Es scheint, dass es getan werden kann. Da "Sound Effector" ** in "Preview Creation" (z. B. Hardware-Vorschau **) keinen Sound wiedergibt, scheint es notwendig zu sein, ihn ordnungsgemäß zu verwenden. Wenn Sie keine Vorschau erstellen, ist das allein schon einfach genug, aber wenn Sie im Grunde immer eine Vorschau wie ich erstellen, halte ich ein solches Skript für nützlich.
  • Ergänzung bis hierher *

Schließlich

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!

    • Sofort nach Veröffentlichung hinzugefügt * Außerdem hat Herr I nach Veröffentlichung des Artikels ** getan, wie man die C4D-Szene überhaupt aufhellt **. Daher denke ich, dass diese Seite hilfreich sein wird, daher denke ich, dass Sie dies auch lesen sollten.
  • Ergänzung bis hierher *

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 *

Recommended Posts

Einführung eines AE-Skripts, das die Klanganpassung in C4D möglicherweise etwas vereinfacht
Machen Sie die C-Kompilierung etwas einfacher
Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen