{"id":278007,"date":"2016-04-11T11:35:02","date_gmt":"2016-04-11T07:35:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=278007"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=278007","title":{"rendered":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u2014 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/de7\/f45\/3e2\/de7f453e2e2b4d499a4446b0c3d9d938.png\"\/>  <\/p>\n<p>&quot;\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u2014 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430&quot; \u2014 \u044d\u0442\u0430 \u043b\u0435\u0433\u043a\u0430\u044f \u0444\u0440\u0430\u0437\u0430, \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u043d\u0435\u0432\u0437\u043d\u0430\u0447\u0430\u0439 \u043c\u043e\u0435\u0439 \u0441\u0435\u0441\u0442\u0440\u043e\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432\u044b\u0440\u043e\u0441 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418\u0442\u0430\u043a, \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e: \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 youtube \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e perl, \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0451\u043c\u0447\u0438\u043a\u0438 \u0441 ffmpeg, \u043c\u0438\u043c\u043e\u0445\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e json \u0438 sqlite, \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u0447\u0435\u0433\u043e \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 youtube.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c<\/h2>\n<p>  <\/p>\n<p>\u0418\u0434\u0435\u044f \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u043a\u0430\u043a-\u0442\u043e \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u043d\u0430 youtube \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 <em>\u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e<\/em>, \u044f \u043f\u043e\u0439\u043c\u0430\u043b \u0441\u0435\u0431\u044f \u043d\u0430 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0439 \u043c\u044b\u0441\u043b\u0438, \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0443 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u043a\u043b\u0430\u043c\u0443, \u0430 \u0435\u0449\u0435 \u2014 \u043d\u0435 \u0445\u043e\u0447\u0443 \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0432\u0438\u0434\u0435\u043e \u0434\u0432\u0430\u0436\u0434\u044b. \u042d\u0442\u0430 \u043c\u044b\u0441\u043b\u044c \u0440\u0430\u0437\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u0438\u0434\u0435\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0438\u043a\u0438\u043d\u0443\u0432 \u0441\u0432\u043e\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e \u0441\u0438\u043b\u0430\u043c \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442 \u043e\u0442 \u0440\u0435\u043a\u043b\u0430\u043c\u044b \u0438 \u0431\u0430\u044f\u043d\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><em>Disclaimer<\/em>: \u044f \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440-\u043c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0449\u0438\u043a, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0446\u0435\u043d\u043a\u0435 \u043a\u043e\u0434\u0430 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u043a\u0438\u0434\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>  <\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>  <\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0434\u0432\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0432\u0438\u0434\u0435\u043e: coub.com \u0438 vine.co. \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441 \u043e\u0431\u043e\u0438\u0445 \u0441\u0430\u0439\u0442\u043e\u0432, \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0432\u044b\u0431\u043e\u0440 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 coub.com, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u043e \u043c\u043e\u0435\u0439 \u0434\u0435\u0432\u0443\u0448\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0423 coub.com \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u044f\u0433\u0430\u0442\u044c \u0441 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435, \u0432\u0435\u0434\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u043d\u0434\u043f\u043e\u0439\u043d\u0442\u0430\u043c \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445. \u0410 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0441\u044f, \u0442\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e: \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u0447\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 NSFW(not safe for work, 18+), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435. \u0418\u0442\u0430\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u044d\u043d\u0434\u043f\u043e\u0439\u043d\u0442\u0430:<\/p>\n<p>  <\/p>\n<pre><code>http:\/\/coub.com\/api\/v2\/timeline\/hot?page=${page_number}&amp;per_page=${per_page}&amp;order_by=newest_popular<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0443\u0442 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u044f\u0433\u0430\u0435\u0442 \u0441 \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043d\u0434\u043f\u043e\u0439\u043d\u0442\u0430 JSON, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430 \u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430.<\/p>\n<p>  <\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h2>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432, \u043f\u043e\u0442\u043e\u043c \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0438\u0442\u0440\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u0435\u043e, \u043d\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c. \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0442\u043e\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0430\u0437\u0443 sqlite \u043d\u0430 \u0434\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0432\u0438\u0434\u0435\u043e. \u0412\u0441\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u0431\u0430\u0437\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 \u043f\u043b\u0435\u0447\u0430\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u044f\u0433\u0430\u0435\u0442 JSON&#8217;\u044b \u0441 \u044d\u043d\u0434\u043f\u043e\u0439\u043d\u0442\u043e\u0432, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 JSON \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0437 \u0432 \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u043f\u043e cron&#8217;\u0443. <\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u0435\u043d \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0434\u043d\u0435\u043c \u0438 \u043d\u043e\u0447\u044c\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430\u043b\u0430\u0445 (\u043d\u0443 \u0438\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432 \u043d\u0430\u043a\u0440\u0443\u0442\u043a\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432, \u0445\u0435-\u0445\u0435). \u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u2014 UTC, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u0430.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habrastorage.org\/files\/a1f\/342\/ae6\/a1f342ae6bb34420ad5793236091f304.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1fc\/b70\/09d\/1fcb7009d0244e61a8a1e8ca96875973.png\"\/><\/a><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 perl \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e\u043c \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"perl\">use LWP::Simple; use JSON::XS qw( decode_json );  use Time::Local; use DBI; use Chart::Gnuplot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 sqlite \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d DBD::Sqlite.<\/p>\n<p>  <\/p>\n<h2>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u0432\u043e\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 \u2014 ffmpeg. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u043e \u0432\u0441\u044f\u043a\u0438\u043c avidemux&#8217;\u0430\u043c \u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f. \u0418\u0442\u0430\u043a, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u0440\u0438\u0435\u043c\u044b \u044f \u0432\u044b\u0443\u0447\u0438\u043b \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430? \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043c\u0443\u0437\u044b\u043a\u0438<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$local_batch = &quot;$converter -t $audio_dur -i $music_source -af \\&quot;afade=t=out:st=$start_t_plus:d=$diff,afade=t=in:ss=0:d=$diff,volume=$volume_scale\\&quot; $res_dir\/starter.mp3 -y&quot;; system( $local_batch );<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442 \u043e\u0442 $music_source \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0434\u043b\u0438\u043d\u043e\u0439 $audio_dur \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 afade \u0438 volume, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u043e \u0432 starter.mp3. \u0424\u0438\u043b\u044c\u0442\u0440 afade \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f(fade-in) \u0438 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u044f(fade-out) \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u0438, \u0430 volume \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u0439 \u0434\u043e\u0440\u043e\u0436\u043a\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435\u043e \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$local_batch = &quot;$converter -loop 1 -i $picture_source -i $res_dir\/end.mp3 -c:v libx264 -t $end_t $res_dir\/ending.mkv -y&quot;; system( $local_batch );<\/code><\/pre>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u0420\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043a\u0440\u0438\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$local_batch  = &quot;$converter -i .\/video_source\/source-video-$i.mp4 &quot;; $local_batch .= &quot;-filter_complex \\&quot;&quot;; $local_batch .= &quot;[0]scale=iw*$scale:ih*$scale [sharp]; &quot;; $local_batch .= &quot;[0]scale=trunc(iw*$blur_scale\/2)*2:trunc(ih*$blur_scale\/2)*2,crop=$max_w:$max_h,boxblur=30 [blur]; &quot;; $local_batch .= &quot;[blur][sharp] overlay=(main_w-overlay_w)\/2:(main_h-overlay_h)\/2\\&quot; &quot;; $local_batch .= &quot;-q:v 0 -vb 20M .\/video_source\/source-video-$i.mpg -y&quot;; system( $local_batch );<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u044b \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0432\u0438\u0434\u0435\u043b\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0441 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u044b\u043c \u0444\u043e\u043d\u043e\u043c, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u043c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u0438\u0434\u0435\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \ud83d\ude42<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u0436\u0435 \u0437\u0430 \u043c\u0430\u0433\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u041d\u0430 \u0432\u0445\u043e\u0434 \u043c\u044b \u043f\u043e\u0434\u0430\u0435\u043c \u043d\u0430\u0448 \u0440\u043e\u043b\u0438\u043a \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c <em>&#8212;filter_complex<\/em>. \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e \u0436\u0435 \u0432\u0438\u0434\u0435\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043a\u0430\u043a [sharp]. \u041f\u043e\u0442\u043e\u043c \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e, \u043f\u043e\u0442\u043e\u043c \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043a\u0430\u043a [blur]. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u2014 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e [sharp] \u043f\u043e\u0432\u0435\u0440\u0445 [blur] \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 \u2014 \u0433\u043e\u0442\u043e\u0432\u043e!<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u0437\u043d\u044f \u0441 trunc? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e ffmpeg \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u043e\u0442 \u0432\u0438\u0434\u0435\u043e \u043e\u0434\u0438\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0434\u0435-\u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e \u043a \u0447\u0435\u0442\u043d\u043e\u043c\u0443. \u0413\u0434\u0435 \u0432\u044b \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u043d\u0430 \u0441\u0432\u043e\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u0422\u0451\u043c\u043d\u0430\u044f \u043c\u0430\u0433\u0438\u044f<\/font><\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0433\u0438\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e. \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u041e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0439 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0431\u043e\u043a\u0441 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0441 fade-out \u0432 \u0430\u043b\u044c\u0444\u0430 \u043a\u0430\u043d\u0430\u043b. (\u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u043e\u043a\u0441\u043e\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435)<\/li>\n<li>Fade-in, fade-out \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0434\u043e\u0440\u043e\u0436\u043a\u0443, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u042f \u043d\u0435 \u0440\u0443\u0447\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u044f \u043d\u0430\u0448\u0435\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"perl\">my $opacity = '@0.4'; $local_batch  = &quot;$converter -i .\/video_source\/video-$i.mpg -i .\/audio_misc\/cut-audio-$i.mp3 &quot;; $local_batch .= &quot; -vf \\&quot;drawbox=enable=\\'between(t,0,$title_dur)\\':y=(ih\/1.3):color=black$opacity:width=iw:height=100:t=max, &quot;; $local_batch .= &quot; drawtext=enable=\\'between(t,0,$title_dur)\\':fontfile=$font:text=\\'$title[$i]\\':fontcolor=white:fontsize=50:x=(w-tw)\/2:y=(h\/1.3)+30, format=yuv444p \\&quot;&quot;; $local_batch .= &quot; -codec:a copy -q:v 0 -vb 20M .\/video_music\/inter$i.mpg -y&quot;; system( $local_batch );  $local_batch  = &quot;$converter -i .\/video_source\/video-$i.mpg -i .\/video_music\/inter$i.mpg -filter_complex \\&quot;&quot;; $local_batch .= &quot;[1]fade=out:st=$title_subt:d=$title_fade:alpha=1 [ovr]; &quot;; $local_batch .= &quot;[0][ovr] overlay=0:0:repeatlast=0, fade=in:st=0:d=$diff:color=white, fade=out:st=$video_duration_diff:d=$diff:color=white\\&quot; &quot;; $local_batch .= &quot;-codec:a copy -q:v 0 -vb 20M .\/video_music\/faded_inter$i.mpg -y&quot;; system( $local_batch );<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0432 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043c\u043a\u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0447\u0435\u0440\u043d\u044b\u0439 \u0431\u043e\u043a\u0441, \u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e \u2014 \u0431\u0435\u043b\u044b\u0439 \u0442\u0435\u043a\u0441\u0442. <\/p>\n<p>  <\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 <em>&#8212;filter_complex<\/em> \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0432\u0438\u0434\u0435\u043e \u0441 \u0431\u043e\u043a\u0441\u043e\u043c \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430 \u043d\u0435\u043c fade-out \u0432 \u0430\u043b\u044c\u0444\u0430 \u043a\u0430\u043d\u0430\u043b. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0435\u043c \u0432\u0438\u0434\u0435\u043e \u0431\u0435\u0437 \u0431\u043e\u043a\u0441\u0430 \u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0433\u043e [ovr], \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 fade-in, fade-out \u0432\u0438\u0434\u0435\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u0432 \u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044f \u0432\u0440\u044f\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0438\u0434\u0435\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434 \u0441 \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u043e\u043b\u0438\u043a\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 fade \u0431\u0435\u043b\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p><em>Disclaimer<\/em>: \u041c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u044b \u043c\u0435\u0436\u0434\u0443 \u0440\u043e\u043b\u0438\u043a\u0430\u043c\u0438 \u043d\u0430 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0443\u043c\u0435\u0441\u0442\u043d\u043e \u2014 \u044d\u0442\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044e\u2026 \u0430 \u0443\u0436 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 fade-in\/out \u043f\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0441\u0438\u043b\u0438\u0435 \u043d\u0430\u0434 \u0443\u0448\u0430\u043c\u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0440\u043e\u043b\u0438\u043a\u0430<\/font><\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 youtube \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0440\u043e\u043b\u0438\u043a\u0430 \u0434\u0430\u0442\u044c \u0437\u0440\u0438\u0442\u0435\u043b\u044e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u043c\u0443\u0437\u044b\u043a\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434 \u043d\u0435\u0435 \u043f\u0440\u0435\u0432\u044c\u044e \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u043e\u0432. \u041e\u043a, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"perl\">$local_batch  = &quot;$converter -i $res_dir\/ending.mkv -i $res_dir\/OVRL1.mkv -i $res_dir\/OVRL2.mkv -loop 1 -i $res_dir\/sub.png &quot;; $local_batch .= &quot;-filter_complex \\&quot;&quot;; $local_batch .= &quot;[1]scale=iw\/$scale_factor:ih\/$scale_factor,drawbox=0:0:iw:ih:color=white:t=5 [pip0]; &quot;; $local_batch .= &quot;[2]scale=iw\/$scale_factor:ih\/$scale_factor,drawbox=0:0:iw:ih:color=white:t=5 [pip1]; &quot;; $local_batch .= &quot;[3]scale=iw\/$scale_factor:ih\/$scale_factor [pip2]; &quot;; $local_batch .= &quot;[0][pip0] overlay=(main_w-2*overlay_w)\/3:main_h\/($scale_factor-1)-overlay_h-50:repeatlast=0 [pip_m]; &quot;; $local_batch .= &quot;[pip_m][pip1] overlay=2*(main_w-2*overlay_w)\/3+overlay_w:main_h\/($scale_factor-1)-overlay_h-50 [sum]; &quot;; $local_batch .= &quot;[sum][pip2] overlay=main_w\/2-overlay_w\/2:2*main_h\/3:shortest=1\\&quot; &quot;; $local_batch .= &quot;-crf $quality -vb 20M $res_dir\/ending.mp4 -y&quot;; system( $local_batch );<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0432\u0441\u0451 \u0442\u043e\u0442 \u0436\u0435 <em>&#8212;filter_complex<\/em> \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435\u043e \u0440\u044f\u0434, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0438\u043d\u0438\u0448\u043d\u0443\u044e \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0451 \u0442\u043e\u0442 \u0436\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 youtube<\/h2>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0432\u0438\u0434\u0435\u043e? \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0434\u0440\u0443\u0437\u044c\u044f\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0420\u0435\u0448\u0435\u043d\u043e \u2014 \u0437\u0430\u043f\u0438\u043b\u0438\u043c \u043a\u0430\u043d\u0430\u043b \u043d\u0430 \u044e\u0442\u0443\u0431\u0435.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u043c\u044b\u0441\u043b\u0438 \u0431\u044b\u043b\u0438 \u0442\u0430\u043a\u0438\u0435: \u044e\u0442\u0443\u0431 \u2014 \u044d\u0442\u043e \u0433\u0443\u0433\u043b, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0435\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434 perl, \u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043e\u0442\u043c\u0435\u043d\u043d\u0430\u044f. \u0412\u0442\u043e\u0440\u044b\u0435 \u043c\u044b\u0441\u043b\u0438: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 perl? \u0422\u0440\u0435\u0442\u044c\u0438: \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0434\u043e\u043a\u0430\u0445? \u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0435: \u0447\u0442\u043e\u0431 \u044f \u0435\u0449\u0435 \u0440\u0430\u0437&#8230;<\/p>\n<p>  <\/p>\n<p>\ud83d\ude42<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044e\u0442\u0443\u0431\u043e\u043c \u0438\u0437 perl. \u0413\u0440\u0430\u0431\u043b\u0435\u0439 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u043d\u0435\u043c\u0435\u0440\u044f\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 web \u0438\u0437 perl&#8217;\u0430 \u043c\u043d\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u044e\u0442\u0443\u0431\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 oauth2, \u0447\u0442\u043e \u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f client_id, \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c auth_token. \u042d\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f auth_token, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c access_token \u0438 refresh_token. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c access \u2014 \u0438\u0441\u0442\u0435\u043a\u0430\u0435\u0442 \u0437\u0430 \u0447\u0430\u0441, \u0430 refresh \u2014 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439, \u043f\u043e \u043d\u0435\u043c\u0443 \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c access.<\/li>\n<li>\u0415\u0441\u043b\u0438 access_token \u0438\u0441\u0442\u0435\u043a, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c refresh_token.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0432\u0430\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0443 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c auth_token<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">################################################################### ###  \u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f  ### ###  \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c auth_token                    ### ################################################################### $ua = LWP::UserAgent-&gt;new();   open( RESPONSE, &quot;&gt;&quot;, $response_file ); $req = POST 'https:\/\/accounts.google.com\/o\/oauth2\/auth',   [     scope         =&gt; &quot;https:\/\/www.googleapis.com\/auth\/youtube.upload https:\/\/www.googleapis.com\/auth\/youtube https:\/\/www.googleapis.com\/auth\/youtube.readonly https:\/\/www.googleapis.com\/auth\/youtube https:\/\/www.googleapis.com\/auth\/youtube&quot;,     response_type =&gt; &quot;code&quot;,     include_granted_scopes =&gt; &quot;true&quot;,     access_type   =&gt; &quot;offline&quot;,     redirect_uri  =&gt; &quot;http:\/\/localhost\/oauth2callback&quot;,     client_id     =&gt; &quot;$client_id&quot;   ]; $content = $ua-&gt;request($req)-&gt;as_string;  print RESPONSE $content; system(&quot;$browser $response_file&quot;);  print &quot;Enter auth_token:\\n&quot;; my $the_code = &lt;STDIN&gt;;<\/code><\/pre>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c access \u0438 refresh \u0442\u043e\u043a\u0435\u043d\u044b<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">################################################################### ###  \u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 access \u0438 refresh tokens    ### ################################################################### $req = POST 'https:\/\/accounts.google.com\/o\/oauth2\/token',     [         code          =&gt; &quot;$the_code&quot;, ### \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c auth_token \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0448\u0430\u0433\u0430         client_secret =&gt; &quot;$client_secret&quot;,         redirect_uri  =&gt; &quot;http:\/\/localhost\/oauth2callback&quot;,         client_id     =&gt; &quot;$client_id&quot;,         grant_type    =&gt; &quot;authorization_code&quot;,     ];     $json          = $ua-&gt;request( $req )-&gt;decoded_content;     $json_text     = decode_json( $json );     $refresh_token = $json_text-&gt;{'refresh_token'};     $access_token  = $json_text-&gt;{'access_token'};      print LOG $json;      close RESPONSE;<\/code><\/pre>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">################################################################### ###  \u041c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 access token              ### ###  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c access \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 refresh token             ### ################################################################### $req = POST 'https:\/\/accounts.google.com\/o\/oauth2\/token',     [         client_id     =&gt; &quot;$client_id&quot;,         client_secret =&gt; &quot;$client_secret&quot;,         refresh_token =&gt; &quot;$refresh_token&quot;,         grant_type    =&gt; &quot;refresh_token&quot;     ];  $content      = $ua-&gt;request($req)-&gt;as_string;  $content      =~  m\/&quot;access_token&quot;\\s+:\\s+&quot;(.*)&quot;,.*\/; $access_token = $1;  print &quot;Access token succesfully refreshed: $access_token\\n&quot;;<\/code><\/pre>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">################################################################### ###  \u041c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 access token               ### ################################################################### if( $check_access == 1 ){     $req = POST 'https:\/\/www.googleapis.com\/oauth2\/v3\/tokeninfo',         [             access_token   =&gt; &quot;$access_token&quot;,         ];      $content = $ua-&gt;request($req)-&gt;decoded_content;      print &quot;$content\\n&quot;; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u044e\u0442\u0443\u0431\u043e\u043c \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0435\u0449\u0435 \u0438 \u0437\u0430\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043a\u0430\u043d\u0430\u043b. \u0418 \u0442\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043d\u044e\u0430\u043d\u0441, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0434 windows, \u0430 \u043e\u043d \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 linux, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438 \u0442\u0430\u043c, \u0438 \u0442\u0430\u043c.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043b\u0438, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u044e: \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c \u0438 \u0437\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u044e\u0442\u0443\u0431 (\u0441).<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043b\u0438\u043d\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u043b\u0438\u043d\u043a\u0430<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$file_size    = -s $file; $headers = HTTP::Headers-&gt;new(     'Content-Type'              =&gt; 'application\/json; charset=utf-8',     'Authorization'             =&gt; &quot;Bearer $access_token&quot;,     'x-upload-content-type'     =&gt; 'video\/mp4',     'X-Upload-Content-Length'   =&gt; $file_size );  $r = HTTP::Request-&gt;new( 'POST', $url, $headers ); $r-&gt;content( $message ); $response   = $ua-&gt;request( $r ); $upload_url = $response-&gt;header(&quot;Location&quot;);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 JSON. \u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u0443\u0433\u043b\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 JSON \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a True\/False, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0433\u0443\u0433\u043b\u0430 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442, \u0442\u0430-\u0434\u0430\u043c!, \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u0430\u043a true\/false. \u041e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0431\u0443\u043a\u0432\u0430 \u0438\u0437 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435\u0440\u0432\u043e\u0432, \u0432\u0435\u0434\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: Parser error.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$file_content = read_file( $file, binmode =&gt; ':raw', scalar_ref =&gt; 1 ); $headers = HTTP::Headers-&gt;new(     'Content_Length'            =&gt; &quot;$file_size&quot;,     'Content-Type'              =&gt; 'video\/mp4',     'Authorization'             =&gt; &quot;Bearer $access_token&quot; ); $r         = HTTP::Request-&gt;new('PUT', $upload_url, $headers, $file_content); $response  = $ua-&gt;request( $r ); $json      = $response-&gt;decoded_content; $json_text = decode_json( $json ); $resp_code = $response-&gt;status_line; $video_id  = $json_text-&gt;{'id'};<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u0430 \u0441\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a perl \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u0444\u0430\u0439\u043b \u0438 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044f \u0435\u0433\u043e. \u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0430\u0439\u043b \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a \u0441 \u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: \u0431\u0438\u043d\u0430\u0440\u043d\u043e.<\/p>\n<p>  <\/p>\n<h3><font color=\"#AAD2FF\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u0435\u0432\u044c\u044e<\/font><\/h3>\n<p>  <\/p>\n<pre><code class=\"perl\">$url = &quot;https:\/\/www.googleapis.com\/upload\/youtube\/v3\/thumbnails\/set?videoId=$video_id&quot;; $headers = HTTP::Headers-&gt;new(     'Content_Length'  =&gt; $thumbnail_size,     'Content-Type'    =&gt; 'image\/jpeg',     'Authorization'   =&gt; &quot;Bearer $access_token&quot;, ); $r          = HTTP::Request-&gt;new('POST', $url, $headers, $thumbnail_content); $response   = $ua-&gt;request($r); $upload_url = $response-&gt;header(&quot;Location&quot;); $resp_code  = $response-&gt;status_line;  print LOG $response-&gt;decoded_content; print &quot;Thumbnail upload init status: $resp_code\\n&quot;;<\/code><\/pre>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u043e\u043b\u0438\u043a\u043e\u0432. \u0421\u043a\u0440\u0438\u043f\u0442, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043d\u0430 VPS&#8217;\u043a\u0435 \u043e\u0442 digitalocean, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0440\u0443\u0433. \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u2014 \u0432\u0435\u0441\u044c\u043c\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043c\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u041f\u041a. \u0422\u0430\u043a\u0436\u0435 \u0438\u0437 \u0434\u043e\u043c\u0430 \u044f \u043c\u043e\u0433\u0443 \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0439\u0434\u0443\u0442 \u0432 \u0432\u044b\u043f\u0443\u0441\u043a, \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>  <\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0440\u0443\u0447\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044e\u0442\u0443\u0431\u0435\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u0442\u0430\u0435\u0442 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u043e\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0410 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u0440\u0435\u0432\u043d\u0438\u0435 \u0431\u0430\u044f\u043d\u044b \u0438 \u0440\u0435\u043a\u043b\u0430\u043c\u0443 \u0443 \u043c\u0435\u043d\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0447\u0438\u043d \u043d\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>   <\/p>\n<p>  <\/p>\n<h2>\u041e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430<\/h2>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 perl&#8217;\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u044f \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u043f\u043e\u043d\u044f\u0442\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430 &quot;\u0440\u0435\u0433\u0438\u0441\u0442\u0440&quot;, \u0438 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043b, \u0447\u0442\u043e \u0432 perl&#8217;e \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<p>  <\/li>\n<li>\n<p> \u2014 \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u044b \u043d\u0435 \u043f\u043e\u0448\u0435\u043b \u043d\u0430 &quot;\u041a&quot;, \u0432\u0435\u0434\u044c \u0442\u044b \u043a\u043b\u0430\u0441\u0441\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0448\u044c?<br \/>   \u2014 \u042f \u043d\u0435 \u043f\u043e\u0448\u0435\u043b \u043d\u0430 &quot;\u041a&quot;, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u044e\u0431\u043b\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0434\u0432\u0443\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u0441 \u043a\u0430\u0444\u0435\u0434\u0440\u044b \u211627(\u043c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430) \u041c\u0418\u0424\u0418, \u041a \u2014 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442 \u043a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\u0438.<\/p>\n<p>  <\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<p> \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:\/\/habrahabr.ru\/post\/281182\/\"> https:\/\/habrahabr.ru\/post\/281182\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/de7\/f45\/3e2\/de7f453e2e2b4d499a4446b0c3d9d938.png\"\/>  <\/p>\n<p>&quot;\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u2014 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430&quot; \u2014 \u044d\u0442\u0430 \u043b\u0435\u0433\u043a\u0430\u044f \u0444\u0440\u0430\u0437\u0430, \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u043d\u0435\u0432\u0437\u043d\u0430\u0447\u0430\u0439 \u043c\u043e\u0435\u0439 \u0441\u0435\u0441\u0442\u0440\u043e\u0439, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432\u044b\u0440\u043e\u0441 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0418\u0442\u0430\u043a, \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e: \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 youtube \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e perl, \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0451\u043c\u0447\u0438\u043a\u0438 \u0441 ffmpeg, \u043c\u0438\u043c\u043e\u0445\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e json \u0438 sqlite, \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u0447\u0435\u0433\u043e \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 youtube.<\/p>\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-278007","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278007","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=278007"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278007\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=278007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=278007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=278007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}