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
MediaCodecで動画編集をしてみよう
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Masayuki Suda
February 08, 2018
Programming
3
4.7k
MediaCodecで動画編集をしてみよう
DroidKaigi 2018でプレゼンさせていただいたスライドです。
Masayuki Suda
February 08, 2018
Tweet
Share
More Decks by Masayuki Suda
See All by Masayuki Suda
Rewind & Replay: Kotlin 2.2が変えるCoroutine デバッグ最前線
masayukisuda
1
2.1k
Android端末で実現するオンデバイスLLM 2025 続き
masayukisuda
0
30
Android端末で実現するオンデバイスLLM 2025
masayukisuda
2
610
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
2
3.6k
Kotlin Collection関数をマスター
masayukisuda
1
6.1k
Jetpack Macrobenchmarkを試してみた
masayukisuda
1
370
Androidで動画編集アプリの技術選択
masayukisuda
1
1.4k
Other Decks in Programming
See All in Programming
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
740
20260315 AWSなんもわからん🥲
chiilog
2
150
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
CSC307 Lecture 14
javiergs
PRO
0
470
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
140
CSC307 Lecture 15
javiergs
PRO
0
250
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
420
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
370
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
240
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
310
受け入れテスト駆動開発(ATDD)×AI駆動開発 AI時代のATDDの取り組み方を考える
kztakasaki
2
580
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
190
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Practical Orchestrator
shlominoach
191
11k
The Language of Interfaces
destraynor
162
26k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
240
Side Projects
sachag
455
43k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
How STYLIGHT went responsive
nonsquared
100
6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
HDC tutorial
michielstock
1
540
A Soul's Torment
seathinner
5
2.5k
Transcript
.FEJB$PEFDͰಈըฤूΛͯ͠ΈΑ͏ %SPJE,BJHJ EBBTVV
ॳొஃʂʂ
ࣗݾհ $$IBOOFMגࣜձࣾ "OESPJE&OHJOFFS݉1. ਢాխ೭ ʮNZTUBʯΤϯλϝಈըΞϓϦ ʮ4PEBʯಈըฤूΞϓϦ .BTBZVLJ4VEB EBBTVV
ࠓͷΰʔϧ "OESPJEΞϓϦΛ࡞ΕΔਓ͕ɺ .FEJB$PEFDͰϑΟϧλʔ͕͔͔ͬͨΓɺ ΥʔλʔϚʔΫΛ͚ͭͨಈըΛ࡞ΕΔͷʹ ඞཁͳٕज़Λཧղ͢Δɻ
.Q$PNQPTFSBOESPJE ɾ؆୯ʹ.QʹϑΟϧλʔΥʔλʔϚʔΫ ɹ͕͚ͭΒΕΔ ɾຊͨ͠༰ͷಈ͘αϯϓϧʹ IUUQTHJUIVCDPN.BTBZVLJ4VEB.Q$PNQPTFSBOESPJE
// ΥʔλʔϚʔΫ new Mp4Composer(srcMp4Path, destMp4Path) .filter( new GlWatermarkFilter(watermarkBitmap, Position.RIGHT_BOTTOM) )
.start(); // ηϐΞϑΟϧλʔ new Mp4Composer(srcMp4Path, destMp4Path) .filter(new GlSepiaFilter()) .start(); .Q$PNQPTFSBOESPJE IUUQTHJUIVCDPN.BTBZVLJ4VEB.Q$PNQPTFSBOESPJE
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ಈըͱԻʴө૾ ᶃಈըͱ ը૾ग़యɹ"WJ6UJMͷқ͍͍͠ํ ɹIUUQBWJVUMJOGPEPVHBLFJTJLJLPOOUFOB
ө૾ͱը૾ͷू߹ମ ը૾ग़యɹ"WJ6UJMͷқ͍͍͠ํ ɹIUUQBWJVUMJOGPEPVHBLFJTJLJLPOOUFOB ᶃಈըͱ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ᶄಈըฤूͷجૅࣝ ಈըฤूͰ͓͍͑ͨ͞༻ޠͭ ᶃ&ODPEF ᶄ$PEFD ɹ ᶅ%FDPEF ᶆ.VYFS
ɾѹॖΛͯ͠ɺಈըϑΝΠϧΛখ͘͢͞Δߦҝɻ ɾө૾ը૾ͷू߹ମɻGQTͰͷಈըͩͱ ຕͷը૾ʹͳΔɻ୯७ʹͦͷ··ॲཧΛ ͯ͠͠·͏ͱɺେͳ༰ྔʹͳͬͯ͠·͏ɻ ͦΕΛ͙ ಈըฤूͰͷ༻ޠͭ ᶃ&ODPEF ᶄಈըฤूͷجૅࣝ
ᶄ$PEFD ɾ&ODPEF ѹॖ ͢ΔࡍͷΞϧΰϦζϜ ɾ).1&("7$ͷ͜ͱΛࢦ͢ ɾ"OESPJEҎ߱ɺ.FEJB$PEFD) ɹʹ΄΅શରԠ ಈըฤूͰͷ༻ޠͭ ᶄಈըฤूͷجૅࣝ
ಈըฤूͰͷ༻ޠ ᶅ%FDPEF ɾ&ODPEF ѹॖ ͞ΕͨಈըΛ෮ݩ͢Δߦҝ ɾಈը࠶ੜಈըϑΝΠϧΛ%FDPEFΛ ɹ͞Εͯ࠶ੜ͞Ε͍ͯΔ ᶄಈըฤूͷجૅࣝ
ಈըฤूͰͷ༻ޠ ᶆ.VYFS ɾΤϯίʔυͨ͠ʮө૾ʯͱʮԻʯΛͭͷ ɹಈըϑΝΠϧͱͯ͠·ͱΊΔ ᶄಈըฤूͷجૅࣝ
ɾಈըΛ%FDPEF͢Δɺը૾ʹల։͢Δɻ ɹˣ ɾల։ͨ͠ը૾ʹϑΟϧλʔΛ͔͚Δ ɹˣ ɾฤूͨ͠ը૾Λ&ODPEF ѹॖ ͯ͠ө૾ʹ͢Δ ɹˣ ɾ&ODPEFͨ͠ө૾ͱԻΛಈըϑΝΠϧʹ͢Δ ɹ
.VYFS ಈըʹϑΟϧλʔΛ͔͚ΔTUFQ ᶄಈըฤूͷجૅࣝ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ᶃ.FEJB&YUSBDUPSͰը૾Λ̍ຕ̍ຕऔΓग़͢ ᶄ.FEJB&YUSBDUPS͔Βड͚औͬͨσʔλΛ%FDPEFSͰ4VSGBDF5FYUVSF ʹ͠ɺͦ͜ʹϑΟϧλʔΛ͔͚Δɻ&ODPEFSͰ༻ҙͨ͠(-$POUFYUʹඳըɻ ᶅ.FEJB.VYFSͰ.1ϑΝΠϧʹ͢Δɻ ᶅ.FEJB$PEFDͷϙΠϯτ ը૾࡞ࢀߟݩɹ "OESPJEͰ.FEJB$PEFDΛ͍''NQFHͳ͠ͰಈըΛѹॖ͢Δํ๏ʢϥΠϒϥϦ͋Γʣɹ IUUQTRJJUBDPNZVZB@QSFTUPJUFNTEFDCE .1 .FEJB
&YUSBDUPS .FEJB$PEFD %FDPEFS 0QFO(-&4$POUFYU 'JMUFS %FDPEFS4VSGBDF &ODPEFS4VSGBDF .FEJB$PEFD &ODPEFS .FEJB .VYFS .1 4VSGBDF5FYUVSF 4XBQ#V⒎FS ESBX #ZUF#V⒎FS #ZUF#V⒎FS .Q$PNQPTFSͷΞʔΩςΫνϟ
ᶅ.FEJB$PEFDͷϙΠϯτ ͭͷओཁ$MBTTΛΈ߹ΘͤͯಈըฤूΛߦ͏ ɾ.FEJB&YUSBDUPS ɾ.FEJB$PEFD ɾ.FEJB.VYFS
ᶅ.FEJB$PEFDͷϙΠϯτ ɾ.FEJB&YUSBDUPS ɹׂͱͯ͠%FDPEFͷҰ෦Λ୲͏ɻ ɹ ɹฤूݩͷಈը͔ΒԻσʔλͱө૾ຕຕΛ#ZUF#V⒎FS Ͱ.FEJB$PEFDʹ͢ɻ ɹ.FEJB$PEFDͰѻ͑ΔҰ୯Ґ TBNQMF ͣͭ͠·͢ɻ
ᶅ.FEJB$PEFDͷϙΠϯτ ɾ.FEJB$PEFD ɹׂͱͯ͠%FDPEFͷҰ෦ͱ&ODPEFΛ୲͏ ɹ%FDPEFͱ&ODPEFͦΕͧΕผͷΠϯελϯεͰ୲͏ɻ ɹ ɹ.FEJB&YUSBDUPS͔Βड͚औͬͨ#ZUF#V⒎FSΛ ɹ%FDPEF͢ΔΠϯελϯεͰडऔɺ0QFO(-&4 5FYUVSF 4VSGBDF5FYUVSF ͱͯ͠ల։͢Δɻ
ɹ&ODPEF͢ΔΠϯελϯεͰ༻ҙͨ͠(-$POUFYUͰ ɹ5FYUVSFΛඳը͢Δɻ
ᶅ.FEJB$PEFDͷϙΠϯτ ɾ.FEJB.VYFS .FEJB$PEFD͔Βฤू͞ΕͨԻɺө૾Λ#ZUF#V⒎FSͰ ɹडऔɺҰͭͷϑΝΠϧίϯςφΛੜ͢Δɻ ɹ
.FEJB&YUSBDUPSͷ େࡶͳίʔυͷྲྀΕ // Πϯελϯεੜ mediaExtractor = new MediaExtractor(); // ಈըฤूݩͷϑΝΠϧΛFileDescriptorܗࣜͰηοτ͢Δɻ
mediaExtractor.setDataSource(inputFileDescriptor); // Decoder(MediaCodec)ͷ࡞ MediaFormat inputFormat = mediaExtractor.getTrackFormat(trackIndex); decoder = MediaCodec.createDecoderByType(inputFormat.getString(MediaFormat.KEY_MIME)); // Decoderʹ͢ByteBufferΛ࡞ decoderInputBuffers = decoder.getInputBuffers(); // sample (MediaCodecͰѻ͑Δ1୯Ґ)ͷαΠζΛऔಘ int result = decoder.dequeueInputBuffer(0); int sampleSize = mediaExtractor.readSampleData(decoderInputBuffers[result], 0); // DecoderʹDataΛ͢ boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0; decoder.queueInputBuffer(result, 0, sampleSize, mediaExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0); // ࣍ͷsampleσʔλʹਐΉ mediaExtractor.advance(); ᶅ.FEJB$PEFDͷϙΠϯτ
// MediaExtractor͔ΒडऔɺॲཧࡁΈͷOutput BufferΛऔಘ int result = decoder.dequeueOutputBuffer(bufferInfo, 0); // 2ͭΊͷҾSurfaceʹtextureΛඳը͢Δ͔Ͳ͏͔
decoder.releaseOutputBuffer(result, true); // ඳը͞Εͨtextureͷ౸ணͪ decoderSurface.awaitNewImage(); // textureΛOpenGLͰඳը decoderSurface.drawImage(); // ඳը͞ΕΔ࣌ؒΛࢦఆ encoderSurface.setPresentationTime(bufferInfo.presentationTimeUs * 1000); // ݱࡏඳը͞Ε͍ͯΔ༰ΛEncoderʹૹ৴ encoderSurface.swapBuffers(); // encoderͰඳըใΛडऔΔ encoder.dequeueOutputBuffer(bufferInfo, 0); encoderOutputBuffers = encoder.getOutputBuffers(); // encoderͷoutputBufferΛMediaMuxerʹͯ͠ɺmp4ϑΝΠϧʹ͢Δ muxRender.writeSampleData(MuxRender.SampleType.VIDEO, encoderOutputBuffers[result], bufferInfo); ᶅ.FEJB$PEFDͷϙΠϯτ .FEJB$PEFDɹ.FEJB.VYFSͷ େࡶͳίʔυͷྲྀΕ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
.1 .FEJB &YUSBDUPS .FEJB$PEFD %FDPEFS 0QFO(-&4$POUFYU 'JMUFS %FDPEFS4VSGBDF &ODPEFS4VSGBDF .FEJB$PEFD
&ODPEFS .FEJB .VYFS .1 4VSGBDF5FYUVSF 4XBQ#V⒎FS ESBX #ZUF#V⒎FS #ZUF#V⒎FS ᶆ0QFO(-&4ͷϙΠϯτ
ᶆ0QFO(-&4ͷϙΠϯτ ɾ0QFO(-&4ͱɺ0QFO(-ͷܞଳ͚ͷαϒηοτ൛ɻ ,ISPOPT(SPVQ͕༷ࡦఆ ɾ(16ͷ֤ԋࢉϢχοτશ͘ಉ͡ϓϩάϥϜΛҟͳΔσʔλ ʹରͯ͠ฒྻ࣮ߦ͠·͢ɻ ɾෳࡶͳӄӨॲཧඳըΤϑΣΫτͷࡍɺ(16ͷࢧԉʹΑͬͯ ɹ࣮ߦ͍ͯͨ͘͠ΊɺϚϧνίΞ$16ΑΓ༏Εͨ ɹύϑΥʔϚϯεΛൃش
ᶆ0QFO(-&4ͷϙΠϯτ ϑΟϧλʔΛ͔͚ΔશͯͷϐΫηϧʹॲཧΛՃ͑Δ
ᶆ0QFO(-&4ͷϙΠϯτ ը૾ग़యɹϚΠφϏχϡʔε %άϥϑΟοΫɾϚχΞοΫε ɹIUUQTOFXTNZOBWJKQBSUJDMFHSBQIJDT 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ ใΛ༻ҙ %σΟεϓϨΠͷͲ͜ʹඳը͢ΔҐஔͷܾఆ ֤ϐΫηϧຖͷ৭Λܾఆ
ᶆ0QFO(-&4ͷϙΠϯτ 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ ใΛ༻ҙ private final float[] triangleVerticesData = { //
X, Y, Z, U, V -1.0f, -1.0f, 0, 0.f, 0.f, 1.0f, -1.0f, 0, 1.f, 0.f, -1.0f, 1.0f, 0, 0.f, 1.f, 1.0f, 1.0f, 0, 1.f, 1.f, };
(-1,1,0) +y +x (1,1,0) (1,-1,0) (-1,-1,0) +z (0,0) (1,0) (0,1)
67࠲ඪ ࠲ඪ ᶆ0QFO(-&4ͷϙΠϯτ 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ ใΛ༻ҙ ը૾࡞ࢀߟݩɹ ͚Μ͝ͷ͓ෑɹςΫενϟϚοϐϯά IUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF
ᶆ0QFO(-&4ͷϙΠϯτ 7FSUFY4IBEFSͰߦ͏ 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ %σΟεϓϨΠͷͲ͜ʹඳը͢ΔҐஔͷܾఆ
7FSUFY4IBEFS VOJGPSNNBUV.71.BUSJY֦େճసͳͲͷม࠲ඪ VOJGPSNNBUV45.BUSJYσίʔυͨ͠ςΫενϟͷߦྻ BUUSJCVUFWFDB1PTJUJPOY Z [ͷ࠲ඪ BUUSJCVUFWFDB5FYUVSF$PPSEV W࠲ඪ WBSZJOHWFDW5FYUVSF$PPSE'SBHNFOU4IBEFSʹ͢࠲ඪ WPJENBJO
\ HM@1PTJUJPOV.71.BUSJY B1PTJUJPO W5FYUVSF$PPSE V45.BUSJY B5FYUVSF$PPSE YZ ^ ᶆ0QFO(-&4ͷϙΠϯτ ɾมߦྻͱ࠲ඪΛܭࢉ͠ɺҐஔΛܾఆ ɾςΫενϟͷ67࠲ඪͷܾఆΛ'SBHNFOU4IBEFS͢
ᶆ0QFO(-&4ͷϙΠϯτ มߦྻͱ ը૾ग़య͚Μ͝ͷ͓ෑɹ όʔςοΫεγΣʔμʹΑΔ࠲ඪܥมɹ IUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF
ᶆ0QFO(-&4ͷϙΠϯτ มߦྻͱ private float[] MVPMatrix = new float[16]; // ୯Ґߦྻͷੜ
Matrix.setIdentityM(MVPMatrix, 0); // ฒߦҠಈ Matrix.translateM(MVPMatrix, 0, x:0, y:0, z:0f); // ֦େɾॖখ Matrix.scaleM(MVPMatrix, 0, x:1, y:1, z:1); // ճస Matrix.rotateM(MVPMatrix, 0, rotation:0, x:0.f, y:0.f, z:1.f);
ᶆ0QFO(-&4ͷϙΠϯτ 'SBHNFOU4IBEFS ৭Λมߋ͢ΔϑΟϧλʔɺΥʔλʔϚʔΫ ͜͜Ͱͷॲཧ͢Δ͕伴ʹͳΔɻ ֤ϐΫηϧຖͷ৭Λܾఆ 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ
'SBHNFOU4IBEFS FYUFOTJPO(-@0&4@&(-@JNBHF@FYUFSOBMSFRVJSF QSFDJTJPONFEJVNQqPBU WBSZJOHWFDW5FYUVSF$PPSEWFSUFYTIBEFS VOJGPSNTBNQMFS&YUFSOBM0&4T5FYUVSFಈը͔Βσίʔυ͞Εͨը૾ WPJENBJO \ HM@'SBH$PMPSUFYUVSF% T5FYUVSF W5FYUVSF$PPSE
^ ᶆ0QFO(-&4ͷϙΠϯτ ɾ͖ͬͯͨ67࠲ඪʹ5FYUVSF͔Β5FYFMΛऔΓग़͠ɺ ɹϥελϥΠζิ͞Εͨ৭Λඳը͢Δ
ᶆ0QFO(-&4ͷϙΠϯτ ใΛ৭ใʹ͢ڮ͠ɻ ҙࣝ͠ͳͯ͘ϓϩάϥϛϯάͰ͖Δɻ ϥελϥΠζ ը૾ग़యɹϚΠφϏχϡʔε %άϥϑΟοΫɾϚχΞοΫε ɹIUUQTOFXTNZOBWJKQBSUJDMFHSBQIJDT 0QFO(-&4Ͱͷඳը·ͰͷྲྀΕ
.1 .FEJB &YUSBDUPS .FEJB$PEFD %FDPEFS 0QFO(-&4$POUFYU 'JMUFS %FDPEFS4VSGBDF &ODPEFS4VSGBDF .FEJB$PEFD
&ODPEFS .FEJB .VYFS .1 4VSGBDF5FYUVSF 4XBQ#V⒎FS ESBX #ZUF#V⒎FS #ZUF#V⒎FS ᶆ0QFO(-&4ͷϙΠϯτ ᶃ%FDPEFS4VSGBDFͰ4VSGBDF5FYUVSFͱͯ͠ը૾Λड͚औΔɻ 4DBMFճస༻ͷมߦྻΛཧɻ ᶄ'JMUFSͰ4VSGBDF5FYUVSFʹ৭Λ͚ͭͨΓɺΥʔλʔϚʔΫΛ͚ͭͨΓ͢Δ ᶅ&ODPEFS4VSGBDFͰ.FEJB$PEFDͷ&ODPEFʹॻ͖ࠐΈΛߦ͏
// ඳը͞Εͨtextureͷ౸ணͪ decoderSurface.awaitNewImage(); // textureΛOpenGLͰඳը ෦ͰFilter͕drawΛߦͬͯ·͢ɻ decoderSurface.drawImage(); // ඳը͞ΕΔ࣌ؒΛࢦఆ encoderSurface.setPresentationTime(bufferInfo.presentationTimeUs
* 1000); // ݱࡏඳը͞Ε͍ͯΔ༰ΛEncoderʹૹ৴ encoderSurface.swapBuffers(); // encoderͰඳըใΛडऔΔ encoder.dequeueOutputBuffer(bufferInfo, 0); encoderOutputBuffers = encoder.getOutputBuffers(); // encoderͷoutputBufferΛMediaMuxerʹͯ͠ɺmp4ϑΝΠϧʹ͢Δ muxRender.writeSampleData(MuxRender.SampleType.VIDEO, encoderOutputBuffers[result], bufferInfo); ᶆ0QFO(-&4ͷϙΠϯτ %FDPEFS4VSGBDFͱ&ODPEFS 4VSGBDFͷେࡶͳίʔυͷྲྀΕ
4VSGBDF5FYUVSFͱ ᶆ0QFO(-&4ͷϙΠϯτ ɾ%FDPEF͞Εͨը૾Λ0QFO(-&4ςΫενϟ ɹͱͯ͠ϑϨʔϜΛΩϟϓνϟ͠·͢ɻ ɾ"OESPJEͷ4VSGBDF5FYUVSF%ςΫενϟͰͳ͍ ɾΧϝϥϓϨϏϡʔͷετϦʔϜͰ༻͞Ε͍ͯΔ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ᶇಈըʹϑΟϧλʔΛ͔͚Δ ಈըʹϑΟϧλʔΛ͔͚Δ ˣ QJYFM͝ͱͷ৭Λ'SBHNFOU4IBEFSͰมߋ͢Δ
(MBZ4DBMFͷ'SBHNFOU4IBEFS FYUFOTJPO(-@0&4@&(-@JNBHF@FYUFSOBMSFRVJSF QSFDJTJPONFEJVNQqPBU WBSZJOHWFDW5FYUVSF$PPSE VOJGPSNTBNQMFS&YUFSOBM0&4T5FYUVSF DPOTUIJHIQWFDXFJHIUWFD
WPJENBJO \ qPBUMVNJOBODFEPU UFYUVSF% T5FYUVSF W5FYUVSF$PPSE SHC XFJHIU HM@'SBH$PMPSWFD WFD MVNJOBODF ^ ᶇಈըʹϑΟϧλʔΛ͔͚Δ
4FQJBͷ'SBHNFOU4IBEFS FYUFOTJPO(-@0&4@&(-@JNBHF@FYUFSOBMSFRVJSF QSFDJTJPONFEJVNQqPBU WBSZJOHWFDW5FYUVSF$PPSE VOJGPSNTBNQMFS&YUFSOBM0&4T5FYUVSF WPJENBJO \ WFDGSBH$PMPSUFYUVSF% T5FYUVSF W5FYUVSF$PPSE
HM@'SBH$PMPSSEPU GSBH$PMPSSHC WFD HM@'SBH$PMPSHEPU GSBH$PMPSSHC WFD HM@'SBH$PMPSCEPU GSBH$PMPSSHC WFD ^ ᶇಈըʹϑΟϧλʔΛ͔͚Δ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ɾΥʔλʔϚʔΫͷ#JUNBQΛ0QFO(-ʹૹΔ ɾ'SBHNFOU4IBEFSͰBMQIB߹Λߦ͏
ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ #JUNBQΛ0QFO(-ʹૹΔ ը૾ग़య͚Μ͝ͷ͓ෑɹ ςΫενϟϚοϐϯάɹ IUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF
ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ը૾ग़య͚Μ͝ͷ͓ෑɹ ςΫενϟϚοϐϯάɹ IUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF
ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ը૾ग़య͚Μ͝ͷ͓ෑɹ ςΫενϟϚοϐϯάɹ IUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF
'SBHNFOU4IBEFSͰΞϧϑΝ߹ FYUFOTJPO(-@0&4@&(-@JNBHF@FYUFSOBMSFRVJSF QSFDJTJPONFEJVNQqPBU WBSZJOHWFDW5FYUVSF$PPSE VOJGPSNTBNQMFS&YUFSOBM0&4T5FYUVSF VOJGPSNMPXQTBNQMFS%P5FYUVSFΞοϓϩʔυͨ͠UFYUVSF WPJENBJO \ MPXQWFDDUFYUVSF% T5FYUVSF
W5FYUVSF$PPSE MPXQWFDDUFYUVSF% P5FYUVSF W5FYUVSF$PPSE MPXQWFDPVUQVU$PMPS PVUQVU$PMPSSDS DS DB DB PVUQVU$PMPSHDH DH DB DB PVUQVU$PMPSCDC DC DB DB PVUQVU$PMPSBDB DB DB HM@'SBH$PMPSPVUQVU$PMPS ^ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ
࣍ ᶃಈըͱ ᶄಈըฤूͷجૅࣝ ᶅ.FEJB$PEFDͷϙΠϯτ ᶆ0QFO(-&4ͷϙΠϯτ ᶇಈըʹϑΟϧλʔΛ͔͚Δ ᶈಈըʹΥʔλʔϚʔΫΛ͚ͭΔ ᶉ࠷ޙʹ
ᶉ࠷ޙʹ ɾ"OESPJEͰಈըฤू.FEJB$PEFDͱ0QFO(-&4 ɹͷ߹Θٕͤ ɾ0QFO(-&4ྗ্͕͕Δͱදݱͷ෯͕Δ ɾ4FSWJDFͰ࣮ߦ͢Δ͜ͱΛΦεεϝ͠·͢ɻ ɾJ04ʹൺΔͱɺഒಈըੜͷ͕͔͔࣌ؒ ɹͬͯ͠·͏ͨΊɺ69Λߟྀ͢Δඞཁ͋Γɻ
ᶉ࠷ޙʹ &YP1MBZFS'JMUFS IUUQTHJUIVCDPN.BTBZVLJ4VEB&YP1MBZFS'JMUFS ɾಈըϓϨϏϡʔதʹϑΟϧλʔΛ͔͚Δ ɹฤू݁ՌΛίʔσοΫͨͣʹ͔֬ΊΒΕΔ
ᶉ࠷ޙʹ ࢀߟϦϯΫհ ɾ"OESPJEͰ.FEJB$PEFDΛ͍''NQFHͳ͠ͰಈըΛѹॖ͢Δํ๏ʢϥΠϒϥϦ͋Γʣ ɹ .FEJB$PEFDͷΈʹେมࢀߟʹͳΓ·͢ ɹIUUQTRJJUBDPNZVZB@QSFTUPJUFNTEFDCE ɾ͚Μ͝ͷ͓ෑ 0QFO(-ͷΈʹେมࢀߟʹͳΓ·͢
ɹIUUQULFOHPHJUIVCJPCMPHPQFOHMFTELOPXMFEHF ɾϚΠφϏχϡʔεɹ%άϥϑΟοΫεͷ֓೦ͱϨϯμϦϯάύΠϓϥΠϯ ɹIUUQTOFXTNZOBWJKQBSUJDMFHSBQIJDT
ᶉ࠷ޙʹ 41&$*"-5)"/,4 :VZB5BOBLB IUUQTHJUIVCDPNZQSFTUP IUUQTRJJUBDPNZVZB@QSFTUP IUUQTUXJUUFSDPNZVZB@QSFTUP ,FOHP5BUFJTIJ IUUQULFOHPHJUIVCJP IUUQTHJUIVCDPNULFOHP IUUQTUXJUUFSDPNULFOHP
͓·͚ (-&4HM6OJGPSNGW ؔΛ࣮ߦ͢Δͱ ͳ͔ͥ(BMBYZγϦʔζͷܥҎ্Ͱ TJHOBM 4*(4&(7 DPEF 4&(7@."1&33 Ͱམͪ·ͨ͠
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠