{"id":455334,"date":"2025-04-09T21:01:58","date_gmt":"2025-04-09T21:01:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=455334"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=455334","title":{"rendered":"<span>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0441 AVFoundation. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u0441\u0441\u0435\u0442\u044b \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zo\/vb\/sz\/zovbszypgivtbb0gfu6baqaulwi.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/zo\/vb\/sz\/zovbszypgivtbb0gfu6baqaulwi.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/zo\/vb\/sz\/zovbszypgivtbb0gfu6baqaulwi.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e AVFoundation. \u0412 <a href=\"https:\/\/habr.com\/ru\/articles\/897008\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u0441\u0441\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0451 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u0442\u0435\u043c\u0443 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432. \u0410 \u0435\u0449\u0451 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u044e \u0432\u0430\u0441 \u0441 \u0438\u0434\u0435\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<h2>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/h2>\n<p>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0430\u0441\u0441\u0435\u0442, \u0435\u0433\u043e \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0443\u0434\u0438\u043e- \u0438 \u0432\u0438\u0434\u0435\u043e\u0430\u0441\u0441\u0435\u0442\u043e\u0432.<\/p>\n<p><strong>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 (\u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u0435\u0434\u0438\u0430) \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u041e\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u043c\u0438, \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rz\/zx\/pu\/rzzxpux6skefhm33eispw9-6rky.jpeg\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/rz\/zx\/pu\/rzzxpux6skefhm33eispw9-6rky.jpeg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/rz\/zx\/pu\/rzzxpux6skefhm33eispw9-6rky.jpeg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u2014 iMovie \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0434\u0440\u044f\u0434: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/kx\/cs\/d0\/kxcsd07joigrwd_bfsekmh2cn3k.gif\" width=\"250\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/kx\/cs\/d0\/kxcsd07joigrwd_bfsekmh2cn3k.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/kx\/cs\/d0\/kxcsd07joigrwd_bfsekmh2cn3k.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 iPhone 5-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 SLO-MO. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0435\u0433\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u043e\u043d\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f 15 \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u0430\u043a iPhone \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b \u0432\u0438\u0434\u0435\u043e- \u0438 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434? \u0410 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 TIME-LAPSE \u0432\u0441\u0451 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0421\u0435\u043a\u0440\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e iPhone \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 15 \u0441\u0435\u043a\u0443\u043d\u0434, \u0433\u0434\u0435 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442 \u043d\u0430 \u0432\u0441\u044e \u0435\u0451 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<p>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a CupCat, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u043a\u043e\u043b\u043b\u0430\u0436\u0438 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e. \u0414\u0443\u043c\u0430\u044e, \u0432\u0430\u043c \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ot\/oa\/qo\/otoaqoefhoghxtohvjmpv6qzbe4.gif\" width=\"250\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/ot\/oa\/qo\/otoaqoefhoghxtohvjmpv6qzbe4.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/ot\/oa\/qo\/otoaqoefhoghxtohvjmpv6qzbe4.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438 \u0432\u044b, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u043d\u0430\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043a\u0430\u043a\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435?<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442?<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0441\u0441\u0435\u0442\u0430\u043c, \u043d\u043e \u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e \u0443 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0443 \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438?<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0435\u0437 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u044d\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c. \u041f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0434\u0435\u0439\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438 \u0432 AVFoundation \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcomposition\" rel=\"noopener noreferrer nofollow\">AVComposition: AVAsset<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablecomposition\" rel=\"noopener noreferrer nofollow\">AVMutableComposition: AVComposition<\/a>.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441 Objective-C, \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445. \u041d\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f: \u043f\u0435\u0440\u0432\u044b\u0439 (<code>AVComposition<\/code>) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0432\u0442\u043e\u0440\u043e\u0439 (<code>AVMutableComposition<\/code>) \u2014 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0420\u0430\u043d\u044c\u0448\u0435 Apple \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e <code>AVComposition<\/code> \u0438\u0434\u0451\u0442 \u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442 <code>AVAsset<\/code>, \u0430 \u043d\u0435 \u043e\u0442 <code>AVURLAsset<\/code>. \u042d\u0442\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 <code>AVURLAsset<\/code>, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438 iPhone.<\/p>\n<h2>\u0422\u0440\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439<\/h2>\n<p>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0445 \u0442\u0440\u0435\u043a\u0430\u0445. \u0414\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 AVFoundation \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcompositiontrack\" rel=\"noopener noreferrer nofollow\">AVCompositionTrack: AVAssetTrack<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablecompositiontrack\" rel=\"noopener noreferrer nofollow\">AVMutableCompositionTrack: AVCompositionTrack<\/a>.<\/p>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435 SLO-MO \u0432\u0438\u0434\u0435\u043e \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438? \u041f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0435\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0437. \u041e\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u2014 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439, \u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u2014 \u043d\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>segments<\/code>. \u0414\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c? \u042d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430.<\/p>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcompositiontracksegment\" rel=\"noopener noreferrer nofollow\">AVCompositionTrackSegment: AVAssetTrackSegment<\/a>. \u041e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>var sourceTrackID: CMPersistentTrackID { get }<\/code>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u043f\u043e\u0447\u0435\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u0440\u0435\u043a \u0435\u0441\u0442\u044c \u0442\u0443\u0442, \u0430 \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0435\u0433\u043e \u043d\u0435\u0442? \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 SLO-MO \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e:<\/p>\n<pre><code class=\"swift\">let composition: AVComposition let videoTrack = try await composition.loadTracks(withMediaType: .video).first! try await videoTrack.load(.segments)  - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.000,+2.475] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [0.000,+2.475]&gt; - 1 : &lt;AVCompositionTrackSegment: ... timeRange [2.475,+0.015] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.475,+0.013]&gt; - 2 : &lt;AVCompositionTrackSegment: ... timeRange [2.490,+0.045] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.488,+0.033]&gt; - 3 : &lt;AVCompositionTrackSegment: ... timeRange [2.535,+0.083] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.522,+0.048]&gt; - 4 : &lt;AVCompositionTrackSegment: ... timeRange [2.618,+0.130] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.570,+0.055]&gt; - 5 : &lt;AVCompositionTrackSegment: ... timeRange [2.748,+0.182] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.625,+0.050]&gt; - 6 : &lt;AVCompositionTrackSegment: ... timeRange [2.930,+84.748] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.675,+10.593]&gt; - 7 : &lt;AVCompositionTrackSegment: ... timeRange [87.678,+0.107] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.268,+0.028]&gt; - 8 : &lt;AVCompositionTrackSegment: ... timeRange [87.785,+0.075] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.297,+0.032]&gt; - 9 : &lt;AVCompositionTrackSegment: ... timeRange [87.860,+0.048] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.328,+0.028]&gt; - 10 : &lt;AVCompositionTrackSegment: ... timeRange [87.908,+0.027] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.357,+0.020]&gt; - 11 : &lt;AVCompositionTrackSegment: ... timeRange [87.935,+0.008] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.377,+0.008]&gt; - 12 : &lt;AVCompositionTrackSegment: ... timeRange [87.943,+0.078] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.385,+0.080]&gt; - 13 : &lt;AVCompositionTrackSegment: ... timeRange [88.022,+2.375] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.465,+2.375]&gt; <\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0440\u0443\u043a\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>source<\/code> \u0438 <code>target<\/code> (\u043f\u0435\u0440\u0432\u044b\u0439: <code>+2.475<\/code>, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439: <code>+2.375<\/code>) \u2014 \u043e\u043d\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u0410 \u0432\u043e\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>source<\/code> \u0438 <code>target<\/code> \u2014 \u0432\u0438\u0434\u0435\u043e \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435. \u0422\u0430\u043a \u0438 \u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u21168 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"swift\">- 8 : &lt;AVCompositionTrackSegment: ... timeRange [87.785,+0.075] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.297,+0.032]&gt; <\/code><\/pre>\n<pre><code class=\"swift\">try await videoTrack.load(.segments)[8]  &lt; AVCompositionTrackSegment: 0x30219a3e0 timeRange [87.785,+0.075] from trackID 1 of asset file:\/\/\/var\/mobile\/Media\/DCIM\/100APPLE\/IMG_0283.MOV sourceTimeRange [13.297,+0.032] &gt; <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u0418\u0437 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u0441 ID 1 \u0444\u0430\u0439\u043b\u0430 <code>file:\/\/\/var\/mobile\/Media\/DCIM\/100APPLE\/IMG_0283.MOV<\/code> \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 0.032 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 13.297 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u044d\u0442\u043e\u0442 \u043a\u0443\u0441\u043e\u043a \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 87.785 \u0441\u0435\u043a\u0443\u043d\u0434\u0435 \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 0.075 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"swift\">let segment: AVCompositionTrackSegment  let speed = segment.timeMapping.source.duration.seconds \/ segment.timeMapping.target.duration.seconds  speed \/\/ 0.032 \/ 0.075 = 43% <\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0430\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 TIME-LAPSE, \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0432\u043e\u0438\u0445 SLO-MO \u0438\u043b\u0438 TIME-LAPSE \u0432\u0438\u0434\u0435\u043e, \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0435\u0441\u044c \u0441 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438 \u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435. \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0432\u044b\u0448\u0435, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0441\u043a\u0440\u044b\u043b \u0441\u0441\u044b\u043b\u043a\u0438. \u042d\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u2014 \u043e\u043d\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435. \u041d\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0447\u043d\u0451\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 iPhone, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c:<\/p>\n<pre><code class=\"swift\">let composition: AVComposition let videoTrack = try await composition.loadTracks(withMediaType: .video).first! try await videoTrack.load(.segments)  - 0 : &lt;     AVCompositionTrackSegment: 0x3039bb9c0     timeRange [0.000,+5.780]     from trackID 1     of asset file:\/\/\/private\/var\/mobile\/Containers\/Data\/Application\/B3B974E0-1059-4358-8FE3-D51DDA490A2C\/tmp\/VideoEditor\/Video\/4920F4D2-AE9D-41C5-A4FB-9593F7F06EE1.MOV     sourceTimeRange [0.000,+5.780] &gt; - 1 : &lt;     AVCompositionTrackSegment: 0x3039bbbf0     timeRange [5.780,+5.000]     from trackID 1     of asset file:\/\/\/private\/var\/mobile\/Containers\/Data\/Application\/B3B974E0-1059-4358-8FE3-D51DDA490A2C\/tmp\/VideoEditor\/GeneratedVideo\/0FDE836A-E944-45B6-81EE-8936B7B4E9F0.mov     sourceTimeRange [0.000,+5.000] &gt; <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0432\u0438\u0434\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u2014 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u0431\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: <code>timeRange<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>sourceTimeRange<\/code>. \u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441 0 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0441 5.780.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>trackID<\/code> \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 <code>AVCompositionTrackSegment<\/code>, \u0430 \u043d\u0435 \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f <code>AVAssetTrackSegment<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438, \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 (<code>asset file<\/code>), \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 (<code>trackID<\/code>) \u0438 \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 (<code>sourceTimeRange<\/code>) \u0432\u0437\u044f\u0442 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440. \u042f \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u2014 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438, \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u2014 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c. \u041e \u043d\u0438\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435. \u041b\u0443\u0447\u0448\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0442\u0440\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043a\u043e\u0434 \u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043e\u0431\u0437\u043e\u0440\u0430 <code>AVMutableCompositionTrack<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u0430 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>AVMutableComposition<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c ID func addMutableTrack( withMediaType mediaType: AVMediaType,  preferredTrackID: CMPersistentTrackID ) -&gt; AVMutableCompositionTrack?  \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u0430 \u043f\u043e ID func removeTrack(_ track: AVCompositionTrack) <\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>kCMPersistentTrackID_Invalid<\/code> \u0434\u043b\u044f <code>preferredTrackID<\/code> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 ID. \u041f\u0440\u0438\u043c\u0435\u0440: <code>composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)<\/code>.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u043e\u0432. <strong>\u041f\u0435\u0440\u0432\u0430\u044f<\/strong> \u2014 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u0437 \u0442\u0440\u0435\u043a\u0430 \u0430\u0441\u0441\u0435\u0442\u0430 \u0432 \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434\u044b <code>AVMutableCompositionTrack<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0442\u0440\u0435\u043a\u0430 \u0430\u0441\u0441\u0435\u0442\u0430 \u0432 \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 func insertTimeRange( _ timeRange: CMTimeRange, of track: AVAssetTrack, at startTime: CMTime ) throws  \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432 \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 func insertEmptyTimeRange(_ timeRange: CMTimeRange) <\/code><\/pre>\n<p>\u042f \u043d\u0435 \u0440\u0430\u0437 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 <code>-11800 AVErrorUnknown<\/code> \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438, \u0445\u043e\u0442\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0451.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0442\u0440\u0435\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b\u043f\u043b\u044b\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 <code>-11824 AVErrorCompositionTrackSegmentsNotContiguous<\/code>. \u0422\u0430\u043c, \u0433\u0434\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043b\u0438 \u0442\u0440\u0435\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>isEmpty<\/code>, \u0430 \u0443 \u0442\u0440\u0435\u043a\u0430 \u2014 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432. \u0414\u043e\u043f\u043e\u043b\u043d\u044e, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441 \u043d\u0443\u043b\u044f (<code>targetTimeRange.start<\/code> = 0).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u043e\u0434\u044b \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043b\u043e\u0433\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>-11820<\/code>, \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u043d\u0430\u0447\u0430\u0442, \u0432\u043e\u0442 \u043b\u0430\u0439\u0444\u0445\u0430\u043a: \u043d\u0430\u0436\u043c\u0438\u0442\u0435 <code>cmd+shift+o<\/code>, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 <code>AVError<\/code>, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u043f\u043e \u043f\u0443\u0442\u0438 <code>AVFoundation &gt; AVError<\/code>. \u0422\u0430\u043c \u0432\u0441\u0435 \u043a\u043e\u0434\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"swift\">typedef NS_ERROR_ENUM(AVFoundationErrorDomain, AVError) {     AVErrorUnknown                                      = -11800,     AVErrorOutOfMemory                                  = -11801,     AVErrorSessionNotRunning                            = -11803,     AVErrorDeviceAlreadyUsedByAnotherSession            = -11804,     AVErrorNoDataCaptured                               = -11805,     AVErrorSessionConfigurationChanged                  = -11806,     ... } <\/code><\/pre>\n<p><strong>\u0412\u0442\u043e\u0440\u0430\u044f<\/strong> \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0432 \u0442\u0440\u0435\u043a:<\/p>\n<pre><code class=\"swift\">\/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e \u0447\u0430\u0441\u0442\u0438 \u0430\u0441\u0441\u0435\u0442\u0430 AVCompositionTrackSegment( \/\/ URL \u0430\u0441\u0441\u0435\u0442\u0430 url URL: URL, \/\/ ID \u0442\u0440\u0435\u043a\u0430 \u0430\u0441\u0441\u0435\u0442\u0430 \u0434\u043b\u044f \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u044f trackID: CMPersistentTrackID, \/\/ \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u044f \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u0430 sourceTimeRange: CMTimeRange, \/\/ \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e targetTimeRange: CMTimeRange )  \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0442\u0440\u0435\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 AVCompositionTrackSegment(timeRange: CMTimeRange) <\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 <code>AVCompositionTrack<\/code> \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<pre><code class=\"swift\">\/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c func validateSegments(_ trackSegments: [AVCompositionTrackSegment]) throws \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c var segments: [AVCompositionTrackSegment]! <\/code><\/pre>\n<p>\u0411\u043e\u043d\u0443\u0441 \u043e\u0442 \u043c\u0435\u043d\u044f \u2014 \u043c\u0435\u0442\u043e\u0434 <code>AVCompositionTrack<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u043a\u0430 \u0438\u043b\u0438 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u0438:<\/p>\n<pre><code class=\"swift\">\/\/ \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 func scaleTimeRange(_ timeRange: CMTimeRange, toDuration duration: CMTime) <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u0432\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0438\u0434\u0435\u043e. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0441\u0442\u044c \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0447\u0451\u0440\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d), \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e. \u0410\u0443\u0434\u0438\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u2014 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0431\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438.<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0430\u0441\u0441\u0435\u0442\u044b \u0438 \u0438\u0445 \u0442\u0440\u0435\u043a\u0438:<\/p>\n<pre><code class=\"swift\">let asset1 = AVURLAsset(url: asset1LocalUrl) let asset2 = AVURLAsset(url: asset2LocalUrl)  let asset1VideoTrack = try await asset1.loadTracks(withMediaType: .video).first! let asset2VideoTrack = try await asset2.loadTracks(withMediaType: .video).first! <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0438:<\/p>\n<pre><code class=\"swift\">let composition = AVMutableComposition()  \/\/ \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 let compositionVideoTrack1 = composition.addMutableTrack( withMediaType: .video,  preferredTrackID: kCMPersistentTrackID_Invalid )!  \/\/ \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 let compositionVideoTrack2 = ... \/\/ \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0440\u0435\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b:<\/p>\n<pre><code class=\"swift\">try await composition.load(.tracks)  \/\/ \u043e\u0431\u0430 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u2014 \u0443\u0441\u043f\u0435\u0445 &lt;AVMutableComposition: 0x60000029c980 tracks = (     \"&lt;AVMutableCompositionTrack: ... trackID = 1, mediaType = vide, ...\",     \"&lt;AVMutableCompositionTrack: ... trackID = 2, mediaType = vide, ...\" )&gt; <\/code><\/pre>\n<p>I have an asset, I have a composition&#8230; Ooo, compositionasset. <strong>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043f\u0435\u0440\u0432\u0430\u044f<\/strong>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0432\u0441\u0451 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 let asset1VideoTrackTimeRange = try await asset1VideoTrack.load(.timeRange) try compositionVideoTrack1.insertTimeRange( asset1VideoTrackTimeRange, of: asset1VideoTrack, at: .zero )  \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u043e\u0442\u0441\u0442\u0443\u043f \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 compositionVideoTrack2.insertEmptyTimeRange(asset1VideoTrackTimeRange)  \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0432\u0441\u0451 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e try compositionVideoTrack2.insertTimeRange( try await asset2VideoTrack.load(.timeRange), of: asset2VideoTrack, at: asset1VideoTrackTimeRange.end ) <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"swift\">for track in try await composition.load(.tracks) { try await track.load(.segments) }  \u25bf 0 : Optional&lt;Array&lt;AVCompositionTrackSegment&gt;&gt; \u25bf some : 1 element   - 0 : &lt;         AVCompositionTrackSegment: ...         timeRange [0.000,+10.008]         from trackID 1         of asset \u0441\u0441\u044b\u043b\u043a\u0430_1         sourceTimeRange [0.000,+10.008]     &gt; \u25bf 1 : Optional&lt;Array&lt;AVCompositionTrackSegment&gt;&gt; \u25bf some : 2 elements   - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.000,+10.008] is empty&gt;   - 1 : &lt;         AVCompositionTrackSegment: ...         timeRange [10.008,+5.000]         from trackID 2         of asset \u0441\u0441\u044b\u043b\u043a\u0430_2         sourceTimeRange [0.000,+5.000] &gt; <\/code><\/pre>\n<p>\u0414\u0432\u0430 \u0430\u0441\u0441\u0435\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u0432\u0443\u0445 \u0442\u0440\u0435\u043a\u0430\u0445 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u2014 \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u0423\u0441\u043f\u0435\u0445!<\/p>\n<p>I have an asset, I have a composition&#8230; Ooo, compositionasset. <strong>\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0432\u0442\u043e\u0440\u0430\u044f<\/strong>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 let asset1VideoTrackTimeRange = try! await asset1VideoTrack.load(.timeRange) var compositionVideoTrack1Segments: [AVCompositionTrackSegment] = [] compositionVideoTrack1Segments.append( AVCompositionTrackSegment( url: asset1LocalUrl, trackID: asset1VideoTrack.trackID, sourceTimeRange: asset1VideoTrackTimeRange, targetTimeRange: asset1VideoTrackTimeRange ) ) \/\/ \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c try! compositionVideoTrack1.validateSegments(compositionVideoTrack1Segments) compositionVideoTrack1.segments = compositionVideoTrack1Segments  \/\/ \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 let asset2VideoTrackTimeRange = try! await asset2VideoTrack.load(.timeRange) var compositionVideoTrack2Segments: [AVCompositionTrackSegment] = [] compositionVideoTrack2Segments.append( contentsOf: [ \/\/ \u043e\u0442\u0441\u0442\u0443\u043f \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 AVCompositionTrackSegment(timeRange: asset1VideoTrackTimeRange), \/\/ \u0432\u0438\u0434\u0435\u043e \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 AVCompositionTrackSegment( url: asset2LocalUrl, trackID: asset2VideoTrack.trackID, sourceTimeRange: asset2VideoTrackTimeRange, targetTimeRange: CMTimeRange( start: asset1VideoTrackTimeRange.duration, duration: asset2VideoTrackTimeRange.duration ) ) ] ) \/\/ \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c try! compositionVideoTrack2.validateSegments(compositionVideoTrack2Segments) compositionVideoTrack2.segments = compositionVideoTrack2Segments <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438. \u041e\u0431\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043d\u0430 <code>AVAsset<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a. \u0422\u0435\u043f\u0435\u0440\u044c \u044f\u0441\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443: <code>AVComposition<\/code> \u2014 \u0442\u043e\u0436\u0435 <code>AVAsset<\/code>, \u043d\u043e \u0443 \u043d\u0435\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u043e\u0432, \u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 <code>AVPlayer<\/code>, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0438\u0442. \u041b\u0443\u0447\u0448\u0435 \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u0441\u0430\u043c\u0443\u044e \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/strong>. \u041f\u043e\u0432\u0442\u043e\u0440\u044e: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u043a\u0438 (\u0430\u0443\u0434\u0438\u043e \u0438\/\u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e), \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441 \u0442\u0440\u0435\u043a\u043e\u0432 \u0430\u0441\u0441\u0435\u0442\u0430 \u043d\u0430 \u0442\u0440\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 <strong>\u043c\u0430\u0441\u0441\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ol>\n<li>\n<p><em>\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 (\u0430\u0443\u0434\u0438\u043e \u0438\/\u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e)<\/em>. \u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0439\u0442\u0435 \u0430\u0441\u0441\u0435\u0442\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><em>\u041d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0430\u0443\u0434\u0438\u043e \u043d\u0430 \u0432\u0438\u0434\u0435\u043e, \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u0432\u0438\u0434\u0435\u043e)<\/em>. \u041f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0439\u0442\u0435 <code>targetTimeRange<\/code> \u0442\u0440\u0435\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><em>\u041e\u0431\u0440\u0435\u0437\u043a\u0430<\/em>. \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 <code>sourceTimeRange<\/code> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441 <code>targetTimeRange<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><em>\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435<\/em>. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435 <code>sourceTimeRange<\/code> \u0438 <code>targetTimeRange<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <code>sourceTimeRange.duration \/ targetTimeRange.duration = x<\/code>, \u0433\u0434\u0435 <code>x<\/code> \u2014 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f (&gt;1) \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f (&lt;1).<\/p>\n<\/li>\n<\/ol>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, \u0432\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u0435\u0449\u0451 \u043a\u0443\u0447\u0443 \u0438\u0434\u0435\u0439.<\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0438 \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0438\u0445 \u0432 \u044d\u0442\u043e\u043c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u2014 \u043c\u043e\u044f \u0446\u0435\u043b\u044c \u0437\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0434\u0435\u0438. \u041d\u043e \u044d\u0442\u0438\u0445 \u0438\u0434\u0435\u0439 \u0445\u0432\u0430\u0442\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c\u0438\u043c.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u043a\u0430\u0436\u0443 \u00ab\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u00bb \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pb\/-k\/yg\/pb-kygf69ordc2pnkprl6gsyzto.png\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/pb\/-k\/yg\/pb-kygf69ordc2pnkprl6gsyzto.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/pb\/-k\/yg\/pb-kygf69ordc2pnkprl6gsyzto.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0438\u0448\u0443 \u0435\u0451 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 (\u0432\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445):<\/p>\n<ul>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e A: \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 0.0\u20130.6 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 6.0, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u043d\u0430 0.0\u20136.0 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 1x).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e B: \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 0.0\u20130.5 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 5.0, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u043d\u0430 0.5\u20135.0 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 1x).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e C: \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 69.0\u201377.0 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 300.0, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u043d\u0430 6.0\u201310.0 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 2x).<\/p>\n<\/li>\n<li>\n<p>\u041c\u0443\u0437\u044b\u043a\u0430: \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 0.0\u20136.0 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 190.0, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u043d\u0430 2.0\u20138.0 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 1x).<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u043d\u0443\u0441: \u043c\u0435\u0436\u0434\u0443 5.0 \u0438 6.0 \u0432 \u043a\u043e\u043b\u043b\u0430\u0436\u0435 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u0430\u0434\u0440 \u0432\u0438\u0434\u0435\u043e B.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0440\u0435\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438:<\/p>\n<pre><code class=\"swift\">let composition: AVMutableComposition  try await composition.load(.tracks) \/\/ \u041c\u0443\u0437\u044b\u043a\u0430 \"&lt;AVMutableCompositionTrack: ... trackID = 1, mediaType = soun, ...&gt;\", \/\/ \u0412\u0438\u0434\u0435\u043e A \"&lt;AVMutableCompositionTrack: ... trackID = 2, mediaType = vide, ...&gt;\", \"&lt;AVMutableCompositionTrack: ... trackID = 3, mediaType = soun, ...&gt;\", \/\/ \u0412\u0438\u0434\u0435\u043e B \"&lt;AVMutableCompositionTrack: ... trackID = 4, mediaType = vide, ...&gt;\", \"&lt;AVMutableCompositionTrack: ... trackID = 5, mediaType = soun, ...&gt;\", \/\/ \u0412\u0438\u0434\u0435\u043e C \"&lt;AVMutableCompositionTrack: ... trackID = 6, mediaType = vide, ...&gt;\", \"&lt;AVMutableCompositionTrack: ... trackID = 7, mediaType = soun, ...&gt;\" <\/code><\/pre>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0435\u043a\u043e\u0432:<\/p>\n<pre><code class=\"swift\">for track in try await composition.load(.tracks) { try await track.load(.segment) }  \/\/ MARK: - \u041c\u0443\u0437\u044b\u043a\u0430 \u25bf 0 : 2 elements \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \/\/ \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 2.0     - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.0,+2.0] is empty&gt;     \/\/ \u0441\u0430\u043c\u0430 \u043c\u0443\u0437\u044b\u043a\u0430     - 1 : &lt;AVCompositionTrackSegment: ...         timeRange [2.0,+6.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 1 \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u043c\u0443\u0437\u044b\u043a\u0430.mp3         sourceTimeRange [0.000,+6.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438  \/\/ MARK: - \u0412\u0438\u0434\u0435\u043e A \u25bf 1 : 1 element \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a     - 0 : &lt;AVCompositionTrackSegment: ...         timeRange [0.0,+6.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 1 \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_a.mov         sourceTimeRange [0.0,+6.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u25bf 2 : 1 element \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a     - 0 : &lt;AVCompositionTrackSegment: ...         timeRange [0.0,+6.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 2 \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_a.mov         sourceTimeRange [0.0,+6.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438  \/\/ MARK: - \u0412\u0438\u0434\u0435\u043e B \u25bf 3 : 2 elements \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \/\/ \u043a\u043e\u043d\u0442\u0435\u043d\u0442     - 0 : &lt;AVCompositionTrackSegment: ...         timeRange [0.0,+5.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 1 \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_b.mov         sourceTimeRange [0.0,+5.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438     \/\/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u0430\u0434\u0440, \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442 \u043d\u0430 1.0     - 1 : &lt;AVCompositionTrackSegment: ...         timeRange [5.0,+1.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 1 \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_b.mov         sourceTimeRange [5.0,+0.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u25bf 4 : 1 element \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \/\/ \u043a\u043e\u043d\u0442\u0435\u043d\u0442     - 0 : &lt;AVCompositionTrackSegment: ...         timeRange [0.000,+5.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 2 \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_b.mov         sourceTimeRange [0.0,+5.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438  \/\/ MARK: - \u0412\u0438\u0434\u0435\u043e C  \/\/ \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c 2x, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 sourceTimeRange \u0438 timeRange \u25bf 5 : 2 elements \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \/\/ \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 6.0     - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.0,+6.0] is empty&gt;     \/\/ \u043a\u043e\u043d\u0442\u0435\u043d\u0442     - 1 : &lt;AVCompositionTrackSegment: ...         timeRange [6.0,+4.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 1 \/\/ &lt;- \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_c.mov         sourceTimeRange [69.0,+8.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u25bf 6 : 2 elements \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \/\/ \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 6.0     - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.0,+6.0] is empty&gt;     \/\/ \u043a\u043e\u043d\u0442\u0435\u043d\u0442     - 1 : &lt;AVCompositionTrackSegment: ...         timeRange [6.0,+4.0] \/\/ &lt;- \u043a\u0443\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438         from trackID 2 \/\/ &lt;- \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         of asset \u0432\u0438\u0434\u0435\u043e_c.mov         sourceTimeRange [69.0,+8.0]&gt; \/\/ &lt;- \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 <\/code><\/pre>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b\u0438, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f. \u0417\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u0441\u0430\u043c\u0438. \u0410 \u044f \u0434\u0432\u0438\u0433\u0430\u044e\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043d\u0430 \u0442\u0440\u0435\u043a\u0430\u0445. \u041d\u043e \u0432\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043d\u0438 \u043d\u0430\u043c\u0451\u043a\u0430 \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u043b\u0438 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0442\u0440\u0435\u043a\u0438 \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0445 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043a\u0430\u043a\u0443\u044e \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c. \u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u043d\u0438\u0436\u0435. \u041e\u043d\u0438 \u043d\u0435 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u042d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445.<\/p>\n<h2>\u0412\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/h2>\n<p>\u0412 AVFoundation \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e.<\/p>\n<p><strong>\u0412\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438: \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u043e\u0432, \u0438\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 AVFoundation \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430: <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avvideocomposition\" rel=\"noopener noreferrer nofollow\">AVVideoComposition<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablevideocomposition\" rel=\"noopener noreferrer nofollow\">AVMutableVideoComposition: AVVideoComposition<\/a>.<\/p>\n<p>\u042f \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>AVVideoComposition<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 var renderSize: CGSize { get } \/\/ \u0434\u043b\u0438\u043d\u0430 \u043a\u0430\u0434\u0440\u0430 var frameDuration: CMTime { get } \/\/ \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u2014 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043b\u043e\u0448\u0430\u0434\u043a\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 var instructions: [any AVVideoCompositionInstructionProtocol] { get } <\/code><\/pre>\n<p>\u0421 <code><strong>var renderSize: CGSize { get }<\/strong><\/code> \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u043d\u0430\u043b\u0430, \u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f 1000&#215;1000, \u0445\u043e\u0442\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 4K-\u0432\u0438\u0434\u0435\u043e. \u0417\u0430\u0434\u0430\u0451\u0442\u0435 <code>CGSize(width: 1000, height: 1000)<\/code>, \u0438 \u0433\u043e\u0442\u043e\u0432\u043e. \u041a\u0430\u043a \u0432\u0438\u0434\u0435\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u043c\u0435\u0441\u0442\u044f\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0435 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0410 \u0432\u043e\u0442 <code><strong>var frameDuration: CMTime { get }<\/strong><\/code> \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u043f\u0440\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0438\u0434\u0435\u043e \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 30 FPS (\u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u0430\u0434\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 <code>1\/30<\/code> \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0430\u0451\u0442\u0435 <code>frameDuration<\/code> \u043a\u0430\u043a <code>CMTime(value: 1, timescale: 24)<\/code>, \u043a\u0430\u0434\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 <code>1\/24<\/code> \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 24 FPS. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <code>CMTime(value: 1, timescale: 60)<\/code> \u2014 \u0431\u0443\u0434\u0435\u0442 60 FPS, \u0438 \u0432\u0438\u0434\u0435\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u0435\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043a\u0430\u043a \u0438 <code>renderSize<\/code>, <code>frameDuration<\/code> \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0438 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u041d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c <code>frameDuration<\/code>? \u0412\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0434\u043d\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 30 FPS, \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 60 FPS, \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u2014 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0441\u0435\u043c\u0438 \u0442\u0440\u0435\u043a\u0430\u043c\u0438. \u041f\u043e \u043c\u043e\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443, \u043b\u0443\u0447\u0448\u0435 \u0432\u0437\u044f\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 FPS \u0441\u0440\u0435\u0434\u0438 \u0442\u0440\u0435\u043a\u043e\u0432 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a <code><strong>var instructions: [any AVVideoCompositionInstructionProtocol] { get }<\/strong><\/code> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0422\u0443\u0442 \u0432\u0441\u0451 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0440\u0438\u0441\u0442\u0435\u0433\u043d\u0438\u0442\u0435\u0441\u044c, \u0432\u0437\u043b\u0435\u0442\u0430\u0435\u043c!<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0430\u044e\u0442, \u043a\u0430\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0438 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041e\u043d\u0438 \u0437\u0430\u0434\u0430\u044e\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u043c\u0430\u0441\u0448\u0442\u0430\u0431, \u043f\u043e\u0432\u043e\u0440\u043e\u0442, \u043f\u043e\u0437\u0438\u0446\u0438\u044e) \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avvideocompositioninstruction-swift.class\" rel=\"noopener noreferrer nofollow\">AVVideoCompositionInstruction<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablevideocompositioninstruction\" rel=\"noopener noreferrer nofollow\">AVMutableVideoCompositionInstruction: AVVideoCompositionInstruction<\/a>. \u0412\u0442\u043e\u0440\u043e\u0439 \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 \u2014 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445. \u041f\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>AVVideoCompositionInstruction<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d, \u0433\u0434\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f var timeRange: CMTimeRange { get } \/\/ \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 var layerInstructions: [AVVideoCompositionLayerInstruction] { get } \/\/ \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 var backgroundColor: CGColor? { get } <\/code><\/pre>\n<p>\u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442? \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 <code>timeRange<\/code>. \u041f\u043e\u043b\u0435 <code>layerInstructions<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u0435\u0441\u044c <code>renderSize<\/code>, \u043f\u0443\u0441\u0442\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f <code>backgroundColor<\/code>.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c X \u0432\u0438\u0434\u0435\u043e \u0441 A \u043f\u043e B \u0441\u0435\u043a\u0443\u043d\u0434\u0443? \u0417\u0430\u0434\u0430\u0439\u0442\u0435 <code>timeRange<\/code> \u043e\u0442 A \u0434\u043e B \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 X \u0432\u0438\u0434\u0435\u043e \u043f\u0440\u043e\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u044e <code>layerInstructions<\/code>, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0434\u0440\u0435.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f? \u041e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c <code>timeRange<\/code>:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0433\u0434\u0435?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438 \u0433\u0434\u0435?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0438 \u0433\u0434\u0435?<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avvideocompositionlayerinstruction\" rel=\"noopener noreferrer nofollow\">AVVideoCompositionLayerInstruction<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablevideocompositionlayerinstruction\" rel=\"noopener noreferrer nofollow\">AVMutableVideoCompositionLayerInstruction: AVVideoCompositionLayerInstruction<\/a>.<\/p>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>AVMutableVideoCompositionLayerInstruction<\/code> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a, \u0432\u0435\u0434\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u043a\u0443:<\/p>\n<pre><code class=\"swift\">convenience init(assetTrack track: AVAssetTrack) <\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<p>\u041a\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0433\u0434\u0435?<\/p>\n<pre><code class=\"swift\">func setOpacityRamp(fromStartOpacity startOpacity: Float, toEndOpacity endOpacity: Float, timeRange: CMTimeRange) func setOpacity(_ opacity: Float, at time: CMTime) <\/code><\/pre>\n<p>\u041a\u0430\u043a\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438 \u0433\u0434\u0435?<\/p>\n<pre><code class=\"swift\">func setTransformRamp(fromStart startTransform: CGAffineTransform, toEnd endTransform: CGAffineTransform, timeRange: CMTimeRange) func setTransform(_ transform: CGAffineTransform, at time: CMTime) <\/code><\/pre>\n<p>\u041a\u0430\u043a\u0430\u044f \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0438 \u0433\u0434\u0435?<\/p>\n<pre><code class=\"swift\">func setCropRectangleRamp(fromStartCropRectangle startCropRectangle: CGRect, toEndCropRectangle endCropRectangle: CGRect, timeRange: CMTimeRange) func setCropRectangle(_ cropRectangle: CGRect, at time: CMTime) <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0432\u0435\u0434\u0451\u043c \u0438\u0442\u043e\u0433. \u0412\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u0438\u0434\u0435\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0410 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u2014 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u043e\u0432.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0430\u0440\u0443 \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0443\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0439\u043c\u0451\u0442\u0435 \u2014 \u0432\u044b\u0434\u044b\u0445\u0430\u0439\u0442\u0435, \u043f\u043e\u0440\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0438\u0434\u0435\u043e? \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b \u0442\u0430\u043a \u0441\u0435\u0431\u0435 \u2014 \u043c\u044b \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e:<\/p>\n<pre><code class=\"swift\">let videoComposition = AVMutableVideoComposition() <\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0451\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"swift\">videoComposition.renderSize = CGSize(width: 2000, height: 2000) videoComposition.frameDuration = CMTime(value: 1, timescale: 60) <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"swift\">\/\/ MARK: - \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 let compositionVideoTrack1Instruction = AVMutableVideoCompositionInstruction()  \/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b compositionVideoTrack1Instruction.backgroundColor = UIColor.red.cgColor compositionVideoTrack1Instruction.timeRange = asset1VideoTrackTimeRange  \/\/ \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f let compositionVideoTrack1LayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: compositionVideoTrack1) compositionVideoTrack1LayerInstruction.setTransform( try await asset1VideoTrack_foot.load(.preferredTransform), at: .zero ) compositionVideoTrack1Instruction.layerInstructions = [compositionVideoTrack1LayerInstruction]  \/\/ MARK: - \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 let compositionVideoTrack2Instruction = ... \/\/ \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e  videoComposition.instructions = [ compositionVideoTrack1Instruction, compositionVideoTrack2Instruction ] <\/code><\/pre>\n<p>\u0422\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e. \u041d\u043e \u043a\u043e\u0435-\u0433\u0434\u0435 \u0441\u0445\u0438\u0442\u0440\u0438\u043b\u0438. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <code>setTransform<\/code> \u2014 \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043b \u0442\u0443\u0434\u0430 <code>try await asset1VideoTrack.load(.preferredTransform)<\/code>. \u0412\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0447\u0442\u043e <code>preferredTransform<\/code> \u0432\u044b\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a \u0430\u0441\u0441\u0435\u0442\u0430, \u043d\u043e \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0432\u044b\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0436\u043c\u0451\u0442\u0441\u044f \u0432\u0435\u0440\u0445\u043d\u0438\u043c \u043b\u0435\u0432\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u044d\u0442\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e.<\/p>\n<p>\u0411\u0435\u0437 <code>setTransform<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a\u0430 \u043b\u044f\u0433\u0443\u0442 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043a \u0435\u0441\u0442\u044c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/p0\/zx\/mp\/p0zxmps5yrpufzxemab4ymaclm0.png\" width=\"250\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/p0\/zx\/mp\/p0zxmps5yrpufzxemab4ymaclm0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/p0\/zx\/mp\/p0zxmps5yrpufzxemab4ymaclm0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421 <code>setTransform<\/code> \u0438 <code>preferredTransform<\/code> \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0432\u044b\u043f\u0440\u0430\u0432\u044f\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/t_\/ml\/go\/t_mlgow5hd12rogmg-pwpyedovo.png\" width=\"250\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/t_\/ml\/go\/t_mlgow5hd12rogmg-pwpyedovo.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/t_\/ml\/go\/t_mlgow5hd12rogmg-pwpyedovo.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0438\u0434\u0438\u0442\u0435, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 <code>setTransform<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <code>preferredTransform<\/code>, \u043d\u043e \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0432\u0430\u043c \u0440\u0435\u0448\u0430\u0442\u044c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0447\u0435\u0440\u0435\u0437 \u0436\u0435\u0441\u0442\u044b (\u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0438\u043d\u0447\u0443, \u0441\u0434\u0432\u0438\u0433 \u043f\u043e \u0441\u0432\u0430\u0439\u043f\u0443), \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 (\u0432\u0438\u0434\u0435\u043e A, B, C \u0438 \u043c\u0443\u0437\u044b\u043a\u0430) \u0432\u0438\u0434\u0435\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0442\u0430\u043a: \u043e\u0434\u043d\u0430 \u0441 0.0 \u043f\u043e 6.0 (\u0434\u043b\u044f A \u0438 B), \u0432\u0442\u043e\u0440\u0430\u044f \u0441 6.0 \u043f\u043e 10.0 (\u0434\u043b\u044f C).<\/p>\n<p>\u041c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0446\u0438\u043a\u043b\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u043e\u0432, \u043d\u043e \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e.<\/p>\n<p>\u0421 \u0432\u0438\u0434\u0435\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0410 \u0447\u0442\u043e \u0441 \u0430\u0443\u0434\u0438\u043e? \u0423\u0437\u043d\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<h2>\u0410\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441<\/h2>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u0430\u0443\u0434\u0438\u043e \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u0434\u0432\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a\u0430 \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438?<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442 Apple. \u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0430\u0443\u0434\u0438\u043e \u0432 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043c\u0435\u043d\u044f\u0430\u0435\u0442\u0441\u044f: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f, \u043f\u043e\u0442\u043e\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442, \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0438\u0437\u043a\u043e\u0439, \u043f\u043e\u0441\u043b\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0440\u0430\u0441\u0442\u0451\u0442 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-_\/fa\/rw\/-_farw132suejrlrtwbwdakh6ee.png\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/-_\/fa\/rw\/-_farw132suejrlrtwbwdakh6ee.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/-_\/fa\/rw\/-_farw132suejrlrtwbwdakh6ee.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441.<\/p>\n<p><strong>\u0410\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u043c\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0412 AVFoundation \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441\u043e\u043c \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avaudiomix\" rel=\"noopener noreferrer nofollow\">AVAudioMix<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutableaudiomix\" rel=\"noopener noreferrer nofollow\">AVMutableAudioMix: AVAudioMix<\/a>. \u041e\u043d\u0438 \u0434\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u044b \u2014 \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e:<\/p>\n<pre><code class=\"swift\">var inputParameters: [AVAudioMixInputParameters] <\/code><\/pre>\n<p>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u043a\u043e\u0432, \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avaudiomixinputparameters\" rel=\"noopener noreferrer nofollow\">AVAudioMixInputParameters<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutableaudiomixinputparameters\" rel=\"noopener noreferrer nofollow\">AVMutableAudioMixInputParameters: AVAudioMixInputParameters<\/a>.<\/p>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 <code>AVAudioMixInputParameters<\/code> \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0442\u0440\u0435\u043a\u0443 \u043d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"swift\">convenience init(track: AVAssetTrack?) <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a \u0442\u0440\u0435\u043a\u0430 \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 <code>AVMutableAudioMixInputParameters<\/code>. \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438 \u0432 AVFoundation \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u0442 0 \u0434\u043e 1:<\/p>\n<pre><code class=\"swift\">func setVolume(_ volume: Float, at time: CMTime) func setVolumeRamp( fromStartVolume startVolume: Float, toEndVolume endVolume: Float,  timeRange: CMTimeRange ) <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0434\u0432\u0435 \u043e\u043f\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u0437\u0430\u0434\u0430\u0442\u044c \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c <code>volume<\/code> \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 <code>time<\/code> \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0447\u0435\u0440\u0435\u0437 <code>setVolume<\/code>. \u0412\u0442\u043e\u0440\u0430\u044f \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442 <code>startVolume<\/code> \u0434\u043e <code>endVolume<\/code> \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0435 <code>timeRange<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c <code>endVolume<\/code>.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u044d\u0442\u043e \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u0438 \u0432\u0438\u0434\u0435\u043e A, B, C. \u0425\u043e\u0442\u0438\u043c \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e_\/v5\/iz\/e_v5izcyqnsnd0twwpoc_pwfiz4.png\" width=\"500\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/e_\/v5\/iz\/e_v5izcyqnsnd0twwpoc_pwfiz4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/e_\/v5\/iz\/e_v5izcyqnsnd0twwpoc_pwfiz4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441:<\/p>\n<pre><code class=\"swift\">let audioMix = AVMutableAudioMix() <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u043c\u0443\u0437\u044b\u043a\u0438:<\/p>\n<pre><code class=\"swift\">let musicCompositionTrack: AVCompositionTrack let musicInput = AVMutableAudioMixInputParameters(track: musicCompositionTrack) musicInput.setVolume(1, at: .zero) musicInput.trackID = musicCompositionTrack.trackID <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e:<\/p>\n<pre><code class=\"swift\">let videoACompositionTrack: AVCompositionTrack let videoAInput = AVMutableAudioMixInputParameters(track: videoACompositionTrack) videoAInput.setVolumeRamp( fromStartVolume: 1, toEndVolume: 0, timeRange: .init(start: 0, end: 2) ) videoAInput.trackID = videoACompositionTrack.trackID  let videoBInput = \/\/ \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u0438\u0434\u0435\u043e A  let videoCCompositionTrack: AVCompositionTrack let videoCInput = AVMutableAudioMixInputParameters(track: videoCCompositionTrack) videoCInput.setVolume(0, at: .zero) videoCInput.setVolumeRamp( fromStartVolume: 0, toEndVolume: 1, timeRange: .init(start: 8, end: 10) ) videoCInput.trackID = videoCCompositionTrack.trackID <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441:<\/p>\n<pre><code class=\"swift\">audioMix.inputParameters = [videoAInput, videoBInput, videoCInput, musicInput] <\/code><\/pre>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0432\u0443\u043a\u043e\u043c \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u042d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u0438, \u043a\u0430\u043a \u044f \u043e\u0431\u0435\u0449\u0430\u043b, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0438\u0434\u0435\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c. \u0412\u043e\u0442 \u043e\u043d\u0438:<\/p>\n<ol>\n<li>\n<p>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>AVMutableComposition<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>AVMutableVideoComposition<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0435\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 <code>AVAudioMix<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043f\u0440\u043e\u0441\u0438\u043b \u0432\u0430\u0441 \u043f\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u0438\u0442\u044c \u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043e\u0432\u043e\u0440\u044e \u2014 \u043f\u043e\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c! \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0434\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 SwiftUI Canvas (\u043f\u0440\u0435\u0432\u044c\u044e). \u041d\u0430\u043f\u043e\u043c\u043d\u044e: \u043f\u0440\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u044d\u0442\u043e\u043c.<\/p>\n<pre><code class=\"swift\">import SwiftUI import AVKit import AVFoundation  struct ContentView: View {     @State var player: AVPlayer?      var body: some View {         VStack { VideoPlayer(player: player) }             .onAppear(perform: { Task { do { try await start() } catch {} } })     }      private func start() async throws {         \/\/ \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0443\u0440\u043b\u044b         let asset1LocalUrl = Bundle.main.url(forResource: \"video_1\", withExtension: \"mov\")!         let asset2LocalUrl = Bundle.main.url(forResource: \"video_2\", withExtension: \"mov\")!          \/\/ \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0430\u0441\u0441\u0435\u0442\u044b         let asset1 = AVURLAsset(url: asset1LocalUrl)         let asset2 = AVURLAsset(url: asset2LocalUrl)          \/\/ \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e         let composition = AVMutableComposition()          \/\/ \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e         let videoComposition = AVVideoComposition()          \/\/ \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0430\u0443\u0434\u0438\u043e\u043c\u0438\u043a\u0441         let audioMix = AVMutableAudioMix()          \/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u0438\u043d\u043e         let playerItem = AVPlayerItem(asset: composition)         playerItem.videoComposition = videoComposition         playerItem.audioMix = audioMix          player = AVPlayer(playerItem: playerItem)     } }  #Preview {     ContentView() } <\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0451. \u0412\u043f\u0435\u0440\u0435\u0434\u0438 \u043d\u0430\u0441 \u0436\u0434\u0443\u0442 \u0438\u043c\u043f\u043e\u0440\u0442, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u0441\u0441\u0435\u0442\u043e\u0432, \u0430 \u0435\u0449\u0451 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0434\u0440\u043e\u0432 \u2014 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/899304\/\"> https:\/\/habr.com\/ru\/articles\/899304\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e AVFoundation. \u0412 <a href=\"https:\/\/habr.com\/ru\/articles\/897008\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u0441\u0441\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0451 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u0442\u0435\u043c\u0443 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432. \u0410 \u0435\u0449\u0451 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u044e \u0432\u0430\u0441 \u0441 \u0438\u0434\u0435\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<h2>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/h2>\n<p>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0430\u0441\u0441\u0435\u0442, \u0435\u0433\u043e \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0443\u0434\u0438\u043e- \u0438 \u0432\u0438\u0434\u0435\u043e\u0430\u0441\u0441\u0435\u0442\u043e\u0432.<\/p>\n<p><strong>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 (\u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u0435\u0434\u0438\u0430) \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u041e\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u043c\u0438, \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u2014 iMovie \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0434\u0440\u044f\u0434: <\/p>\n<figure class=\"\"><\/figure>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 iPhone 5-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 SLO-MO. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0435\u0433\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u043e\u043d\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f 15 \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u0430\u043a iPhone \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b \u0432\u0438\u0434\u0435\u043e- \u0438 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434? \u0410 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 TIME-LAPSE \u0432\u0441\u0451 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0421\u0435\u043a\u0440\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e iPhone \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 15 \u0441\u0435\u043a\u0443\u043d\u0434, \u0433\u0434\u0435 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442 \u043d\u0430 \u0432\u0441\u044e \u0435\u0451 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<p>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a CupCat, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u043a\u043e\u043b\u043b\u0430\u0436\u0438 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e. \u0414\u0443\u043c\u0430\u044e, \u0432\u0430\u043c \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432: <\/p>\n<figure class=\"\"><\/figure>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438 \u0432\u044b, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u043d\u0430\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043a\u0430\u043a\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435?<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442?<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0441\u0441\u0435\u0442\u0430\u043c, \u043d\u043e \u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e \u0443 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0430\u044f \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0443 \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438?<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0435\u0437 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u044d\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c. \u041f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0434\u0435\u0439\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438 \u0432 AVFoundation \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcomposition\" rel=\"noopener noreferrer nofollow\">AVComposition: AVAsset<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablecomposition\" rel=\"noopener noreferrer nofollow\">AVMutableComposition: AVComposition<\/a>.<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441 Objective-C, \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445. \u041d\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f: \u043f\u0435\u0440\u0432\u044b\u0439 (<code>AVComposition<\/code>) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0432\u0442\u043e\u0440\u043e\u0439 (<code>AVMutableComposition<\/code>) \u2014 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0420\u0430\u043d\u044c\u0448\u0435 Apple \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e <code>AVComposition<\/code> \u0438\u0434\u0451\u0442 \u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442 <code>AVAsset<\/code>, \u0430 \u043d\u0435 \u043e\u0442 <code>AVURLAsset<\/code>. \u042d\u0442\u043e \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 <code>AVURLAsset<\/code>, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438 iPhone.<\/p>\n<h2>\u0422\u0440\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439<\/h2>\n<p>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0445 \u0442\u0440\u0435\u043a\u0430\u0445. \u0414\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 AVFoundation \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcompositiontrack\" rel=\"noopener noreferrer nofollow\">AVCompositionTrack: AVAssetTrack<\/a> \u0438 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avmutablecompositiontrack\" rel=\"noopener noreferrer nofollow\">AVMutableCompositionTrack: AVCompositionTrack<\/a>.<\/p>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435 SLO-MO \u0432\u0438\u0434\u0435\u043e \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438? \u041f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0435\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0437. \u041e\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u2014 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439, \u0430 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u2014 \u043d\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>segments<\/code>. \u0414\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c? \u042d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430.<\/p>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/developer.apple.com\/documentation\/avfoundation\/avcompositiontracksegment\" rel=\"noopener noreferrer nofollow\">AVCompositionTrackSegment: AVAssetTrackSegment<\/a>. \u041e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>var sourceTrackID: CMPersistentTrackID { get }<\/code>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c: \u043f\u043e\u0447\u0435\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u0440\u0435\u043a \u0435\u0441\u0442\u044c \u0442\u0443\u0442, \u0430 \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0435\u0433\u043e \u043d\u0435\u0442? \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 SLO-MO \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e:<\/p>\n<pre><code class=\"swift\">let composition: AVComposition let videoTrack = try await composition.loadTracks(withMediaType: .video).first! try await videoTrack.load(.segments)  - 0 : &lt;AVCompositionTrackSegment: ... timeRange [0.000,+2.475] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [0.000,+2.475]&gt; - 1 : &lt;AVCompositionTrackSegment: ... timeRange [2.475,+0.015] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.475,+0.013]&gt; - 2 : &lt;AVCompositionTrackSegment: ... timeRange [2.490,+0.045] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.488,+0.033]&gt; - 3 : &lt;AVCompositionTrackSegment: ... timeRange [2.535,+0.083] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.522,+0.048]&gt; - 4 : &lt;AVCompositionTrackSegment: ... timeRange [2.618,+0.130] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.570,+0.055]&gt; - 5 : &lt;AVCompositionTrackSegment: ... timeRange [2.748,+0.182] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.625,+0.050]&gt; - 6 : &lt;AVCompositionTrackSegment: ... timeRange [2.930,+84.748] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [2.675,+10.593]&gt; - 7 : &lt;AVCompositionTrackSegment: ... timeRange [87.678,+0.107] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.268,+0.028]&gt; - 8 : &lt;AVCompositionTrackSegment: ... timeRange [87.785,+0.075] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.297,+0.032]&gt; - 9 : &lt;AVCompositionTrackSegment: ... timeRange [87.860,+0.048] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.328,+0.028]&gt; - 10 : &lt;AVCompositionTrackSegment: ... timeRange [87.908,+0.027] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.357,+0.020]&gt; - 11 : &lt;AVCompositionTrackSegment: ... timeRange [87.935,+0.008] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.377,+0.008]&gt; - 12 : &lt;AVCompositionTrackSegment: ... timeRange [87.943,+0.078] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.385,+0.080]&gt; - 13 : &lt;AVCompositionTrackSegment: ... timeRange [88.022,+2.375] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.465,+2.375]&gt; <\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0440\u0443\u043a\u0430\u043c\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c <code>source<\/code> \u0438 <code>target<\/code> (\u043f\u0435\u0440\u0432\u044b\u0439: <code>+2.475<\/code>, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439: <code>+2.375<\/code>) \u2014 \u043e\u043d\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u0410 \u0432\u043e\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>source<\/code> \u0438 <code>target<\/code> \u2014 \u0432\u0438\u0434\u0435\u043e \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435. \u0422\u0430\u043a \u0438 \u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u21168 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"swift\">- 8 : &lt;AVCompositionTrackSegment: ... timeRange [87.785,+0.075] from trackID 1 of asset \u0441\u0441\u044b\u043b\u043a\u0430 sourceTimeRange [13.297,+0.032]&gt; <\/code><\/pre>\n<pre><code class=\"swift\">try await videoTrack.load(.segments)[8]  &lt; AVCompositionTrackSegment: 0x30219a3e0 timeRange [87.785,+0.075] from trackID 1 of asset file:\/\/\/var\/mobile\/Media\/DCIM\/100APPLE\/IMG_0283.MOV sourceTimeRange [13.297,+0.032] &gt; <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u0418\u0437 \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u0441 ID 1 \u0444\u0430\u0439\u043b\u0430 <code>file:\/\/\/var\/mobile\/Media\/DCIM\/100APPLE\/IMG_0283.MOV<\/code> \u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 0.032 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 13.297 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u044d\u0442\u043e\u0442 \u043a\u0443\u0441\u043e\u043a \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 87.785 \u0441\u0435\u043a\u0443\u043d\u0434\u0435 \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 0.075 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"swift\">let segment: AVCompositionTrackSegment  let speed = segment.timeMapping.source.duration.seconds \/ segment.timeMapping.target.duration.seconds  speed \/\/ 0.032 \/ 0.075 = 43% <\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0440\u0430\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 TIME-LAPSE, \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0432\u043e\u0438\u0445 SLO-MO \u0438\u043b\u0438 TIME-LAPSE \u0432\u0438\u0434\u0435\u043e, \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0435\u0441\u044c \u0441 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438 \u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435. \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0432\u044b\u0448\u0435, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u0437 \u0433\u0430\u043b\u0435\u0440\u0435\u0438, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0441\u043a\u0440\u044b\u043b \u0441\u0441\u044b\u043b\u043a\u0438. \u042d\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u2014 \u043e\u043d\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435. \u041d\u043e \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0447\u043d\u0451\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u0442\u0440\u0435\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 iPhone, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c:<\/p>\n<pre><code class=\"swift\">let composition: AVComposition let videoTrack = try await composition.loadTracks(withMediaType: .video).first! try await videoTrack.load(.segments)  - 0 : &lt;     AVCompositionTrackSegment: 0x3039bb9c0     timeRange [0.000,+5.780]     from trackID 1     of asset file:\/\/\/private\/var\/mobile\/Containers\/Data\/Application\/B3B974E0-1059-4358-8FE3-D51DDA490A2C\/tmp\/VideoEditor\/Video\/4920F4D2-AE9D-41C5-A4FB-9593F7F06EE1.MOV     sourceTimeRange [0.000,+5.780] &gt; - 1 : &lt;     AVCompositionTrackSegment: 0x3039bbbf0     timeRange [5.780,+5.000]     from trackID 1     of asset file:\/\/\/private\/var\/mobile\/Containers\/Data\/Application\/B3B974E0-1059-4358-8FE3-D51DDA490A2C\/tmp\/VideoEditor\/GeneratedVideo\/0FDE836A-E944-45B6-81EE-8936B7B4E9F0.mov     sourceTimeRange [0.000,+5.000] &gt; <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0432\u0438\u0434\u043d\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u2014 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0435\u043e. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u0431\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e: <code>timeRange<\/code> \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>sourceTimeRange<\/code>. \u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441 0 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0441 5.780.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>trackID<\/code> \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 <code>AVCompositionTrackSegment<\/code>, \u0430 \u043d\u0435 \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f <code>AVAssetTrackSegment<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438, \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 (<code>asset file<\/code>), \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 (<code>trackID<\/code>) \u0438 \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 (<code>sourceTimeRange<\/code>) \u0432\u0437\u044f\u0442 \u043a\u0443\u0441\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u042d\u0442\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440. \u042f \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u2014 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438, \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u2014 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c. \u041e \u043d\u0438\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435. \u041b\u0443\u0447\u0448\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u0442\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u0435\u043a \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0442\u0440\u0435\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043a\u043e\u0434 \u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043e\u0431\u0437\u043e\u0440\u0430 <code>AVMutableCompositionTrack<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u0430 \u0432 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>AVMutableComposition<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c ID func addMutableTrack( withMediaType mediaType: AVMediaType,  preferredTrackID: CMPersistentTrackID ) -&gt; AVMutableCompositionTrack?  \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u0430 \u043f\u043e ID func removeTrack(_ track: AVCompositionTrack) <\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>kCMPersistentTrackID_Invalid<\/code> \u0434\u043b\u044f <code>preferredTrackID<\/code> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 ID. \u041f\u0440\u0438\u043c\u0435\u0440: <code>composition.addMutableTrack(<\/code><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-455334","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=455334"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/455334\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=455334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=455334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=455334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}