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
Masayuki Suda
February 08, 2018
Programming
3
4.6k
MediaCodecで動画編集をしてみよう
DroidKaigi 2018でプレゼンさせていただいたスライドです。
Masayuki Suda
February 08, 2018
Tweet
Share
More Decks by Masayuki Suda
See All by Masayuki Suda
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
2
2.3k
Kotlin Collection関数をマスター
masayukisuda
1
5.3k
Jetpack Macrobenchmarkを試してみた
masayukisuda
1
300
Androidで動画編集アプリの技術選択
masayukisuda
1
1.3k
Other Decks in Programming
See All in Programming
The Weight of Data: Rethinking Cloud-Native Systems for the Age of AI
hollycummins
0
220
私の愛したLaravel 〜レールを超えたその先へ〜
kentaroutakeda
12
3.7k
custom_lintで始めるチームルール管理
akaboshinit
0
190
家族・子育て重視/沖縄在住を維持しながらエンジニアとしてのキャリアをどのように育てていくか?
ug
0
260
国漢文混用体からHolloまで
minhee
1
120
Agentic Applications with Symfony
el_stoffel
1
170
新卒から4年間、20年もののWebサービスと 向き合って学んだソフトウェア考古学
oguri
8
7k
英語文法から学ぶ、クリーンな設計の秘訣
newnomad
1
280
Go1.24で testing.B.Loopが爆誕
kuro_kurorrr
0
170
趣味全開のAITuber開発
kokushin
0
150
体得しよう!RSA暗号の原理と解読
laysakura
3
550
パスキーのすべて / 20250324 iddance Lesson.5
kuralab
0
140
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
Producing Creativity
orderedlist
PRO
344
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Docker and Python
trallard
44
3.3k
GraphQLとの向き合い方2022年版
quramy
45
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Statistics for Hackers
jakevdp
798
220k
Being A Developer After 40
akosma
90
590k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Documentation Writing (for coders)
carmenintech
69
4.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Agile that works and the tools we love
rasmusluckow
328
21k
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 Ͱམͪ·ͨ͠
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠