{"id":302028,"date":"2020-04-17T03:00:41","date_gmt":"2020-04-17T03:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=302028"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=302028","title":{"rendered":"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e FFmpeg libav"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/\"><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/\"><\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"210\" src=\"https:\/\/habrastorage.org\/webt\/fd\/ea\/2e\/fdea2eqs62xxuxzko84c8mvj7z4.png\"><\/div>\n<p><\/a><br \/>  \u0414\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b \u043a\u043d\u0438\u0433\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0430\u0437\u0436\u0451\u0432\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>FFmpeg<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (<i>\u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u2014 <b>libav<\/b><\/i>, \u0442.\u0435. <b>lib<\/b>rary <b>a<\/b>udio <b>v<\/b>ideo). \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443\u0447\u0435\u0431\u043d\u0438\u043a \u00ab\u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440 \u0438 \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0442\u044b\u0441\u044f\u0447\u0443 \u0441\u0442\u0440\u043e\u043a\u00bb. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0442\u0430\u043c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u043d\u0443\u0430\u043b \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 C, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c: \u0412\u044b \u043b\u0435\u0433\u043a\u043e \u0432\u0441\u0451 \u043f\u043e\u0439\u043c\u0451\u0442\u0435 \u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0423 FFmpeg libav \u0443\u0439\u043c\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u0430\u043c (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043a Python \u0438 \u043a Go). \u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0412\u0430\u0448 \u044f\u0437\u044b\u043a \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <b>ffi<\/b> (\u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <a href=\"https:\/\/github.com\/daurnimator\/ffmpeg-lua-ffi\/blob\/master\/init.lua\"><b>Lua<\/b><\/a>).<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e, \u043a\u043e\u0434\u0435\u043a\u0438 \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b. \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434. \u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f FFmpeg libav\u00bb.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0451), \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0432\u0438\u0434\u0435\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u043d\u044f\u043b\u043e \u044d\u0441\u0442\u0430\u0444\u0435\u0442\u0443 \u043e\u0442 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e, FFmpeg \u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a name=\"menu\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#intro\">\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#video\">\u0412\u0438\u0434\u0435\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0432\u0438\u0434\u0438\u0448\u044c!<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#audio\">\u0410\u0443\u0434\u0438\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0441\u043b\u044b\u0448\u0438\u0448\u044c!<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#codec\">\u041a\u043e\u0434\u0435\u043a \u2014 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#container\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u2014 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#command_line\">\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 FFmpeg<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#101\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg 101<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#operations\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0432\u0438\u0434\u0435\u043e<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transcoding\">\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transmuxing\">\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transrating\">\u0422\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transsizing\">\u0422\u0440\u0430\u043d\u0441\u0430\u0439\u0437\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#bonus\">\u0411\u043e\u043d\u0443\u0441: \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#beyond\">\u0412\u044b\u0445\u043e\u0434\u044f \u0437\u0430 \u0440\u0430\u043c\u043a\u0438<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#hard_way\">\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f FFmpeg libav<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_0\">\u0413\u043b\u0430\u0432\u0430 0 \u2014 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u00abHello World\u00bb<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#architecture\">FFmpeg libav \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#requirements\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#code\">\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_1\">\u0413\u043b\u0430\u0432\u0430 1 \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_2\">\u0413\u043b\u0430\u0432\u0430 2 \u2014 \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_3\">\u0413\u043b\u0430\u0432\u0430 3 \u2014 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#cahpter_3_transmuxing\">\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#cahpter_3_transcoding\">\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p><a name=\"habracut\"><\/a><\/p>\n<blockquote><p><a href=\"https:\/\/www.edsd.ru\/\" title=\"EDISON Software - web-development\"><img loading=\"lazy\" decoding=\"async\" align=\"left\" width=\"153\" height=\"75\" src=\"https:\/\/habrastorage.org\/webt\/w0\/zl\/to\/w0zltoxvysbr0yeinstkfvw1wbg.png\" alt=\"EDISON Software - web-development\"><\/a><br clear=\"right\">  \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 EDISON.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c <a href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f <a href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">\u0432\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u0445\u0438\u0440\u0443\u0440\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435<\/a>.<\/p>\n<p>  \u041c\u044b \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0438\u0434\u0435\u043e! \ud83d\ude09<\/p><\/blockquote>\n<p><img loading=\"lazy\" decoding=\"async\" align=\"right\" width=\"210\" height=\"280\" src=\"https:\/\/habrastorage.org\/webt\/5k\/lz\/nu\/5klznusfiwgawobmtbcrpdboscw.jpeg\"><br clear=\"left\">  <a name=\"intro\"><\/a><\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 <a href=\"#menu\">\u2191<\/a><\/h2>\n<p>  <a name=\"video\"><\/a><\/p>\n<h3>\u0412\u0438\u0434\u0435\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0432\u0438\u0434\u0438\u0448\u044c! <a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u0435\u043d\u044f\u0442\u044c \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 (\u0441\u043a\u0430\u0436\u0435\u043c, 24 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443), \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u043b\u043b\u044e\u0437\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0432\u0438\u0434\u0435\u043e: \u0441\u0435\u0440\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043a\u0430\u0434\u0440\u043e\u0432), \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  <i>\u0418\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f 1886 \u0433\u043e\u0434\u0430.<\/i><\/p>\n<p>  <a name=\"audio\"><\/a><\/p>\n<h3>\u0410\u0443\u0434\u0438\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0441\u043b\u044b\u0448\u0438\u0448\u044c! <a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0425\u043e\u0442\u044f \u043d\u0435\u043c\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430 \u0440\u0435\u0437\u043a\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  \u0417\u0432\u0443\u043a \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0435\u0431\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u0438\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0430\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0433\u0430\u0437, \u0436\u0438\u0434\u043a\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0442\u0432\u0435\u0440\u0434\u043e\u0435 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u043e).<\/p>\n<p>  \u0412 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0430\u0443\u0434\u0438\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0437\u0432\u0443\u043a \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0417\u0430\u0442\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c (<b>\u0410\u0426\u041f<\/b>) \u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 (<b>\u0418\u041a\u041c<\/b>) \u2014 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439.<\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"220\" src=\"https:\/\/habrastorage.org\/webt\/eu\/gb\/_m\/eugb_mwqa5x5yctawseum7qdtss.png\"><\/div>\n<p>  <a name=\"codec\"><\/a><\/p>\n<h3>\u041a\u043e\u0434\u0435\u043a \u2014 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u041a\u043e\u0434\u0435\u043a \u2014 \u044d\u0442\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435, \u0441\u0436\u0438\u043c\u0430\u044e\u0449\u0435\u0435 \u0438\u043b\u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e. \u041e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 (\u043d\u0435\u0441\u0436\u0430\u0442\u043e\u0435) \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u0432 \u0441\u0436\u0430\u0442\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442). <\/p>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u0444\u0438\u043b\u044c\u043c\u043e\u043c, \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c:<\/p>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0438\u0434\u0435\u043e \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 1080\u00d71920 (\u0432\u044b\u0441\u043e\u0442\u0430 \u00d7 \u0448\u0438\u0440\u0438\u043d\u0430). \u0422\u0440\u0430\u0442\u0438\u043c 3 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c (\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435) \u0434\u043b\u044f \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (24-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043d\u0430\u043c <nobr>16 777 216<\/nobr> \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432). \u042d\u0442\u043e \u0432\u0438\u0434\u0435\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 24 \u043a\u0430\u0434\u0440\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043e\u0431\u0449\u0430\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 30 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<pre><code class=\"cpp\">toppf = 1080 * 1920 \/\/\u0412\u0441\u0435\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435 cpp = 3 \/\/ \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u044f tis = 30 * 60 \/\/ \u0412\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 fps = 24 \/\/ \u041a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443  required_storage = tis * fps * toppf * cpp<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 250,28 \u0413\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 1,11 \u0413\u0431\u0438\u0442\/\u0441! \u0412\u043e\u0442 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\u0435\u043a.<\/p>\n<p>  <a name=\"container\"><\/a><\/p>\n<h3>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u2014 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e <a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438) \u2014 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u0435\u0442\u0430\u0444\u0430\u0439\u043b\u0430, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. <\/p>\n<p>  \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e), \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 (\u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435) \u0438 \u0442.\u043f.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, video.webm \u2014 \u044d\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u0438\u0434\u0435\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 webm.<\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"328\" src=\"https:\/\/habrastorage.org\/webt\/ay\/du\/qa\/ayduqaajbhuh59tah4vdgcu2sj0.png\"><\/div>\n<p>  <a name=\"command_line\"><\/a><\/p>\n<h2>\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 FFmpeg<a href=\"#menu\">\u2191<\/a><\/h2>\n<p>  \u0421\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0441\u0445\u0438\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <b>FFmpeg<\/b>. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0412\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0435\u0451 \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0435\u0451 (\u0412\u044b \u0432\u0435\u0434\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Chrome?).<\/p>\n<p>  \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0430 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <b>ffmpeg<\/b> (\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438). \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043c\u043e\u0449\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 mp4 \u0432 avi, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0440\u0430\u0432 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">$ ffmpeg -i input.mp4 output.avi<\/code><\/pre>\n<p>  \u041c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 <b>\u0440\u0435\u043c\u0438\u043a\u0441\u0438\u043d\u0433<\/b> \u2014 \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 FFmpeg \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  <a name=\"101\"><\/a><\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg 101 <a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0423 FFmpeg \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.ffmpeg.org\/ffmpeg.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, \u0433\u0434\u0435 \u0432\u0441\u0451 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e, \u043a\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg \u043e\u0436\u0438\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u0432\u043e\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u2014 <code><b>ffmpeg {1} {2} -i {3} {4} {5}<\/b><\/code>, \u0433\u0434\u0435:<\/p>\n<p>  <b>{1}<\/b> \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<br \/>  <b>{2}<\/b> \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<br \/>  <b>{3}<\/b> \u2014 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 URL<br \/>  <b>{4}<\/b> \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<br \/>  <b>{5}<\/b> \u2014 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 URL<\/p>\n<p>  \u0412 \u0447\u0430\u0441\u0442\u044f\u0445 {2}, {3}, {4}, {5} \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e. \u041f\u0440\u043e\u0449\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<p>  <b># \u041f\u0420\u0415\u0414\u0423\u041f\u0420\u0415\u0416\u0414\u0415\u041d\u0418\u0415: \u0444\u0430\u0439\u043b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u0435\u0441\u0438\u0442 300 \u041c\u0411<\/b><\/p>\n<pre><code class=\"bash\">$ wget -O bunny_1080p_60fps.mp4 http:\/\/distribution.bbb3d.renderfarming.net\/video\/mp4\/bbb_sunflower_1080p_60fps_normal.mp4  $ ffmpeg \\ -y \\ # \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b -c: libfdk_aac -c: v libx264 \\ # \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430 -i bunny_1080p_60fps.mp4 \\ # \u0432\u0445\u043e\u0434\u043d\u043e\u0439 URL -c: v libvpx-vp9 -c: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0432\u043e\u0434\u0430 libvorbis \\ # bunny_1080p_60fps_vp9.webm # \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 URL<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0435\u0440\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 mp4-\u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 (\u0430\u0443\u0434\u0438\u043e, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0435\u043a\u0430 aac, \u0438 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0435\u043a\u0430 h264), \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 webm, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u0434\u0435\u043a\u0438 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e FFmpeg \u043f\u0440\u0438\u043c\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043c\u0435\u0441\u0442\u043e \u0412\u0430\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0440\u0430\u0442\u044c<\/p>\n<pre><code class=\"bash\">ffmpeg -i input.avi output.mp4<\/code><\/pre>\n<p>  \u0442\u043e, \u043a\u0430\u043a\u043e\u0439 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u043a\u043e\u0434\u0435\u043a \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f output.mp4?<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0435\u0440 \u0420\u043e\u0431\u0438\u0446\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"http:\/\/slhck.info\/ffmpeg-encoding-course\/#\/\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a> \u043f\u043e \u0447\u0442\u0435\u043d\u0438\u044e\/\u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FFmpeg.<\/p>\n<p>  <a name=\"operations\"><\/a><\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0432\u0438\u0434\u0435\u043e<a href=\"#menu\">\u2191<\/a><\/h2>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0440\u044f\u0434 \u0437\u0430\u0434\u0430\u0447 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430.<\/p>\n<p>  <a name=\"transcoding\"><\/a><\/p>\n<h3>\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<a href=\"#menu\">\u2191<\/a><\/h3>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"225\" src=\"https:\/\/habrastorage.org\/webt\/uf\/fl\/cr\/ufflcrik3ha4z6tt5axevtdfv9u.png\"><\/div>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e?<\/b> \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0438\u043b\u0438 \u0430\u0443\u0434\u0438\u043e \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e (\u0438\u043b\u0438 \u0438 \u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e) \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0424\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e?<\/b> \u0411\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u044b, \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u0442. \u0434.) \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e X, \u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e Y. \u0418\u043b\u0438 \u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u0434\u0435\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0441\u0436\u0430\u0442\u0438\u044f.<\/p>\n<p>  <b>\u041a\u0430\u043a?<\/b> \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u0438\u0434\u0435\u043e H264 (AVC) \u0432 H265 (HEVC):<\/p>\n<pre><code class=\"bash\">$ ffmpeg \\ -i bunny_1080p_60fps.mp4 \\ -c:v libx265 \\ bunny_1080p_60fps_h265.mp4<\/code><\/pre>\n<p>  <a name=\"transmuxing\"><\/a><\/p>\n<h3>\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"231\" src=\"https:\/\/habrastorage.org\/webt\/es\/vp\/gm\/esvpgmlkjcj38alzp2sbrdckpne.png\"><\/div>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e?<\/b> \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430) \u0432 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e?<\/b> \u0411\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u044b, \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u0442. \u0434.) \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 X, \u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 Y. \u0418\u043b\u0438 \u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <b>\u041a\u0430\u043a?<\/b> \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c a mp4 \u0432 webm:<\/p>\n<pre><code class=\"bash\">$ ffmpeg \\ -i bunny_1080p_60fps.mp4 \\ -c copy \\ # just saying to ffmpeg to skip encoding bunny_1080p_60fps.webm<\/code><\/pre>\n<p>  <a name=\"transrating\"><\/a><\/p>\n<h3>\u0422\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"437\" height=\"235\" src=\"https:\/\/habrastorage.org\/webt\/ev\/hx\/cp\/evhxcp7a6y5fkjjq9s53hyfs3iq.png\"><\/div>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e?<\/b> \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e?<\/b> \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0412\u0430\u0448\u0435 \u0432\u0438\u0434\u0435\u043e \u043a\u0430\u043a \u0432 \u0441\u0435\u0442\u0438 2G \u043d\u0430 \u043c\u0430\u043b\u043e\u043c\u043e\u0449\u043d\u043e\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435, \u0442\u0430\u043a \u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0442\u043e\u0432\u043e\u043b\u043e\u043a\u043e\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0432\u044f\u0437\u044c \u043d\u0430 4K-\u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u0438\u0434\u0435\u043e \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <b>\u041a\u0430\u043a?<\/b> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u043e\u043c \u043c\u0435\u0436\u0434\u0443 3856K \u0438 2000K.<\/p>\n<pre><code class=\"bash\">$ ffmpeg \\ -i bunny_1080p_60fps.mp4 \\ -minrate 964K -maxrate 3856K -bufsize 2000K \\ bunny_1080p_60fps_transrating_964_3856.mp4<\/code><\/pre>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u043f\u0435\u0440\u0435\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u043e\u0439. \u0412\u0435\u0440\u043d\u0435\u0440 \u0420\u043e\u0431\u0438\u0446\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 <a href=\"http:\/\/slhck.info\/posts\/\">\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u044e<\/a> \u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 FFmpeg.<\/p>\n<p>  <a name=\"transsizing\"><\/a><\/p>\n<h3>\u0422\u0440\u0430\u043d\u0441\u0430\u0439\u0437\u0438\u043d\u0433 (\u043f\u0435\u0440\u0435\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430)<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"277\" src=\"https:\/\/habrastorage.org\/webt\/gj\/c2\/4k\/gjc24kcqli3iwwdkzbb70pbue-k.png\"><\/div>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e?<\/b> \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0442\u0440\u0430\u043d\u0441\u0441\u0430\u0439\u0437\u0438\u043d\u0433 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0442\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e?<\/b> \u041f\u043e \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u0447\u0442\u043e \u0438 \u0441 \u0442\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>  <b>\u041a\u0430\u043a?<\/b> \u0423\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 1080 \u0434\u043e 480:<\/p>\n<pre><code class=\"bash\">$ ffmpeg \\ -i bunny_1080p_60fps.mp4 \\ -vf scale=480:-1 \\ bunny_1080p_60fps_transsizing_480.mp4<\/code><\/pre>\n<p>  <a name=\"bonus\"><\/a><\/p>\n<h3>\u0411\u043e\u043d\u0443\u0441: \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"134\" src=\"https:\/\/habrastorage.org\/webt\/3z\/az\/lg\/3zazlgpe3wjx3zvvhapi0z3ur68.png\"><\/div>\n<p>  <b>\u0427\u0442\u043e \u044d\u0442\u043e?<\/b> \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 (\u0431\u0438\u0442\u0440\u0435\u0439\u0442\u043e\u0432) \u0438 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0438\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 http.<\/p>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e?<\/b> \u0420\u0430\u0434\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u043d\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0445\u043e\u0442\u044c \u043d\u0430 4K-\u043f\u043b\u0430\u0437\u043c\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c (\u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443).<\/p>\n<p>  <b>\u041a\u0430\u043a?<\/b> \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 WebM \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DASH:<\/p>\n<pre><code class=\"bash\"># video streams $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 250k -keyint_min 150 -g 150 -an -f webm -dash 1 video_160x90_250k.webm  $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 320x180 -b:v 500k -keyint_min 150 -g 150 -an -f webm -dash 1 video_320x180_500k.webm  $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 640x360 -b:v 750k -keyint_min 150 -g 150 -an -f webm -dash 1 video_640x360_750k.webm  $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 640x360 -b:v 1000k -keyint_min 150 -g 150 -an -f webm -dash 1 video_640x360_1000k.webm  $ ffmpeg -i bunny_1080p_60fps.mp4 -c:v libvpx-vp9 -s 1280x720 -b:v 1500k -keyint_min 150 -g 150 -an -f webm -dash 1 video_1280x720_1500k.webm  # audio streams $ ffmpeg -i bunny_1080p_60fps.mp4 -c:a libvorbis -b:a 128k -vn -f webm -dash 1 audio_128k.webm  # the DASH manifest $ ffmpeg \\  -f webm_dash_manifest -i video_160x90_250k.webm \\  -f webm_dash_manifest -i video_320x180_500k.webm \\  -f webm_dash_manifest -i video_640x360_750k.webm \\  -f webm_dash_manifest -i video_640x360_1000k.webm \\  -f webm_dash_manifest -i video_1280x720_500k.webm \\  -f webm_dash_manifest -i audio_128k.webm \\  -c copy -map 0 -map 1 -map 2 -map 3 -map 4 -map 5 \\  -f webm_dash_manifest \\  -adaptation_sets &quot;id=0,streams=0,1,2,3,4 id=1,streams=5&quot; \\  manifest.mpd<\/code><\/pre>\n<p>  P.S.: \u044f \u0443\u0442\u0430\u0449\u0438\u043b \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 <a href=\"http:\/\/wiki.webmproject.org\/adaptive-streaming\/instructions-to-playback-adaptive-webm-using-dash\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e Adaptive WebM \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DASH<\/a>.<\/p>\n<p>  <a name=\"beyond\"><\/a><\/p>\n<h3>\u0412\u044b\u0445\u043e\u0434\u044f \u0437\u0430 \u0440\u0430\u043c\u043a\u0438<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u041d\u0435\u0441\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c FFmpeg. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <b>iMovie<\/b> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\/\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0438\u0434\u0435\u043e \u0434\u043b\u044f YouTube. \u0418 \u0412\u0430\u043c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>  <a name=\"hard_way\"><\/a><\/p>\n<h2>\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f FFmpeg libav<a href=\"#menu\">\u2191<\/a><\/h2>\n<blockquote><p>\u0420\u0430\u0437\u0432\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u043f\u043e\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u0443\u0445 \u0438 \u0437\u0440\u0435\u043d\u0438\u0435?<\/p>\n<p>  \u0411\u0438\u043e\u043b\u043e\u0433 \u0414\u044d\u0432\u0438\u0434 \u0420\u043e\u0431\u0435\u0440\u0442 \u0414\u0436\u043e\u043d\u0441<\/p><\/blockquote>\n<p>FFmpeg \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043a\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u041c\u043e\u0436\u0435\u0442 \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/p>\n<p>  FFmpeg \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0431\u044b\u0447\u043d\u043e, \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 FFmpeg, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u042f \u0431\u0443\u0434\u0443 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0430\u0431\u043e\u0440 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043a\u0430\u043a <b>FFmpeg libav<\/b>.<\/p>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u044c\u044e \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0438\u0438 \u0417\u0435\u0434\u0430 \u0428\u043e\u0443 \u00ab<a href=\"https:\/\/learncodethehardway.org\/\">\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f [&#8230;]<\/a>\u00bb, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0435 \u00ab\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0443 C\u00bb.<\/p>\n<p>  <a name=\"chapter_0\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 0 \u2014 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u00abHello World\u00bb<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c <i>Hello World<\/i> \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u0440 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0438\u0434\u0435\u043e: \u0444\u043e\u0440\u043c\u0430\u0442 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440), \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0430\u0443\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b\u044b \u0438, \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0445 \u043a\u0430\u043a \u0444\u0430\u0439\u043b\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  <a name=\"architecture\"><\/a><\/p>\n<h4>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 FFmpeg libav<a href=\"#menu\">\u2191<\/a><\/h4>\n<p>  \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0451\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 FFmpeg libav \u0438 \u043a\u0430\u043a \u0435\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e:  <\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"424\" src=\"https:\/\/habrastorage.org\/webt\/ej\/1d\/ek\/ej1deksvwwqdctppaujla5v5tog.png\"><\/div>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 <b>AVFormatContext<\/b> (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u0438\u0434\u0435\u043e \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b: \u0447\u0430\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a.<\/p>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 <b>\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/b>, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c (\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0435 \u0430\u0443\u0434\u0438\u043e- \u0438 \u0432\u0438\u0434\u0435\u043e-\u0434\u0430\u043d\u043d\u044b\u0435). \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 <b>AVStream<\/b>.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043d\u0430\u0448\u0435 \u0432\u0438\u0434\u0435\u043e \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430: \u0430\u0443\u0434\u0438\u043e, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0435\u043a\u0430 <b>AAC<\/b>, \u0438 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0435\u043a\u0430 <b>H264<\/b> (<b>AVC<\/b>). \u0418\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <b>\u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <b>AVPacket<\/b>.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f (\u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f), \u0438 \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 <b>AVCodec<\/b>.<\/p>\n<p>  <b>AVCodec<\/b> \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0432 <b>AVFrame<\/b>, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043d\u0435\u0441\u0436\u0430\u0442\u044b\u0439 \u043a\u0430\u0434\u0440. \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u043a\u0430\u043a \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e- \u0442\u0430\u043a \u0438 \u0432\u0438\u0434\u0435\u043e-\u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  <a name=\"requirements\"><\/a><\/p>\n<h4>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<a href=\"#menu\">\u2191<\/a><\/h4>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>Docker<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/distribution.bbb3d.renderfarming.net\/video\/mp4\/bbb_sunflower_1080p_60fps_normal.mp4\">\u0432\u0438\u0434\u0435\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u0440\u043e\u043b\u0438\u043a\u043e\u043c<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0433\u043e \u043d\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <i>make fetch_small_bunny_video<\/i>.<\/p>\n<p>  <a name=\"code\"><\/a><\/p>\n<h4>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434<a href=\"#menu\">\u2191<\/a><\/h4>\n<p>  TLDR; \u043f\u043e\u043a\u0430\u0436\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u044f\u043d\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0431\u0440\u043e:<\/p>\n<pre><code class=\"bash\">$ make run_hello<\/code><\/pre>\n<p>  \u041c\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438, \u043d\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/leandromoreira\/ffmpeg-libav-tutorial\/blob\/master\/0_hello_world.c\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d<\/a> \u043d\u0430 github.<\/p>\n<p>  \u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <b>AVFormatContext<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435).<\/p>\n<pre><code class=\"cpp\">AVFormatContext *pFormatContext = avformat_alloc_context();<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c <b>AVFormatContext<\/b> \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u0434\u0435\u043a\u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>avformat_open_input<\/b>. \u041e\u043d \u043e\u0436\u0438\u0434\u0430\u0435\u0442 <b>AVFormatContext<\/b>, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u0434\u0432\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430: <b>AVInputFormat<\/b> (\u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u0442\u0435 NULL, FFmpeg \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0444\u043e\u0440\u043c\u0430\u0442) \u0438 <b>AVDictionary<\/b> (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440\u0430).<\/p>\n<pre><code class=\"cpp\">avformat_open_input(&amp;pFormatContext, filename, NULL, NULL);<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0434\u0438\u0430:<\/p>\n<pre><code class=\"cpp\">printf(&quot;Format %s, duration %lld us&quot;, pFormatContext-&gt;iformat-&gt;long_name, pFormatContext-&gt;duration);<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0442\u043e\u043a\u0430\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>avformat_find_stream_info<\/b>. \u0422\u0435\u043f\u0435\u0440\u044c <b>pFormatContext-&gt; nb_streams<\/b> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430 <b>pFormatContext-&gt; streams[i]<\/b> \u0434\u0430\u0441\u0442 \u043d\u0430\u043c <b>i<\/b>-\u0439 \u043f\u043e \u0441\u0447\u0451\u0442\u0443 \u043f\u043e\u0442\u043e\u043a (<b>AVStream<\/b>).<\/p>\n<pre><code class=\"cpp\">avformat_find_stream_info(pFormatContext,  NULL);<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c:<\/p>\n<pre><code class=\"cpp\">for(int i = 0; i &lt; pFormatContext-&gt;nb_streams; i++) {   \/\/ }<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c <b>AVCodecParameters<\/b>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0435\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e <b>i<\/b>-\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">AVCodecParameters *pLocalCodecParameters = pFormatContext-&gt;streams[i]-&gt;codecpar;<\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0435\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>avcodec_find_decoder<\/b>, \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0435\u043a\u0430 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <b>AVCodec<\/b> \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">AVCodec *pLocalCodec = avcodec_find_decoder(pLocalCodecParameters-&gt;codec_id);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u0434\u0435\u043a\u0430\u0445:<\/p>\n<pre><code class=\"cpp\">\/\/ specific for video and audio if (pLocalCodecParameters-&gt;codec_type == AVMEDIA_TYPE_VIDEO) {   printf(&quot;Video Codec: resolution %d x %d&quot;, pLocalCodecParameters-&gt;width, pLocalCodecParameters-&gt;height); } else if (pLocalCodecParameters-&gt;codec_type == AVMEDIA_TYPE_AUDIO) {   printf(&quot;Audio Codec: %d channels, sample rate %d&quot;, pLocalCodecParameters-&gt;channels, pLocalCodecParameters-&gt;sample_rate); } \/\/ general printf(&quot;\\tCodec %s ID %d bit_rate %lld&quot;, pLocalCodec-&gt;long_name, pLocalCodec-&gt;id, pCodecParameters-&gt;bit_rate);<\/code><\/pre>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0435\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f <b>AVCodecContext<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0437\u0430\u0442\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u0435\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 <b>CODEC<\/b> \u2014 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>avcodec_parameters_to_context<\/b>.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u0435\u043a\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0434\u0435\u043a. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>avcodec_open2<\/b> \u0438 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u0435\u043c \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">AVCodecContext *pCodecContext = avcodec_alloc_context3(pCodec); avcodec_parameters_to_context(pCodecContext, pCodecParameters); avcodec_open2(pCodecContext, pCodec, NULL);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0434\u0440\u044b, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (<b>AVPacket<\/b> \u0438 <b>AVFrame<\/b>).<\/p>\n<pre><code class=\"cpp\">AVPacket *pPacket = av_packet_alloc(); AVFrame *pFrame = av_frame_alloc();<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043a\u043e\u0440\u043c\u0438\u043c \u043d\u0430\u0448\u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>av_read_frame<\/b>, \u043f\u043e\u043a\u0430 \u0443 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code class=\"cpp\">while(av_read_frame(pFormatContext, pPacket) &gt;= 0) {   \/\/... }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u0436\u0430\u0442\u044b\u0439 \u043a\u0430\u0434\u0440) \u0432 \u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u0435\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>avcodec_send_packet<\/b>:<\/p>\n<pre><code class=\"cpp\">avcodec_send_packet(pCodecContext, pPacket);<\/code><\/pre>\n<p>  \u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0430\u0434\u0440 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0435\u0441\u0436\u0430\u0442\u044b\u0439 \u043a\u0430\u0434\u0440) \u043e\u0442 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u0435\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>avcodec_receive_frame<\/b>:<\/p>\n<pre><code class=\"cpp\">avcodec_receive_frame(pCodecContext, pFrame);<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430, PTS, DTS, \u0442\u0438\u043f \u043a\u0430\u0434\u0440\u0430 \u0438 \u0442.\u0434.:<\/p>\n<pre><code class=\"cpp\">printf(     &quot;Frame %c (%d) pts %d dts %d key_frame %d [coded_picture_number %d, display_picture_number %d]&quot;,     av_get_picture_type_char(pFrame-&gt;pict_type),     pCodecContext-&gt;frame_number,     pFrame-&gt;pts,     pFrame-&gt;pkt_dts,     pFrame-&gt;key_frame,     pFrame-&gt;coded_picture_number,     pFrame-&gt;display_picture_number );<\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u0434\u0440 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0441\u0435\u0440\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442: \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>pFrame-&gt;data<\/b>, \u0433\u0434\u0435 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c\u0438 <b>Y<\/b>, <b>Cb<\/b> \u0438 <b>Cr<\/b>. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c 0 (Y), \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u0441\u0435\u0440\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438:<\/p>\n<pre><code class=\"cpp\">save_gray_frame(pFrame-&gt;data[0], pFrame-&gt;linesize[0], pFrame-&gt;width, pFrame-&gt;height, frame_filename);  static void save_gray_frame(unsigned char *buf, int wrap, int xsize, int ysize, char *filename) {     FILE *f;     int i;     f = fopen(filename,&quot;w&quot;);     \/\/ writing the minimal required header for a pgm file format     \/\/ portable graymap format -&gt; https:\/\/en.wikipedia.org\/wiki\/Netpbm_format#PGM_example     fprintf(f, &quot;P5\\n%d %d\\n%d\\n&quot;, xsize, ysize, 255);      \/\/ writing line by line     for (i = 0; i &lt; ysize; i++)         fwrite(buf + i * wrap, 1, xsize, f);     fclose(f); }<\/code><\/pre>\n<p>  \u0418 \u0432\u0443\u0430\u043b\u044f! \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0442\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 2\u041c\u0431:<\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"413\" src=\"https:\/\/habrastorage.org\/webt\/gk\/tf\/i9\/gktfi9xb3ylqmmzu927uc7aon9w.png\"><\/div>\n<p>  <a name=\"chapter_1\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 1 \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e<a href=\"#menu\">\u2191<\/a><\/h3>\n<blockquote><p>\u0411\u044b\u0442\u044c \u0432 \u0438\u0433\u0440\u0435 \u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u044e\u043d\u044b\u0439 JS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0438\u0448\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 MSE-\u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440.<\/p><\/blockquote>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440 \u0443\u0437\u043d\u0430\u0451\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430.<\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0434\u0440\u043e\u0432:<br \/>  <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/gj\/yz\/7h\/gjyz7h4agcr6n2hdkmt9w9ko5ho.png\"> <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/is\/cl\/yy\/isclyy5ckz1_4w2mepv4msr2dba.png\"> <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/7z\/tr\/mu\/7ztrmukulalxo5qihbly0cpm_5w.png\"> <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/u3\/q8\/pq\/u3q8pqb2qxhroy1ycatplyeveco.png\"> <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/uu\/lh\/ih\/uulhihectxop1sphmmss_ipvfpc.png\"> <img loading=\"lazy\" decoding=\"async\" width=\"194\" height=\"110\" src=\"https:\/\/habrastorage.org\/webt\/9x\/ss\/bm\/9xssbmfyxzra5frtcob9dirkxt8.png\"><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0442\u0435\u043c\u043f\u0435, \u0438\u043d\u0430\u0447\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u043e\u0442 \u0432\u0438\u0434\u0435\u043e \u043b\u0438\u0431\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u043e, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u043a\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u0438\u043c\u0435\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u00fd\u044e \u043c\u0435\u0442\u043a\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (<b>PTS<\/b> \u2014 \u043e\u0442 <b>p<\/b>resentation <b>t<\/b>ime<b>s<\/b>tamp), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u0447\u0438\u0441\u043b\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <b>timebase<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (\u0433\u0434\u0435 \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0301\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u2014 <b>timescale<\/b>), \u0434\u0435\u043b\u0438\u043c\u043e\u0435 \u043d\u0430 <b>\u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043a\u0430\u0434\u0440\u043e\u0432<\/b> (<b>fps<\/b>).<\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f <b>fps = 60\/1<\/b> \u0438 <b>timebase = 1\/60000<\/b> \u043a\u0430\u0436\u0434\u044b\u0439 <b>PTS<\/b> \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c <b>timescale \/ fps = 1000<\/b>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f <b>PTS<\/b> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 0):<\/p>\n<pre><code class=\"cpp\">frame=0, PTS = 0, PTS_TIME = 0 frame=1, PTS = 1000, PTS_TIME = PTS * timebase = 0.016 frame=2, PTS = 2000, PTS_TIME = PTS * timebase = 0.033<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e, \u043d\u043e \u0441 <b>timescale<\/b>, \u0440\u0430\u0432\u043d\u043e\u0439 1\/60:<\/p>\n<pre><code class=\"cpp\">frame=0, PTS = 0, PTS_TIME = 0 frame=1, PTS = 1, PTS_TIME = PTS * timebase = 0.016 frame=2, PTS = 2, PTS_TIME = PTS * timebase = 0.033 frame=3, PTS = 3, PTS_TIME = PTS * timebase = 0.050<\/code><\/pre>\n<p>  \u0414\u043b\u044f <b>fps = 25\/1<\/b> \u0438 <b>timebase = 1\/75<\/b> \u043a\u0430\u0436\u0434\u0430\u044f <b>PTS<\/b> \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c <b>timescale \/ fps = 3<\/b>, \u0438 \u0432\u0440\u0435\u043c\u044f <b>PTS<\/b> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">frame=0, PTS = 0, PTS_TIME = 0 frame=1, PTS = 3, PTS_TIME = PTS * timebase = 0.04 frame=2, PTS = 6, PTS_TIME = PTS * timebase = 0.08 frame=3, PTS = 9, PTS_TIME = PTS * timebase = 0.12 ... frame=24, PTS = 72, PTS_TIME = PTS * timebase = 0.96 ... frame=4064, PTS = 12192, PTS_TIME = PTS * timebase = 162.56<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441 <b>pts_time<\/b> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c <b>pts_time<\/b> \u0438\u043b\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0447\u0430\u0441\u0430\u043c\u0438. FFmpeg libav \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439 API:<\/p>\n<pre><code class=\"cpp\">fps = AVStream-&gt;avg_frame_rate tbr = AVStream-&gt;r_frame_rate tbn = AVStream-&gt;time_base<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u0441\u0442\u0432\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043a\u0430\u0434\u0440\u044b \u0431\u044b\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 <b>DTS<\/b> (\u043a\u0430\u0434\u0440\u044b: 1, 6, 4, 2, 3, 5), \u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 <b>PTS<\/b> (\u043a\u0430\u0434\u0440\u044b: 1, 2, 3, 4, 5). \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f <b>B<\/b>-\u043a\u0430\u0434\u0440\u044b \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 <b>P<\/b> \u0438\u043b\u0438 <b>I<\/b>-\u043a\u0430\u0434\u0440\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">LOG: AVStream-&gt;r_frame_rate 60\/1 LOG: AVStream-&gt;time_base 1\/60000 ... LOG: Frame 1 (type=I, size=153797 bytes) pts 6000 key_frame 1 [DTS 0] LOG: Frame 2 (type=B, size=8117 bytes) pts 7000 key_frame 0 [DTS 3] LOG: Frame 3 (type=B, size=8226 bytes) pts 8000 key_frame 0 [DTS 4] LOG: Frame 4 (type=B, size=17699 bytes) pts 9000 key_frame 0 [DTS 2] LOG: Frame 5 (type=B, size=6253 bytes) pts 10000 key_frame 0 [DTS 5] LOG: Frame 6 (type=P, size=34992 bytes) pts 11000 key_frame 0 [DTS 1]<\/code><\/pre>\n<p>  <a name=\"chapter_2\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 2 \u2014 \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  \u0420\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430, remuxing) \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430) \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e MPEG-4 \u043d\u0430 MPEG-TS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FFmpeg:<\/p>\n<pre><code class=\"bash\">ffmpeg input.mp4 -c copy output.ts<\/code><\/pre>\n<p>  MP4-\u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d (<b>-c copy<\/b>), \u0438, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043c mpegts-\u0444\u0430\u0439\u043b. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 <b>-f<\/b>, ffmpeg \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u041e\u0431\u0449\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 FFmpeg \u0438\u043b\u0438 libav \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443\/\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443:<\/p>\n<ul>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/b> \u2014 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u0439\u043b, \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e rtmp \u0438\u043b\u0438 HTTP)<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/b> \u2014 \u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0434\u0435\u043a\u0430<\/b> \u2014 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/b> \u2014 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043a \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430), \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442<\/li>\n<li>\u2026 \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438:<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0434\u0435\u043a\u0430<\/b> \u2014 \u043a\u043e\u0434\u0438\u0440\u0432\u0430\u043d\u0438\u0435 (\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435) \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/b> \u2014 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0438\u043b\u0438 \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435) \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445)<\/li>\n<li><b>\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/b> \u2014 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 (\u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u043b\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440)<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/u6\/x4\/g3\/u6x4g3oijeetm1lpdvxnjo9hwls.png\"><br \/>  <i>(\u042d\u0442\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043c\u0438 <a href=\"http:\/\/leixiaohua1020.github.io\/#ffmpeg-development-examples\">Leixiaohua<\/a> \u0438 <a href=\"https:\/\/slhck.info\/ffmpeg-encoding-course\/#\/9\">Slhck<\/a>)<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c libav, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">ffmpeg input.mp4 -c copy output.ts<\/code><\/pre>\n<p>  \u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u0432\u0432\u043e\u0434\u0430 (<b>input_format_context<\/b>) \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 (<b>output_format_context<\/b>):<\/p>\n<pre><code class=\"cpp\">AVFormatContext *input_format_context = NULL; AVFormatContext *output_format_context = NULL;<\/code><\/pre>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0432\u043e\u0434\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">if ((ret = avformat_open_input(&amp;input_format_context, in_filename, NULL, NULL)) &lt; 0) {   fprintf(stderr, &quot;Could not open input file '%s'&quot;, in_filename);   goto end; } if ((ret = avformat_find_stream_info(input_format_context, NULL)) &lt; 0) {   fprintf(stderr, &quot;Failed to retrieve input stream information&quot;);   goto end; }  avformat_alloc_output_context2(&amp;output_format_context, NULL, NULL, out_filename); if (!output_format_context) {   fprintf(stderr, &quot;Could not create output context\\n&quot;);   ret = AVERROR_UNKNOWN;   goto end; }<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e \u0438 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">number_of_streams = input_format_context-&gt;nb_streams; streams_list = av_mallocz_array(number_of_streams, sizeof(*streams_list));<\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c, \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>avformat_new_stream<\/b>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e \u0438\u043b\u0438 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0445.<\/p>\n<pre><code class=\"cpp\">for (i = 0; i &lt; input_format_context-&gt;nb_streams; i++) {   AVStream *out_stream;   AVStream *in_stream = input_format_context-&gt;streams[i];   AVCodecParameters *in_codecpar = in_stream-&gt;codecpar;   if (in_codecpar-&gt;codec_type != AVMEDIA_TYPE_AUDIO &amp;&amp;       in_codecpar-&gt;codec_type != AVMEDIA_TYPE_VIDEO &amp;&amp;       in_codecpar-&gt;codec_type != AVMEDIA_TYPE_SUBTITLE) {     streams_list[i] = -1;     continue;   }   streams_list[i] = stream_index++;   out_stream = avformat_new_stream(output_format_context, NULL);   if (!out_stream) {     fprintf(stderr, &quot;Failed allocating output stream\\n&quot;);     ret = AVERROR_UNKNOWN;     goto end;   }   ret = avcodec_parameters_copy(out_stream-&gt;codecpar, in_codecpar);   if (ret &lt; 0) {     fprintf(stderr, &quot;Failed to copy codec parameters\\n&quot;);     goto end;   } }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"cpp\">if (!(output_format_context-&gt;oformat-&gt;flags &amp; AVFMT_NOFILE)) {   ret = avio_open(&amp;output_format_context-&gt;pb, out_filename, AVIO_FLAG_WRITE);   if (ret &lt; 0) {     fprintf(stderr, &quot;Could not open output file '%s'&quot;, out_filename);     goto end;   } }  ret = avformat_write_header(output_format_context, NULL); if (ret &lt; 0) {   fprintf(stderr, &quot;Error occurred when opening output file\\n&quot;);   goto end; }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438, \u043f\u0430\u043a\u0435\u0442 \u0437\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0432 \u043d\u0430\u0448\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0446\u0438\u043a\u043b\u0435, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b (<b>av_read_frame<\/b>), \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c <b>PTS<\/b> \u0438 <b>DTS<\/b>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e (<b>av_interleaved_write_frame<\/b>) \u0432 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430.<\/p>\n<pre><code class=\"cpp\">while (1) {   AVStream *in_stream, *out_stream;   ret = av_read_frame(input_format_context, &amp;packet);   if (ret &lt; 0)     break;   in_stream  = input_format_context-&gt;streams[packet.stream_index];   if (packet.stream_index &gt;= number_of_streams || streams_list[packet.stream_index] &lt; 0) {     av_packet_unref(&amp;packet);     continue;   }   packet.stream_index = streams_list[packet.stream_index];   out_stream = output_format_context-&gt;streams[packet.stream_index];   \/* copy packet *\/   packet.pts = av_rescale_q_rnd(packet.pts, in_stream-&gt;time_base, out_stream-&gt;time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);   packet.dts = av_rescale_q_rnd(packet.dts, in_stream-&gt;time_base, out_stream-&gt;time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);   packet.duration = av_rescale_q(packet.duration, in_stream-&gt;time_base, out_stream-&gt;time_base);   \/\/ https:\/\/ffmpeg.org\/doxygen\/trunk\/structAVPacket.html#ab5793d8195cf4789dfb3913b7a693903   packet.pos = -1;    \/\/https:\/\/ffmpeg.org\/doxygen\/trunk\/group__lavf__encoding.html#ga37352ed2c63493c38219d935e71db6c1   ret = av_interleaved_write_frame(output_format_context, &amp;packet);   if (ret &lt; 0) {     fprintf(stderr, &quot;Error muxing packet\\n&quot;);     break;   }   av_packet_unref(&amp;packet); }<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>av_write_trailer<\/b>:<\/p>\n<pre><code class=\"cpp\">av_write_trailer(output_format_context);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434. \u0418 \u043f\u0435\u0440\u0432\u044b\u043c \u0442\u0435\u0441\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 (\u0432\u0438\u0434\u0435\u043e-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430) \u0438\u0437 MP4 \u0432 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b MPEG-TS. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 ffmpeg input.mp4 -c \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f output.ts \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e libav.<\/p>\n<pre><code class=\"bash\">make run_remuxing_ts<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u041d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435?! \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>ffprobe<\/b>:<\/p>\n<pre><code class=\"bash\">ffprobe -i remuxed_small_bunny_1080p_60fps.ts  Input #0, mpegts, from 'remuxed_small_bunny_1080p_60fps.ts':   Duration: 00:00:10.03, start: 0.000000, bitrate: 2751 kb\/s   Program 1     Metadata:       service_name    : Service01       service_provider: FFmpeg     Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] \/ 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 90k tbn, 120 tbc     Stream #0:1[0x101]: Audio: ac3 ([129][0][0][0] \/ 0x0081), 48000 Hz, 5.1(side), fltp, 320 kb\/s<\/code><\/pre>\n<p>  \u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0434\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 libav. \u041d\u043e \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0435\u043a\u0430, \u0447\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e \u043d\u0430 \u0441\u0445\u0435\u043c\u0435.<\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"415\" src=\"https:\/\/habrastorage.org\/webt\/_i\/vz\/yw\/_ivzywrkd4le_hfwqyf-7hhrcb8.png\"><\/div>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u044d\u0442\u0443 \u0433\u043b\u0430\u0432\u0443, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440\u0443. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u0430\u0434\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 MPEG-DASH, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 mp4 (\u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <b>fmp4<\/b>) \u0432\u043c\u0435\u0441\u0442\u043e MPEG-TS \u0438\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e MPEG-4.<\/p>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e:<\/p>\n<pre><code class=\"bash\">ffmpeg -i non_fragmented.mp4 -movflags frag_keyframe+empty_moov+default_base_moof fragmented.mp4<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u0442\u043e \u0438 \u0432 libav-\u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043e\u043f\u0446\u0438\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">AVDictionary* opts = NULL; av_dict_set(&amp;opts, &quot;movflags&quot;, &quot;frag_keyframe+empty_moov+default_base_moof&quot;, 0); ret = avformat_write_header(output_format_context, &amp;opts);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 mp4-\u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">make run_remuxing_fragmented_mp4<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0443\u0442 \u0432\u0441\u0451 \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 <a href=\"http:\/\/download.tsi.telecom-paristech.fr\/gpac\/mp4box.js\/filereader.html\">gpac\/mp4box.js<\/a> \u0438\u043b\u0438 \u0441\u0430\u0439\u0442 <a href=\"http:\/\/mp4parser.com\/\">http:\/\/mp4parser.com\/<\/a>, \u0434\u0430\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 mp4.<\/p>\n<p>  <img loading=\"lazy\" decoding=\"async\" align=\"left\" width=\"212\" height=\"81\" src=\"https:\/\/habrastorage.org\/webt\/x5\/hw\/9u\/x5hw9uxcdgvl36yvns8hkquzlca.png\"><\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"1\" src=\"https:\/\/habrastorage.org\/webt\/nz\/x-\/lg\/nzx-lgxsv_fsqphsci0i8gabhfi.gif\"><\/div>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u044b\u0439 \u0431\u043b\u043e\u043a <b>mdat<\/b> \u2014 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e \u043a\u0430\u0434\u0440\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 mp4, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0431\u043b\u043e\u043a\u0438 mdat:<\/p>\n<p>  <img loading=\"lazy\" decoding=\"async\" align=\"left\" width=\"184\" height=\"140\" src=\"https:\/\/habrastorage.org\/webt\/pu\/bv\/mm\/pubvmm5ogancxewrdxfgdth1d34.png\"><\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"1\" src=\"https:\/\/habrastorage.org\/webt\/nz\/x-\/lg\/nzx-lgxsv_fsqphsci0i8gabhfi.gif\"><\/div>\n<p><a name=\"chapter_3\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 3 \u2014 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<a href=\"#menu\">\u2191<\/a><\/h3>\n<p>  TLDR; \u043f\u043e\u043a\u0430\u0436\u0438 \u043c\u043d\u0435 \u043a\u043e\u0434 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"bash\">$ make run_transcoding<\/code><\/pre>\n<p>  \u041c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438, \u043d\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/leandromoreira\/ffmpeg-libav-tutorial\/blob\/master\/3_transcoding.c\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d<\/a> \u043d\u0430 github.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043d\u0439 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0435\u0440, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 C, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0438\u0437 H264 \u0432 H265 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a FFmpeg libav, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 <b>libavcodec<\/b>, <b>libavformat<\/b> \u0438 <b>libavutil<\/b>.<\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"396\" src=\"https:\/\/habrastorage.org\/webt\/pw\/zj\/ys\/pwzjys-eok7ggnpkztlv7n60njm.png\"><\/div>\n<p>  <b>AVFormatContext<\/b> \u2014 \u044d\u0442\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043c\u0435\u0434\u0438\u0430-\u0444\u0430\u0439\u043b\u0430, \u0442.\u0435. \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (MKV, MP4, Webm, TS)<br \/>  <b>AVStream<\/b> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0430\u0443\u0434\u0438\u043e, \u0432\u0438\u0434\u0435\u043e, \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435)<br \/>  <b>AVPacket<\/b> \u2014 \u044d\u0442\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 <b>AVStream<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <b>AVCodec<\/b> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: av1, h264, vp9, hevc), \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <b>AVFrame<\/b>.<\/p>\n<p>  <a name=\"cahpter_3_transmuxing\"><\/a><\/p>\n<h4>\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<a href=\"#menu\">\u2191<\/a><\/h4>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"cpp\">\/\/ Allocate an AVFormatContext avfc = avformat_alloc_context(); \/\/ Open an input stream and read the header. avformat_open_input(avfc, in_filename, NULL, NULL); \/\/ Read packets of a media file to get stream information. avformat_find_stream_info(avfc, NULL);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0434\u0435\u043a\u043e\u0434\u0435\u0440. <b>AVFormatContext<\/b> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c <b>AVStream<\/b>, \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 <b>AVCodec<\/b> \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 <b>AVCodecContext<\/b>. \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <b>AVCodecContext<\/b> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043d\u0430\u043b\u044b, \u0432\u044b\u0441\u043e\u0442\u0430 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<pre><code class=\"cpp\">for(int i = 0; i &lt; avfc-&gt;nb_streams; i++) {   AVStream *avs = avfc-&gt;streams[i];   AVCodec *avc = avcodec_find_decoder(avs-&gt;codecpar-&gt;codec_id);   AVCodecContext *avcc = avcodec_alloc_context3(*avc);   avcodec_parameters_to_context(*avcc, avs-&gt;codecpar);   avcodec_open2(*avcc, *avc, NULL); }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0434\u0438\u0430-\u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e <b>AVFormatContext<\/b>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0434\u0435\u043a\u0430 \u0438\u0437 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430.<\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433 <b>AV_CODEC_FLAG_GLOBAL_HEADER<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">avformat_alloc_output_context2(&amp;encoder_avfc, NULL, NULL, out_filename);  AVStream *avs = avformat_new_stream(encoder_avfc, NULL); avcodec_parameters_copy(avs-&gt;codecpar, decoder_avs-&gt;codecpar);  if (encoder_avfc-&gt;oformat-&gt;flags &amp; AVFMT_GLOBALHEADER)   encoder_avfc-&gt;flags |= AV_CODEC_FLAG_GLOBAL_HEADER;  avio_open(&amp;encoder_avfc-&gt;pb, encoder-&gt;filename, AVIO_FLAG_WRITE); avformat_write_header(encoder-&gt;avfc, &amp;muxer_opts);<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <b>AVPacket<\/b> \u043e\u0442 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>av_interleaved_write_frame<\/b> \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u00ab<i>write frame<\/i>\u00bb, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0430\u043a\u0435\u0442. \u0417\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0442\u0440\u0435\u0439\u043b\u0435\u0440 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"cpp\">AVFrame *input_frame = av_frame_alloc(); AVPacket *input_packet = av_packet_alloc();  while(av_read_frame(decoder_avfc, input_packet) &gt;= 0) {   av_packet_rescale_ts(input_packet, decoder_video_avs-&gt;time_base, encoder_video_avs-&gt;time_base);   av_interleaved_write_frame(*avfc, input_packet) &lt; 0)); }  av_write_trailer(encoder_avfc);<\/code><\/pre>\n<p>  <a name=\"cahpter_3_transcoding\"><\/a><\/p>\n<h4>\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<a href=\"#menu\">\u2191<\/a><\/h4>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0441 <b>h264<\/b> \u043d\u0430 <b>h265<\/b>.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u0435\u043a\u043e\u0434\u0435\u0440, \u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0438\u0434\u0435\u043e <b>AVStream<\/b> \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0435 <b>avformat_new_stream<\/b>.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <b>AVCodec<\/b> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <b>libx265<\/b>, <b>avcodec_find_encoder_by_name<\/b>.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c <b>AVCodecContext<\/b> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430 <b>avcodec_alloc_context3<\/b>.<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u0435\u0430\u043d\u0441\u0430 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438&#8230;<\/li>\n<li>\u2026 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434\u0435\u043a \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u043e\u0442\u043e\u043a (<b>avcodec_open2<\/b> \u0438 <b>avcodec_parameters_from_context<\/b>).<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cpp\">AVRational input_framerate = av_guess_frame_rate(decoder_avfc, decoder_video_avs, NULL); AVStream *video_avs = avformat_new_stream(encoder_avfc, NULL);  char *codec_name = &quot;libx265&quot;; char *codec_priv_key = &quot;x265-params&quot;; \/\/ we're going to use internal options for the x265 \/\/ it disables the scene change detection and fix then \/\/ GOP on 60 frames. char *codec_priv_value = &quot;keyint=60:min-keyint=60:scenecut=0&quot;;  AVCodec *video_avc = avcodec_find_encoder_by_name(codec_name); AVCodecContext *video_avcc = avcodec_alloc_context3(video_avc); \/\/ encoder codec params av_opt_set(sc-&gt;video_avcc-&gt;priv_data, codec_priv_key, codec_priv_value, 0); video_avcc-&gt;height = decoder_ctx-&gt;height; video_avcc-&gt;width = decoder_ctx-&gt;width; video_avcc-&gt;pix_fmt = video_avc-&gt;pix_fmts[0]; \/\/ control rate video_avcc-&gt;bit_rate = 2 * 1000 * 1000; video_avcc-&gt;rc_buffer_size = 4 * 1000 * 1000; video_avcc-&gt;rc_max_rate = 2 * 1000 * 1000; video_avcc-&gt;rc_min_rate = 2.5 * 1000 * 1000; \/\/ time base video_avcc-&gt;time_base = av_inv_q(input_framerate); video_avs-&gt;time_base = sc-&gt;video_avcc-&gt;time_base;  avcodec_open2(sc-&gt;video_avcc, sc-&gt;video_avc, NULL); avcodec_parameters_from_context(sc-&gt;video_avs-&gt;codecpar, sc-&gt;video_avcc);<\/code><\/pre>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a\u0430:<\/p>\n<ul>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 <b>AVPacket<\/b> \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0443 (<b>avcodec_send_packet<\/b>).<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u0441\u0436\u0430\u0442\u044b\u0439 <b>AVFrame<\/b> (<b>avcodec_receive_frame<\/b>).<\/li>\n<li>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430.<\/li>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u0434\u0440 (<b>avcodec_send_frame<\/b>).<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0436\u0430\u0442\u0438\u0435, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435\u043a\u0435 <b>AVPacket<\/b> (<b>avcodec_receive_packet<\/b>).<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (<b>av_packet_rescale_ts<\/b>).<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b (<b>av_interleaved_write_frame<\/b>).<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"cpp\">AVFrame *input_frame = av_frame_alloc(); AVPacket *input_packet = av_packet_alloc();  while (av_read_frame(decoder_avfc, input_packet) &gt;= 0) {   int response = avcodec_send_packet(decoder_video_avcc, input_packet);   while (response &gt;= 0) {     response = avcodec_receive_frame(decoder_video_avcc, input_frame);     if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {       break;     } else if (response &lt; 0) {       return response;     }     if (response &gt;= 0) {       encode(encoder_avfc, decoder_video_avs, encoder_video_avs, decoder_video_avcc, input_packet-&gt;stream_index);     }     av_frame_unref(input_frame);   }   av_packet_unref(input_packet); } av_write_trailer(encoder_avfc);  \/\/ used function int encode(AVFormatContext *avfc, AVStream *dec_video_avs, AVStream *enc_video_avs, AVCodecContext video_avcc int index) {   AVPacket *output_packet = av_packet_alloc();   int response = avcodec_send_frame(video_avcc, input_frame);    while (response &gt;= 0) {     response = avcodec_receive_packet(video_avcc, output_packet);     if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {       break;     } else if (response &lt; 0) {       return -1;     }      output_packet-&gt;stream_index = index;     output_packet-&gt;duration = enc_video_avs-&gt;time_base.den \/ enc_video_avs-&gt;time_base.num \/ dec_video_avs-&gt;avg_frame_rate.num * dec_video_avs-&gt;avg_frame_rate.den;      av_packet_rescale_ts(output_packet, dec_video_avs-&gt;time_base, enc_video_avs-&gt;time_base);     response = av_interleaved_write_frame(avfc, output_packet);   }   av_packet_unref(output_packet);   av_packet_free(&amp;output_packet);   return 0; }<\/code><\/pre>\n<p>  \u041c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0438\u0437 <b>h264<\/b> \u0432 <b>h265<\/b>. \u041a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c, \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u0435\u0434\u0438\u0430-\u0444\u0430\u0439\u043b\u0430 h265 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c h264, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">  \/*    * H264 -&gt; H265    * Audio -&gt; remuxed (untouched)    * MP4 - MP4    *\/   StreamingParams sp = {0};   sp.copy_audio = 1;   sp.copy_video = 0;   sp.video_codec = &quot;libx265&quot;;   sp.codec_priv_key = &quot;x265-params&quot;;   sp.codec_priv_value = &quot;keyint=60:min-keyint=60:scenecut=0&quot;;    \/*    * H264 -&gt; H264 (fixed gop)    * Audio -&gt; remuxed (untouched)    * MP4 - MP4    *\/   StreamingParams sp = {0};   sp.copy_audio = 1;   sp.copy_video = 0;   sp.video_codec = &quot;libx264&quot;;   sp.codec_priv_key = &quot;x264-params&quot;;   sp.codec_priv_value = &quot;keyint=60:min-keyint=60:scenecut=0:force-cfr=1&quot;;    \/*    * H264 -&gt; H264 (fixed gop)    * Audio -&gt; remuxed (untouched)    * MP4 - fragmented MP4    *\/   StreamingParams sp = {0};   sp.copy_audio = 1;   sp.copy_video = 0;   sp.video_codec = &quot;libx264&quot;;   sp.codec_priv_key = &quot;x264-params&quot;;   sp.codec_priv_value = &quot;keyint=60:min-keyint=60:scenecut=0:force-cfr=1&quot;;   sp.muxer_opt_key = &quot;movflags&quot;;   sp.muxer_opt_value = &quot;frag_keyframe+empty_moov+default_base_moof&quot;;    \/*    * H264 -&gt; H264 (fixed gop)    * Audio -&gt; AAC    * MP4 - MPEG-TS    *\/   StreamingParams sp = {0};   sp.copy_audio = 0;   sp.copy_video = 0;   sp.video_codec = &quot;libx264&quot;;   sp.codec_priv_key = &quot;x264-params&quot;;   sp.codec_priv_value = &quot;keyint=60:min-keyint=60:scenecut=0:force-cfr=1&quot;;   sp.audio_codec = &quot;aac&quot;;   sp.output_extension = &quot;.ts&quot;;    \/* WIP :P  -&gt; it's not playing on VLC, the final bit rate is huge    * H264 -&gt; VP9    * Audio -&gt; Vorbis    * MP4 - WebM    *\/   \/\/StreamingParams sp = {0};   \/\/sp.copy_audio = 0;   \/\/sp.copy_video = 0;   \/\/sp.video_codec = &quot;libvpx-vp9&quot;;   \/\/sp.audio_codec = &quot;libvorbis&quot;;   \/\/sp.output_extension = &quot;.webm&quot;;<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u043e\u0436\u0430 \u0440\u0443\u043a\u0443 \u043d\u0430 \u0441\u0435\u0440\u0434\u0446\u0435, \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg \u0438 \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0447\u0442\u043e-\u0442\u043e \u0433\u0434\u0435-\u0442\u043e \u0443\u043f\u0443\u0441\u0442\u0438\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c <b>force-cfr<\/b> \u0434\u043b\u044f <b>h264<\/b>, \u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0432\u044b\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0438\u043f \u043a\u0430\u0434\u0440\u0430 (5) \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0442\u0438\u043f \u043a\u0430\u0434\u0440\u0430 (3).<\/p>\n<hr>\n<hr>\n<hr>\n<hr>\n<hr>\n<p>  <a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495612\/\"><img loading=\"lazy\" decoding=\"async\" align=\"right\" width=\"300\" height=\"200\" src=\"https:\/\/habrastorage.org\/webt\/y-\/tk\/2x\/y-tk2xysntp5xe-hghmnarqikwq.jpeg\"><\/a><br clear=\"left\">  <\/p>\n<h4>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0431\u043b\u043e\u0433\u0435<br \/>  \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 EDISON:<\/h4>\n<p>  <a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495612\/\"><b>\u041f\u0435\u0440\u0435\u0436\u0438\u0432\u0451\u0442 \u043b\u0438 Airbnb \u043a\u043e\u0440\u043e\u043d\u0430\u0432\u0438\u0440\u0443\u0441?<br \/>  [\u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u0434\u0430]<\/b><\/a><\/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:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/\"> https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/\"><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/\"><\/p>\n<div style=\"text-align:center;\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"210\" src=\"https:\/\/habrastorage.org\/webt\/fd\/ea\/2e\/fdea2eqs62xxuxzko84c8mvj7z4.png\"><\/div>\n<p><\/a><br \/>  \u0414\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b \u043a\u043d\u0438\u0433\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0430\u0437\u0436\u0451\u0432\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>FFmpeg<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (<i>\u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u2014 <b>libav<\/b><\/i>, \u0442.\u0435. <b>lib<\/b>rary <b>a<\/b>udio <b>v<\/b>ideo). \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0443\u0447\u0435\u0431\u043d\u0438\u043a \u00ab\u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440 \u0438 \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0442\u044b\u0441\u044f\u0447\u0443 \u0441\u0442\u0440\u043e\u043a\u00bb. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0442\u0430\u043c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u043d\u0443\u0430\u043b \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 C, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c: \u0412\u044b \u043b\u0435\u0433\u043a\u043e \u0432\u0441\u0451 \u043f\u043e\u0439\u043c\u0451\u0442\u0435 \u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u0423 FFmpeg libav \u0443\u0439\u043c\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u044f\u0437\u044b\u043a\u0430\u043c (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043a Python \u0438 \u043a Go). \u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0412\u0430\u0448 \u044f\u0437\u044b\u043a \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <b>ffi<\/b> (\u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <a href=\"https:\/\/github.com\/daurnimator\/ffmpeg-lua-ffi\/blob\/master\/init.lua\"><b>Lua<\/b><\/a>).<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e, \u043a\u043e\u0434\u0435\u043a\u0438 \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b. \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434. \u041d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f FFmpeg libav\u00bb.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0451), \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0432\u0438\u0434\u0435\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u043d\u044f\u043b\u043e \u044d\u0441\u0442\u0430\u0444\u0435\u0442\u0443 \u043e\u0442 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e, FFmpeg \u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a name=\"menu\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#intro\">\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#video\">\u0412\u0438\u0434\u0435\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0432\u0438\u0434\u0438\u0448\u044c!<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#audio\">\u0410\u0443\u0434\u0438\u043e \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0441\u043b\u044b\u0448\u0438\u0448\u044c!<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#codec\">\u041a\u043e\u0434\u0435\u043a \u2014 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#container\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u2014 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#command_line\">\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 FFmpeg<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#101\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 FFmpeg 101<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#operations\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0432\u0438\u0434\u0435\u043e<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transcoding\">\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transmuxing\">\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transrating\">\u0422\u0440\u0430\u043d\u0441\u0440\u0435\u0439\u0442\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#transsizing\">\u0422\u0440\u0430\u043d\u0441\u0430\u0439\u0437\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#bonus\">\u0411\u043e\u043d\u0443\u0441: \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#beyond\">\u0412\u044b\u0445\u043e\u0434\u044f \u0437\u0430 \u0440\u0430\u043c\u043a\u0438<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#hard_way\">\u0422\u0435\u0440\u043d\u0438\u0441\u0442\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f FFmpeg libav<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_0\">\u0413\u043b\u0430\u0432\u0430 0 \u2014 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u00abHello World\u00bb<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#architecture\">FFmpeg libav \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#requirements\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#code\">\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0434<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_1\">\u0413\u043b\u0430\u0432\u0430 1 \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_2\">\u0413\u043b\u0430\u0432\u0430 2 \u2014 \u0440\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#chapter_3\">\u0413\u043b\u0430\u0432\u0430 3 \u2014 \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#cahpter_3_transmuxing\">\u0422\u0440\u0430\u043d\u0441\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/495614\/#cahpter_3_transcoding\">\u0422\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\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-302028","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302028","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=302028"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302028\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=302028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=302028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=302028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}