Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
動画エフェクトに関する新技術の紹介
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shoma.kato
July 06, 2025
Programming
28
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
動画エフェクトに関する新技術の紹介
shoma.kato
July 06, 2025
More Decks by shoma.kato
See All by shoma.kato
体験!SwiftChartsの世界
shomakato
0
24
はじめてのPDFKit.pdf
shomakato
0
220
はじめてのPDFKit
shomakato
0
45
SwiftとC++を利用した画像処理プログラミング
shomakato
0
2.4k
Other Decks in Programming
See All in Programming
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
550
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
770
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.1k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
250
Claspは野良GASの夢をみるか
takter00
0
190
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
130
The NotImplementedError Problem in Ruby
koic
1
790
3Dシーンの圧縮
fadis
1
770
Oxlintのカスタムルールの現況
syumai
6
1.1k
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Exploring anti-patterns in Rails
aemeredith
3
410
A designer walks into a library…
pauljervisheath
211
24k
エンジニアに許された特別な時間の終わり
watany
107
250k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
How to build a perfect <img>
jonoalderson
1
5.6k
Leo the Paperboy
mayatellez
7
1.8k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Copyright © ZOZO, Inc. ಈըΤϑΣΫτʹؔ͢Δ ৽ٕज़ͷհ גࣜձࣾZOZO ϒϥϯυιϦϡʔγϣϯ։ൃຊ෦ FAANS෦ ϑϩϯτΤϯυϒϩοΫ
Ճ౻ ਅ @shoma10170806
© ZOZO, Inc. 2 גࣜձࣾZOZO ϒϥϯυιϦϡʔγϣϯ։ൃຊ෦ FAANS෦ ϑϩϯτΤϯυϒϩοΫ Ճ౻ ਅ
• X: @shoma10170806 • γϣοϓελοϑͷൢചαϙʔτπʔϧ ʮFAANSʯͷiOSΞϓϦΛ։ൃ • ത࢜ޙظ՝ఔʹࡏֶதɹը૾ॲཧͳͲͷݚڀʹैࣄ
© ZOZO, Inc. 3 FAANSͷಈըػೳ ϑΝογϣϯಈը
© ZOZO, Inc. 4 FAANSͷಈըػೳ ϑΝογϣϯಈը 88%$ ಈըΤϑΣΫτͷ৽ٕज़
© ZOZO, Inc. 5 ಈըΤϑΣΫτͷηογϣϯ l&OIBODFZPVSBQQXJUINBDIJOFMFBSOJOHCBTFEWJEFPF ff FDUTz 7JEFP5PPMCPYGSBNFXPSL ϑϨʔϜϨʔτͷม
ϒϥʔʢ΅͔͠ʣͷద༻ ղ૾ʢߴղ૾Խʣ
© ZOZO, Inc. 6 l&OIBODFZPVSBQQXJUINBDIJOFMFBSOJOHCBTFEWJEFPF ff FDUTz 7JEFP5PPMCPYGSBNFXPSL ϑϨʔϜϨʔτͷม ϒϥʔʢ΅͔͠ʣͷద༻
ղ૾ʢߴղ૾Խʣ ಈըΤϑΣΫτͷηογϣϯ
© ZOZO, Inc. 7 ϑϨʔϜϨʔτͷมͱ ඵͰຕ T
© ZOZO, Inc. 8 ϑϨʔϜϨʔτͷมͱ ඵͰຕ ඵͰຕ T T ө૾Β͔ʹʂ
© ZOZO, Inc. 9 ϑϨʔϜϨʔτมྫʢ+ εϩʔʣ ݩಈը Tຕ εϩʔ εϩʔ
ʴ ม
© ZOZO, Inc. 10 ϑϨʔϜϨʔτมྫʢ+ εϩʔʣ ݩಈը Tຕ εϩʔ εϩʔ
ʴ ม εϩʔͷΈ Tຕ ϑϨʔϜϨʔτม Tຕ
© ZOZO, Inc. 11 ࣮ͷྲྀΕ ɾ75'SBNF3BUF$POWFSTJPO$PO fi HVSBUJPOͷఆٛ ɾ75'SBNF1SPDFTTPSͷఆٛ ɾόοϑΝͷׂΓͯ
ɾϑϨʔϜϨʔτͷมॲཧ
© ZOZO, Inc. 12 ࣮ͷྲྀΕ ɾ75'SBNF3BUF$POWFSTJPO$PO fi HVSBUJPOͷఆٛ ɾ75'SBNF1SPDFTTPSͷఆٛ ɾόοϑΝͷׂΓͯ
ɾϑϨʔϜϨʔτͷมॲཧ
© ZOZO, Inc. 13 VTFrameRateConversionConfigurationͷఆٛ ᶃ75'SBNF3BUF$POWFSTJPO$PO fi HVSBUJPOͱ ϑϨʔϜϨʔτมͷॳظߏͷఆٛ ᶄར༻Մೳͳ04
J04 ɺJ1BE04ɺNBD04
© ZOZO, Inc. 14 VTFrameRateConversionConfigurationͷఆٛ ᶅϓϩάϥϜ guard let configuration =
VTFrameRateConversionConfiguration( ɹɹɹɹframeWidth: width, ɹɹɹɹframeHeight: height, ɹɹɹɹusePrecomputedFlow: false, ɹɹɹɹqualityPrioritization: .normal, ɹɹɹɹrevision: .revision1 ) else {ɹthrow Fault.failedToCreateFRCConfigurationɹ}
© ZOZO, Inc. 15 VTFrameRateConversionConfigurationͷఆٛ ᶅϓϩάϥϜ guard let configuration =
VTFrameRateConversionConfiguration( ɹɹɹɹframeWidth: width, ɹɹɹɹframeHeight: height, ɹɹɹɹusePrecomputedFlow: false, ɹɹɹɹqualityPrioritization: .normal, ɹɹɹɹrevision: .revision1 ) else {ɹthrow Fault.failedToCreateFRCConfigurationɹ} ಈըͷ෯ɺߴ͞
© ZOZO, Inc. 16 VTFrameRateConversionConfigurationͷఆٛ ᶅϓϩάϥϜ guard let configuration =
VTFrameRateConversionConfiguration( ɹɹɹɹframeWidth: width, ɹɹɹɹframeHeight: height, ɹɹɹɹusePrecomputedFlow: false, ɹɹɹɹqualityPrioritization: .normal, ɹɹɹɹrevision: .revision1 ) else {ɹthrow Fault.failedToCreateFRCConfigurationɹ} ಈըͷ෯ɺߴ͞ ಛྔͷܭࢉํ๏
© ZOZO, Inc. 17 VTFrameRateConversionConfigurationͷఆٛ ᶅϓϩάϥϜ guard let configuration =
VTFrameRateConversionConfiguration( ɹɹɹɹframeWidth: width, ɹɹɹɹframeHeight: height, ɹɹɹɹusePrecomputedFlow: false, ɹɹɹɹqualityPrioritization: .normal, ɹɹɹɹrevision: .revision1 ) else {ɹthrow Fault.failedToCreateFRCConfigurationɹ} ग़ྗͷ࣭ ಈըͷ෯ɺߴ͞ ಛྔͷܭࢉํ๏
© ZOZO, Inc. 18 VTFrameRateConversionConfigurationͷఆٛ ᶅϓϩάϥϜ guard let configuration =
VTFrameRateConversionConfiguration( ɹɹɹɹframeWidth: width, ɹɹɹɹframeHeight: height, ɹɹɹɹusePrecomputedFlow: false, ɹɹɹɹqualityPrioritization: .normal, ɹɹɹɹrevision: .revision1 ) else {ɹthrow Fault.failedToCreateFRCConfigurationɹ} ग़ྗͷ࣭ ΞϧΰϦζϜͷઃఆ ಈըͷ෯ɺߴ͞ ը૾ಛͷܭࢉํ๏
© ZOZO, Inc. 19 ࣮ͷྲྀΕ ɾ75'SBNF3BUF$POWFSTJPO$PO fi ɾ75'SBNF1SPDFTTPSͷఆٛ ɾόοϑΝͷׂΓͯ ɾϑϨʔϜϨʔτͷมॲཧ
© ZOZO, Inc. 20 VTFrameProcessorͷఆٛ ᶃ75'SBNF1SPDFTTPSͱ ߴͳө૾ॲཧΛߦ͏Ϋϥε ᶄϓϩάϥϜ let frameProcessor
= VTFrameProcessor() try frameProcessor.startSession(configuration: configuration) ઌ΄Ͳͷ 75'SBNF3BUF$POWFSTJPO$PO fi HVSBUJPO
© ZOZO, Inc. 21 ࣮ͷྲྀΕ ɾ75'SBNF3BUF$POWFSTJPO$PO fi ɾ75'SBNF1SPDFTTPSͷఆٛ ɾόοϑΝͷׂΓͯ ɾϑϨʔϜϨʔτͷมॲཧ
© ZOZO, Inc. 22 όοϑΝͷׂΓͯ ᶃʜͷલʹϑϨʔϜϨʔτมͷΠϝʔδʢը૾ഒʣ
© ZOZO, Inc. 23 όοϑΝͷׂΓͯ ᶃʜͷલʹϑϨʔϜϨʔτมͷΠϝʔδʢϑϨʔϜϨʔτഒʣ
͜͜Λੜ
© ZOZO, Inc. 24 όοϑΝͷׂΓͯ let sourceFrame = VTFrameProcessorFrame( buffer:
pixelBuffer, presentationTimeStamp: sourcePTS ) let nextFrame = VTFrameProcessorFrame( buffer: pixelBuffer, presentationTimeStamp: nextPTS ) var intervals: [Float] = [0.25, 0.5, 0.75] let destinationFrames = try framesBetween( firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals ) ᶄϓϩάϥϜ
© ZOZO, Inc. 25 όοϑΝͷׂΓͯ let sourceFrame = VTFrameProcessorFrame( buffer:
pixelBuffer, presentationTimeStamp: sourcePTS ) let nextFrame = VTFrameProcessorFrame( buffer: pixelBuffer, presentationTimeStamp: nextPTS ) var intervals: [Float] = [0.25, 0.5, 0.75] let destinationFrames = try framesBetween( firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals ) ᶄϓϩάϥϜ
© ZOZO, Inc. 26 όοϑΝͷׂΓͯ let sourceFrame = VTFrameProcessorFrame( buffer:
pixelBuffer, presentationTimeStamp: sourcePTS ) let nextFrame = VTFrameProcessorFrame( buffer: pixelBuffer, presentationTimeStamp: nextPTS ) var intervals: [Float] = [0.25, 0.5, 0.75] let destinationFrames = try framesBetween( firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals ) ᶄϓϩάϥϜ
© ZOZO, Inc. 27 όοϑΝͷׂΓͯ let sourceFrame = VTFrameProcessorFrame( buffer:
pixelBuffer, presentationTimeStamp: sourcePTS ) let nextFrame = VTFrameProcessorFrame( buffer: pixelBuffer, presentationTimeStamp: nextPTS ) var intervals: [Float] = [0.25, 0.5, 0.75] let destinationFrames = try framesBetween( firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals ) ᶄϓϩάϥϜ
© ZOZO, Inc. 28 όοϑΝͷׂΓͯ let sourceFrame = VTFrameProcessorFrame( buffer:
pixelBuffer, presentationTimeStamp: sourcePTS ) let nextFrame = VTFrameProcessorFrame( buffer: pixelBuffer, presentationTimeStamp: nextPTS ) var intervals: [Float] = [0.25, 0.5, 0.75] let destinationFrames = try framesBetween( firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals ) ᶄϓϩάϥϜ
© ZOZO, Inc. 29 ϑϨʔϜϨʔτͷมॲཧ ग़ྗύϥϝʔλͷઃఆॲཧͷ࣮ߦ guard let parameters =
VTFrameRateConversionParameters( sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: intervalArray, submissionMode: .sequential, destinationFrames: destinationFrames ) else {ɹthrow Fault.failedToCreateFRCParametersɹ} try await frameProcessor.process(parameters: parameters)
© ZOZO, Inc. 30 ϑϨʔϜϨʔτͷมॲཧ ग़ྗύϥϝʔλͷઃఆॲཧͷ࣮ߦ guard let parameters =
VTFrameRateConversionParameters( sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: intervalArray, submissionMode: .sequential, destinationFrames: destinationFrames ) else {ɹthrow Fault.failedToCreateFRCParametersɹ} try await frameProcessor.process(parameters: parameters) ϑϨʔϜมͷग़ྗύϥϝʔλ
© ZOZO, Inc. 31 ϑϨʔϜϨʔτͷมॲཧ ग़ྗύϥϝʔλͷઃఆॲཧͷ࣮ߦ guard let parameters =
VTFrameRateConversionParameters( sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: intervalArray, submissionMode: .sequential, destinationFrames: destinationFrames ) else {ɹthrow Fault.failedToCreateFRCParametersɹ} try await frameProcessor.process(parameters: parameters) ϑϨʔϜมͷೖग़ྗύϥϝʔλ όοϑΝͷೖྗ
© ZOZO, Inc. 32 ϑϨʔϜϨʔτͷมॲཧ ग़ྗύϥϝʔλͷઃఆॲཧͷ࣮ߦ guard let parameters =
VTFrameRateConversionParameters( sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: intervalArray, submissionMode: .sequential, destinationFrames: destinationFrames ) else {ɹthrow Fault.failedToCreateFRCParametersɹ} try await frameProcessor.process(parameters: parameters) ϑϨʔϜมͷೖग़ྗύϥϝʔλ όοϑΝͷೖྗ ग़ྗͷ֨ೲઌ
© ZOZO, Inc. 33 ϑϨʔϜϨʔτͷมॲཧ ग़ྗύϥϝʔλͷઃఆॲཧͷ࣮ߦ guard let parameters =
VTFrameRateConversionParameters( sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: intervalArray, submissionMode: .sequential, destinationFrames: destinationFrames ) else {ɹthrow Fault.failedToCreateFRCParametersɹ} try await frameProcessor.process(parameters: parameters) ϑϨʔϜมͷೖग़ྗύϥϝʔλ όοϑΝͷೖྗ ग़ྗͷ֨ೲઌ มͷ࣮ߦ
© ZOZO, Inc. 34 ϑϨʔϜϨʔτͷม݁Ռ ೖྗ ग़ྗ
© ZOZO, Inc. 35 ·ͱΊ 75'SBNF1SPDFTTPSͳͲ৽ٕज़Λ༻͍ͨ ಈըΤϑΣΫτͷద༻ํ๏ͷհ ଞͷΤϑΣΫτ໘ന͍ͷͰɺ ͥͻ৭ʑ৮ͬͯΈ͍ͯͩ͘͞ʂ
None
© ZOZO, Inc. 37 ࠷ޙʹαϥοͱ͍͑ͨ͜ͱ ᶃ 75'SBNF1SPDFTTPSͷग़ྗಈըͷܗࣜͰͳ͍ ᶄ ॲཧ࣌ؒTʢڥ"QQMF.1SPɺಈըඵʣ ᶅ
Ұ෦ͷΤϑΣΫτNBD04 ʢߴղ૾ԽͳͲʣ