Dalam
posting saya sebelumnya
, saya berbicara tentang bagaimana kami mengekstraksi konten dari file sumber FMV dan membuat alat untuk menganalisis sekitar 67 GB arsip untuk mencari komponen perantara yang digunakan untuk membuat FMV. Bagian-bagian ini adalah dasar untuk membuat konten FMV remaster dan digunakan sebagai "gambar perakitan" untuk memulai proyek.
Seperti yang dinyatakan dalam artikel sebelumnya, alur kerja remastering dibagi menjadi tiga cabang: remastering frame yang digambar tangan, remastering model 3D dan remastering suara. Di bawah ini saya akan berbicara tentang fitur alur kerja dan trik yang kami gunakan untuk mengotomatisasi pembuatan bagian utama video.
Kami meningkatkan ukuran semua frame yang digambar tangan asli agar sesuai dengan resolusi 4K (3840x2160). Mempertimbangkan penambahan lebar adegan redone dan fakta bahwa game ditampilkan dalam piksel non-persegi, ini berarti bahwa semua sumber daya yang di-remaster harus dibuat dalam resolusi 4440x2400 piksel.
Kami memutuskan untuk menggunakan Adobe Animate untuk mem-remaster semua frame FMV yang digambar dengan tangan, karena kami sudah memiliki alur kerja yang sudah jadi setelah mengembangkan Day of the Tentacle Remastered. Tim seniman menguasai proses ini dengan baik, jadi kami tidak mempertimbangkan pilihan lain.
Contoh membuat ulang bingkai yang digambar tanganModel 3D asli dari arsip ada dalam 3D Studio Release 3. Untungnya, versi modern 3D Studio Max mampu mengimpor semua data dari jerat dan kerangka kunci sinematik menggunakan skrip otomatisasi lain. Setelah itu, kami mengonversi file perantara ini untuk berfungsi di Autodesk Maya, tempat para seniman melakukan sihir remastering mereka.
Untuk memberikan permukaan yang baru pada jerat gaya, diterapkan shader baru, tekstur berkualitas tinggi diterapkan, dan jerat ini secara signifikan ditambahkan untuk memberikan model tampilan yang lebih halus. Selain itu, bingkai jendela diperluas untuk semua kamera input video agar sesuai dengan resolusi kerja 4440x2400 piksel, karena kamera asli dirancang untuk rasio aspek yang lebih sempit.
Contoh model 3D remasteringMengenai audio, kami berhasil menemukan sebagian besar versi asli berkualitas tinggi, tetapi ada pengecualian. Rekaman dari studio dubbing berbahasa Inggris dikemas ke dalam arsip, tetapi dubbing dalam bahasa lain, yang dilibatkan oleh mitra eksternal, tidak tersedia bagi kami. Selain itu, kami berhasil menemukan musik asli The Gone Jackals, yang digunakan dalam FMV. Beberapa versi efek suara (SFX) telah diganti dengan yang lebih "kencang" dengan jenis suara yang serupa.
Di bawah ini adalah bagan alur yang secara kasar menjelaskan bagaimana kami memproses sumber daya sumber dan menautkannya dengan konten yang diremaster. Frame video asli yang diekstraksi (menggunakan SanExtract.exe) digunakan sebagai "sumber" untuk perbandingan dengan semua file data arsip. File manifes arsip dihasilkan menggunakan pencarian rekursif semua data arsip; mereka digunakan untuk dengan cepat menemukan semua file unik dari jenis tertentu.
Alat SanWrangler digunakan untuk membandingkan secara visual "sumber" bingkai dan data yang diarsipkan. Pengguna dapat secara visual melampirkan file arsip ke bingkai asli dan menyimpannya sebagai peta ketergantungan dalam format XML. Setelah membuat peta ketergantungan, cukup menggunakan skrip Python untuk secara otomatis menghasilkan bingkai yang diambil secara manual dari sumber daya file "menggambar" asli, serta "gambar rakitan" untuk Maya 3D. File-file ini menjadi titik awal bagi tim seniman, yang kemudian melanjutkan ke remastering.
Mengekstraksi sumber daya asli dan menciptakan "gambar perakitan"Ini adalah langkah pertama dari banyak langkah yang menghasilkan kami mendapatkan versi remaster FMV siap pakai. Ya, tentu saja, sekarang kita memiliki titik awal dari semua file yang perlu diperbaiki, tetapi bagaimana menghubungkan semua fragmen ini bersama-sama?
Di bawah ini saya akan berbicara tentang metode otomasi yang digunakan dalam alur kerja pembuatan FMV. Metode-metode ini dapat digunakan tidak hanya untuk menghasilkan FMV dan berlaku tidak hanya untuk satu game; Saya pikir mereka cukup universal, dan mereka dapat digunakan dalam banyak aspek pengembangan game.
Seperti kebanyakan alur kerja pembuatan grafis, proses ini akan berulang. Di suatu tempat di file sumber mungkin ada bug yang perlu diperbaiki oleh artis, dan kadang-kadang perlu untuk mengekspor kembali file yang bergantung pada sumber daya. Saya pikir kita semua lebih suka pekerjaan ini dilakukan oleh komputer, daripada oleh orang yang cenderung kesalahan.
Kami tahu persis bagaimana video untuk Full Throttle Remastered akan terlihat dan terdengar, jadi kami hanya perlu meningkatkan grafik dan suara mereka. Semua video harus cocok dengan aslinya, bingkai demi bingkai, termasuk jalur kamera, volume suara, panning, dll. Untuk mencapai ini, kami perlu tahu seperti apa alur kerja pembuatan FMV asli. Dan 67 GB data dari arsip LucasArts ini mengandung banyak petunjuk tentang bagaimana semuanya bekerja dalam aslinya. Mereka adalah awal yang baik bagi kami.
Proses pembuatan FMV asli
Mungkin terdengar sedikit nostalgia, tapi saya pikir penting untuk membahas aspek "arkeologi digital" dari remastering game ini. Pada akhirnya, memahami proses pembuatan asli akan memungkinkan Anda untuk menjawab banyak pertanyaan dan memberikan petunjuk tentang bagaimana sumber daya berubah menjadi hasil akhir. Dan saat membuat FMV baru yang dibuat ulang, kita perlu menerapkan transformasi yang sama ke sumber daya remaster asli kami sehingga produk jadi terlihat sedekat mungkin dengan aslinya. Termasuk kami membutuhkan yang berikut:
- Lokasi trek audio di timeline
- Pengaturan volume dan pan untuk trek audio saat bermain di game
- Komposisi bingkai dan penempatan setiap frame video dalam produk jadi
Alat yang disebut SMUSHFT (SMUSH untuk Full Throttle) memungkinkan pembuat FMV untuk menempatkan sumber daya video dan audio pada timeline, dan kemudian menyandikan film FMV yang dihasilkan (dalam format .san), yang dibaca oleh mesin permainan. Semua video dibagi menjadi serangkaian bingkai yang direkatkan untuk menciptakan hasil akhir. SMUSHFT memungkinkan pengguna untuk memindahkan sumber daya ini secara visual sepanjang garis waktu dan, jika perlu, mengulang video.
Anda tidak dapat menyebutkan bahwa saya tidak berpartisipasi dalam pembuatan game asli. Saya hanya bisa menebak bagaimana sumber daya asli dibuat, mempelajari data yang diarsipkan dan melihat format dan file yang dapat dieksekusi yang dikemas ke dalam data ini. Tampaknya model 3D dibuat di Autodesk 3D Studio Release 3, dan bagian yang digambar tangan dibuat di DeluxePaint Animation v1.0. Saya juga tidak tahu dari tahap mana generasi data gelombang untuk audio terdiri, tetapi masing-masing klip audio yang digunakan (dalam format .sad) berisi informasi tentang volume dan panning dengan bingkai kunci, yang digunakan untuk mencampur suara selama permainan.
Proses pembuatan FMV asliSetelah membuat bagian-bagian terpisah dari bingkai, proses menggabungkan bingkai dilakukan. Proses ini menggabungkan rendering bingkai 3D dengan bingkai animasi yang digambar tangan (bersama dengan yang lainnya), menciptakan produk jadi yang digunakan oleh alat SMUSHFT (file .nut). Setelah proyek siap untuk penyandian, video diproses dan hasil akhirnya (.san) sudah bisa diputar di mesin permainan.
SMUSHFT melakukan penyandian akhir dari format file dari video asli (.san), dan setiap file video memiliki file proyek (.pro) yang menggambarkan perakitan video (suara, video, lokasi subtitle). Kami ingin mengekstraksi informasi ini sehingga kami dapat menghasilkan file proyek Adobe Premiere Pro dan menggunakannya untuk menyandikan versi video yang dikonversi dalam resolusi 4K. Untuk melakukan ini, kami perlu merekayasa balik file proyek SMUSHFT.
Membalik Format File Rekayasa
Sangat menyenangkan memiliki kode sumber, karena Anda bisa mempelajarinya dan memahami bagaimana file proyek dibuat / dibaca. Tanpa kode sumber, Anda harus membuka file proyek dalam hex editor dan menganalisis pola di dalam file. Ini persis seperti yang kami gunakan untuk mengekstrak konten yang bermanfaat dari file proyek SMUSHFT.
Karena kami dapat menjalankan SMUSHFT asli di DOSBox, kami melihat antarmuka pengguna program, yang memberi kami petunjuk tentang format file. Lihatlah screenshot dari pembukaan file .pro asli ini:
Contoh Proyek SMUSHFTDi sini Anda dapat melihat yang berikut: ada sumber daya bernama dalam file (2027.NUT, 2027.SAD, IN_06A.NUT, dll.). Sumber daya yang disebutkan seperti itu cenderung menampilkan karakter ASCII di dalam file. Selain itu, ada penghitung bingkai di bagian atas timeline, dan di sebelah kiri timeline ada peningkatan jumlah lapisan. Dan yang terakhir - setiap sumber daya pada timeline terletak pada nomor bingkai tertentu dan memiliki durasi tertentu. Jika kami dapat mengekstrak informasi ini dari file proyek asli, ini akan memberi tahu kami di mana harus menempatkan sumber daya baru secara otomatis di timeline Adobe Premiere Pro.
Proyek sampel Adobe Premiere ProDengan membuka file proyek asli dalam hex editor, Anda bisa mendapatkan beberapa informasi yang sangat berguna. Lihat contoh di atas dalam heksadesimal:
File Proyek SMUSHFT di Hex EditorKita dapat mulai melihat file .pro dengan hex editor (saya lebih suka Hexplorer) dan mencoba mencari pola. Anda dapat dengan mudah menemukan sumber daya bernama dalam format ASCII dengan nol byte di akhir. Kira-kira di area memori yang sama ada sekelompok nilai yang disimpan sebagai celana pendek (integer bita ganda). Membandingkan angka yang ditampilkan dalam SMUSHFT dengan
Angka-angka dari file proyek dalam format hex memberi kita dasar untuk dengan benar mengkonversi file proyek asli menjadi editor video modern seperti Adobe Premiere Pro.
Perangkat Otomasi
Sebagian besar alur kerja ini diotomatisasi dan tidak memerlukan intervensi manusia. Salah satu alasan untuk ini adalah bahwa isi semua video sepenuhnya disalin dari aslinya; sebenarnya, kami baru saja meningkatkan konten. Dan oleh karena itu, kami praktis tidak memiliki kesempatan untuk sepenuhnya mengubah format FMV. Kami hanya perlu menemukan cara untuk membuat ulang video menggunakan sumber daya resolusi tinggi, sambil meminimalkan waktu yang dihabiskan untuk produk.
Pertama, saya harus mengatakan bahwa langkah awal yang serius sebelum mengotomatiskan seluruh proses harus menjadi percakapan dengan tim pembuat konten (grafik dan audio). Alasannya adalah bahwa sebagian besar proses otomatisasi membutuhkan pembuat untuk mematuhi seperangkat aturan tertentu tentang menyiapkan proyek, lokasi file, alat yang digunakan, dll. Dalam proyek kami, ini berarti bahwa kami harus mendiskusikan alat untuk membuat konten dari bingkai gambar tangan, model 3D dan suara, dan kemudian editor video untuk menggabungkan semua ini bersama-sama. Itu juga perlu untuk menyepakati bagian mana dari alur kerja yang akan dilakukan secara manual dan mana yang akan otomatis.
Akibatnya, kami memutuskan yang berikut:
- Bingkai yang digambar secara manual akan dibuat dalam Adobe Animate dengan resolusi 4440x2400 piksel.
- Model dan animasi 3D akan dibuat dalam Autodesk Maya dan ditampilkan secara manual, juga dengan resolusi 4440x2400 piksel
- File audio akan dibuat dalam format .wav dengan parameter 48KHz dan 16-bit
- Fragmen video pada awalnya akan dihasilkan secara otomatis, dan artis akan dapat mengubah bagian apa pun yang ia butuhkan (dengan beberapa pengecualian)
- Tahap akhir dari penjahitan dan pengkodean FMV akan otomatis
Untuk membuat alat seotomatis mungkin, kami menggunakan beberapa metode. Python dipilih sebagai "lem" yang menghubungkan semuanya, karena diperluas dengan baik oleh berbagai perpustakaan, dan kodenya mudah ditulis dan dipelihara. Kami juga mengambil keuntungan dari dukungan internal untuk manipulasi file platform-independen (menyalin, memindahkan, menghapus).
Python - memanggil file yang dapat dieksekusi, mendapatkan hasil
Pustaka subproses Python ideal bagi kami, karena memungkinkan Anda untuk mengubah eksekusi file yang dapat dieksekusi lainnya dan bahkan menunggu penyelesaian tugas mereka. Ini memungkinkan Anda untuk mendapatkan kode yang dikembalikan oleh program dan mengakses buffer stdout & stderr.
import subprocess
Contoh berinteraksi dengan file yang dapat dieksekusi di PythonPython - Win32 API
Win32 API sangat berguna karena memberi kami akses untuk mengirimkan pesan keyboard dan mouse dari Windows dari skrip. Misalnya, Anda dapat membuat fungsi yang mengklik mouse pada koordinat X, Y layar tertentu:
import win32api def ClickXY(x,y): win32api.SetCursorPos((x,y)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
Contoh simulasi klik mouse PythonAnda bahkan dapat mengirim acara keystroke ke keyboard (dengan atau tanpa pengubah):
import win32api import win32con def PressKey(code, modifierCode=None): if modifierCode: win32api.keybd_event(modifierCode, 0, 0, 0) win32api.keybd_event(code, 0, win32con.KEYEVENTF_EXTENDEDKEY | 0, 0) time.sleep(0.021) win32api.keybd_event(code, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0) if modifierCode: win32api.keybd_event(modifierCode, 0, win32con.KEYEVENTF_KEYUP, 0)
Contoh Simulasi Keyboard PythonAda banyak kemungkinan lain, tetapi contoh di atas sangat membantu untuk mencapai tujuan kami. Anda dapat mengirim acara keyboard ke program apa pun yang aktif dan itu akan mulai mengetiknya, seolah-olah kita memasukkan sesuatu dari keyboard, termasuk menekan tombol panas.
Python - visi komputer untuk mengklik tombol
Pengalaman yang paling unik adalah penggunaan perangkat lunak visi komputer dalam alat-alat yang tidak dapat diotomatisasi melalui skrip internal. Sebagian besar alat modern memiliki dukungan skrip, tetapi masih memerlukan intervensi pengguna. Misalnya, 3D Studio Max memungkinkan Anda menjalankan file MAXScript dari baris perintah. Dalam kasus kami, kami menjalankan skrip untuk mengimpor file 3D mesh secara otomatis, setelah itu 3D Studio Max memulai secara otomatis dan menampilkan kotak dialog Shape Import, di mana pengguna harus mengklik tombol:
Contoh kotak dialog Bentuk ImporJadi - kami menulis skrip untuk otomatisasi, dan sekarang kami harus duduk di depan layar, menekan tombol? Alih-alih duduk di keyboard dan menunggu jendela sembul muncul, kita dapat membuat skrip mengambil tangkapan layar, menggunakan ikatan OpenCV ke Python untuk menemukan templat gambar tombol dan secara otomatis mengkliknya. Inilah yang tampak seperti template gambar untuk contoh yang dijelaskan di atas.
Template Gambar untuk ok_button.pngPerlu dicatat bahwa template gambar berisi fitur tambahan (teks untuk "Objek Tunggal" dan "Banyak Objek"). Ini memungkinkan kami untuk mendapatkan hasil pencarian yang lebih deterministik. Berikut ini adalah contoh skrip Python yang digunakan untuk mengklik secara otomatis pada lokasi yang ditemukan dari templat gambar:
import cv2 import ImageGrab
Contoh mengklik elemen tampilan menggunakan OpenCV, ditulis dengan PythonSemua contoh di atas didasarkan pada Python. Tetapi ada kalanya kita membutuhkan kontrol yang lebih tepat atas sistem jendela OS Windows. Ini mendorong kami untuk mengembangkan alat asli menggunakan API Windows Automation.
Windows Native (C ++) - Windows Automation API
Windows Automation API menyediakan akses ke Microsoft Accessibility API (MSAA) yang lama serta API Otomasi Microsoft UI. Anda dapat membaca lebih lanjut tentang ini di
halaman Microsoft .
Sebagai hasilnya, kami mencapai kenyataan bahwa kami dapat membuat permintaan ke elemen tertentu dari antarmuka Windows (tombol, bidang teks, tab, item menu), mencari tahu di mana elemen-elemen ini secara spasial terletak di layar dan klik / berinteraksi dengannya. Windows SDK juga memiliki alat pengujian yang memungkinkan Anda melihat properti mana yang tersedia. Mereka memungkinkan kami untuk mencari tahu apa yang dapat diotomatisasi di setiap program tertentu.
Aplikasi Inspect.exe cukup berguna untuk menampilkan hierarki manajemen jendela program; itu memberikan gambaran kasar tentang di mana objek seperti kontrol menu berada, dan bagaimana merujuk ke elemen jendela menggunakan panggilan API otomatisasi.
Contoh Inspect.exeSetelah Anda mempelajari hierarki kontrol program Windows, Anda akan tahu cara menemukannya dari pegangan jendela utama dan mempelajari cara mengklik elemen yang berbeda melalui API:
#include <WinUser.h> #include <UIAutomation.h> // Click on a sub-menu item given the Window & Menu handles. void ClickSubMenu(HWND hwnd, HMENU hmenu, const char *pMenuName) { // Iterate through the menu items of the window int menu_item_count = GetMenuItemCount(hmenu); for(int menu_id = 0; menu_id < menu_item_count; ++menu_id) { char menu_name[MAX_PATH]; int len = GetMenuString(hmenu, menu_id, reinterpret_cast<LPSTR>(&menu_name[0]), sizeof(menu_name), MF_BYPOSITION); // Look for the specific menu you're searching for and click it // Make sure to set the window active before doing it... if(!strcmp(pMenuName, menu_name)) { // now get the rect and click the center RECT rect; BOOL success = GetMenuItemRect(hwnd, hmenu, menu_id, &rect); if(success) { SetActiveWindow(hwnd); POINT point = GetMiddlePoint(rect); SetCursorPos(point.x, point.y); mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, point.x, point.y, 0, 0); mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, point.x, point.y, 0, 0); Sleep(DO_TASK_INTERVAL_WAIT_MS); } } } }
Contoh mendorong kontrol jendela di C ++Dan tentu saja, meneruskan penekanan tombol ke jendela aktif juga sederhana:
#include <WinUser.h> #include <UIAutomation.h> // Type the character string to the given window handle static void TypeCharacters(HWND window_handle, const char *pString) { int len = strlen(pString); for(int count = 0; count < len; ++count) { SendMessage(window_handle, WM_CHAR, (WPARAM)pString[count], (LPARAM)0); Sleep(CHARACTER_REPEAT_INTERVAL_MS); } }
Contoh Simulasi Keyboard C ++Tentu saja, API ini memiliki lebih banyak fitur. Saya menemukan bahwa berkat alat Inspect.exe, Anda dapat menjelaskan elemen jendela program yang dapat diakses.
Format Teks Menengah
Bagian dari alur kerja kami adalah menyimpan file dalam bentuk teks dan mengubah nilai dalam file teks ini. Pada akhirnya, alat-alat ini memiliki antarmuka pengguna untuk mengubah keadaan data tambahan. Dan jika Anda tahu apa yang harus menjadi data tambahan ini, maka tidak perlu bekerja dengan alat ini, cukup ubah data tambahan. Kuncinya adalah mengetahui cara memanipulasi data pendukung ini; ketika mengubah format file eksklusif, ini bisa jadi menantang. Bukankah lebih baik jika semua orang memiliki file teks sederhana yang dapat Anda kerjakan?
Caranya adalah dengan menemukan cara di sekitar format file berpemilik yang digunakan oleh sebagian besar alat. Solusinya biasanya adalah dengan menggunakan opsi Impor dan Ekspor yang ditemukan di sebagian besar alat komersial modern. Berikut ini beberapa contohnya:
Adobe Premiere Pro menyimpan file dalam format berpemilik, tetapi Anda dapat mengimpor / mengekspor proyek sebagai Final Cut Pro XML. Setelah mengekspor ke XML, Anda dapat mengubah XML dengan cara yang kami butuhkan dan mengimpor kembali proyek kembali ke Adobe Premiere Pro.
Contoh lain adalah koreksi referensi tekstur yang digunakan dalam format mesh 3D Autodesk 3D Studio Release 3 yang usang. Saat mengimpor file mesh asli, kami menyimpan mesh yang baru dikonversi ke file .fbx menengah menggunakan karakter ASCII. Dalam format ini, Anda dapat memproses file teks dan mengganti semua baris tautan tekstur dengan yang benar.
Adobe Animate / Flash cukup lucu karena ternyata file .fla sebenarnya sedikit βrusakβ .zip. Dalam bentuk terkompresi, mereka disimpan dalam format XFL, yang dapat merujuk ke objek XFL lainnya (misalnya, bitmap) dari folder lokal. Insinyur utama Double Fine Oliver Franzke membuat skrip Python yang dimodifikasi untuk mengemas / unzip file .fla menggunakan ZIP sehingga kita dapat membuat / memodifikasi file-file ini.
Contoh Penggunaan
Studio 3D Maks
Versi modern 3D Studio Max digunakan untuk mengimpor file .prj asli ke dalam adegan dan untuk menyimpan dalam format ASCII .fbx. Untuk setiap file .prj yang perlu dikonversi, file MaxScript (.ms) secara otomatis dihasilkan dari skrip Python, yang terlihat seperti ini:
importFile "G:\FullThrottle_Backup\FullThrottle_SourceAssets\BENBIKE.PRJ"
Contoh mengimpor model 3d menggunakan MaxScriptSetelah itu, file .ms ini hanya dipanggil oleh perintah Python untuk dijalankan di 3dsmax.exe:
3dsmax.exe -U MAXScript "C:\FullThrottleRemastered\import_prj.ms"
Contoh perintah konsol untuk memanggil file yang dapat dieksekusi dengan file MaxScript yang ditentukanSeperti disebutkan di atas, dalam hal ini, 3D Studio Max membuka kotak dialog yang harus Anda klik. Bundel OpenCV dengan Python membantu mengklik tombol di jendela ini sehingga file asli diimpor tanpa campur tangan pengguna. Setelah mengimpor file, serangkaian tombol menu ditekan (menggunakan win32api Python) untuk meluncurkan file MAXScript lain yang mengekspor model sebagai file .fbx dalam format ASCII. Karena .fbx disimpan sebagai file teks biasa, semua dependensi dependensi tekstur model digantikan oleh tautan ke gambar dalam format modern. Kemudian, file .fbx yang dimodifikasi kembali secara otomatis dimuat ke 3DSMax dan diekspor sebagai file .max. Pada titik ini, file .max dapat dikirim ke artis untuk remastering.
Adobe Animate / Flash
Adobe Animate / Flash digunakan untuk mem-remaster semua sumber daya FMV yang digambar tangan. Kami mengambil frame yang digambar tangan asli (berukuran 320x200 piksel) yang ditemukan oleh alat SanWrangler dan menggunakannya sebagai "gambar rakitan". Skala gambar diperbesar agar sesuai dengan 4440x2400 piksel, setelah itu file .fla dihasilkan secara otomatis menggunakan skrip Python.
Maka itu sudah cukup untuk secara otomatis menghasilkan file .fla dari awal, menggunakan pengetahuan kita tentang format XFL Adobe Animate / Flash. Kami dapat menggunakan tool kit yang sudah dibuat oleh Oliver Franzke untuk menghasilkan gambar rakitan dari file animasi yang digambar tangan.
Adobe Premiere Pro
API Windows Automation benar-benar membantu kami menentukan kontrol Premiere Pro yang ada di layar. Dalam beberapa kasus, mereka tidak memiliki tombol cepat. Setelah menerima koordinat dari item menu, perlu untuk memindahkan kursor ke koordinat ini dan mengirim acara klik mouse.
Semua ini hebat, tetapi beberapa kontrol ditampilkan dengan cara lain, dan karenanya tidak terlihat oleh Windows Automation API. Untuk kasus ini, kami memutuskan untuk menggunakan sekelompok OpenCV dan Python untuk dapat menggunakan OpenCV dalam lingkungan scripting. Ini sangat berguna ketika bekerja dengan Adobe Premiere Pro: meskipun memiliki dukungan parsial untuk skrip JavaScript, jenis kontrol yang diperlukan tidak tersedia melalui API.
Selain itu, file proyek Adobe Premiere Pro disimpan dalam format biner berpemilik. Oleh karena itu, kami tidak bisa secara ajaib membuat file Premiere Pro, tetapi kami dapat menggunakan fungsi impor, yang memungkinkan kami untuk mengimpor data ke file Final Cut Pro, yang memiliki format XML. Maka itu sudah cukup untuk menghasilkan file XML yang benar, memposisikan semua sumber daya pada timeline dengan tepat, dan kemudian secara otomatis mengimpor .xml Final Cut Pro ini untuk mengonversinya ke format yang diinginkan. Lalu kita bisa meletakkan frame yang diekspor dalam antrian otomatis sehingga kita bisa menggabungkannya menjadi video jadi.
Semua tahapan
Di bawah ini adalah diagram blok umum yang menunjukkan semua bagian otomatis dari alur kerja baru. Setiap segmen otomatis dikelilingi oleh persegi panjang bulat dengan informasi tambahan tentang teknik otomasi yang digunakan.
Diagram Alir Otomasi FMV Remaster yang DisederhanakanAnda akan melihat bahwa sebagian besar pekerjaan dengan Adobe Premiere Pro memerlukan penggunaan Python, serta kode Windows asli khusus. Alasannya adalah struktur kompleks jendela Premiere Pro, serta kebutuhan untuk menggunakan Windows Automation API asli untuk memastikan interaksi yang tepat dengan semua jendela anak yang tergantung pada aplikasi ini.
Semuanya bersama
Dengan menggunakan metode yang dijelaskan di atas, kami dapat mengonfigurasi beberapa mesin otomasi untuk membagi pekerjaan pada semua video menjadi beberapa bagian. Juga, Slack Bot diintegrasikan ke dalam alur kerja untuk mengirim umpan balik tentang otomatisasi ke saluran Slack kami sesuai dengan status video yang melewati pipa pemrosesan, sehingga kami tahu kapan ada masalah.
Contoh Otomatisasi Adobe Premiere ProMasalah yang kita hadapi
Semua ini terdengar hebat, tetapi pada kenyataannya, ketika mengimplementasikan proyek, kami mengalami masalah. Saya hanya akan mencantumkan poin utama.
1) Iterasi pencampuran audio jadi. Remastering semua file audio dilakukan secara bertahap. Karena itu, ketika kami memiliki, misalnya, efek suara "BOOM!", Sound engineer tidak tahu di mana memasukkannya ke dalam campuran audio, jadi ia harus menunggu video dikodekan untuk mengetahui apa yang salah.
2) Penyimpanan file perantara yang tidak terkompresi. Bingkai disimpan dalam format terkompresi hingga saat terakhir pengkodean ke dalam video selesai. Oleh karena itu, perlu untuk menyimpan sejumlah besar frame dalam penyimpanan lokal, beberapa di antaranya disimpan dalam sistem kontrol versi. Peningkatan volume yang disimpan seperti itu sangat nyata dan bisa sangat mahal ketika menggunakan beberapa sistem kontrol versi (kami menggunakan Perforce).
3) Waktu pimpin. Bagian padat dari alur kerja diotomatisasi, dan ini memungkinkan para insinyur untuk melakukan hal-hal lain. Namun, waktu yang dibutuhkan untuk membuat satu video bisa sangat lama. Bagian yang paling memakan waktu adalah encoding frame dalam resolusi 4k. Kami memiliki cara untuk menyelidiki keadaan sumber daya di dalam Perforce untuk memahami langkah-langkah apa yang perlu dilakukan lagi, tetapi metode ini tidak dibagi menjadi beberapa bagian seperti yang kita inginkan.
Langkah selanjutnya
Ya, artikel itu ternyata sangat banyak! Meskipun implementasi alur kerja ini cukup spesifik untuk proyek ini, saya percaya bahwa metode otomatisasi tertentu dapat digunakan dalam mengembangkan game apa pun. Setelah menemukan videonya, Anda dapat mempertimbangkan topik terkait - memainkan FMV selama eksekusi game. Ini termasuk masalah seperti penyandian aliran audio multibahasa, serta sinkronisasi bingkai ketika memutar FMV asli. Tunggu bagian ketiga artikel ini!