{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Секретный блог",
    "_rss_description": "Скрытые от навигации заметки",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/balyberdin.com\/hey\/",
    "feed_url": "https:\/\/balyberdin.com\/hey\/rss\/",
    "icon": false,
    "authors": [
        {
            "name": "Vitaly Balyberdin",
            "url": "https:\/\/balyberdin.com\/hey\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "59",
            "url": "https:\/\/balyberdin.com\/hey\/all\/metronome\/",
            "title": "Метроном и конвертер FPS в BPM",
            "content_html": "<p>Я как 3D-дизайнер часто сталкиваюсь с тем, что нужных мне утилит просто не существует. Поэтому я начал создавать собственные!<\/p>\n<p>Когда я работаю над анимацией без музыки — мне нужен ритм. Обычно я ищу на YouTube что-то в стиле «metronome 120 BPM», скачиваю видео и добавляю его на таймлайн. После десятого раза я понял, что это неудобно и неэффективно.<\/p>\n<p>Поэтому я решил создать свой метроном. Нужен он мне часто, а сделать его было относительно несложно.<\/p>\n<div class=\"half-img\"><div class=\"e2-text-picture\">\n<a href=\"https:\/\/balyberdin.com\/tools\/metronome\/\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/metronome_04_min.png\" width=\"1498\" height=\"1154\" alt=\"метроном для аниматоров и конвертер fps в bpm\" \/>\n<\/a><\/div>\n<\/div><p>Конечно, метрономов существует огромное количество. Но я создал свой специально для анимации:<\/p>\n<ul>\n<li>Расширенный диапазон — от 30 до 300 BPM<\/li>\n<li>Скачивание в один клик — сразу получаете WAV-файл на 1 минуту<\/li>\n<li>Конвертер FPS в BPM — введите частоту кадров и конвертер предложит лучшие BPM. Например, при 30 FPS, 120 BPM даёт бит каждые 15 кадров<\/li>\n<li>Идеальная синхронизация — бит начинается ровно с нулевого кадра, в отличие от большинства YouTube видео<\/li>\n<\/ul>\n<p>💓 Вот ссылка: <a href=\"https:\/\/balyberdin.com\/tools\/metronome\/\">https:\/\/balyberdin.com\/tools\/metronome\/<\/a><\/p>\n<p>Теперь мой рабочий процесс стал проще, и, надеюсь, ваш тоже. А я продолжу делать инструменты, если что-то в работе будет казаться неэффективным настолько, что захочется это исправить. И обязательно поделюсь.<\/p>\n",
            "date_published": "2025-06-13T18:07:01+03:00",
            "date_modified": "2025-06-13T18:06:52+03:00",
            "tags": [
                "tools"
            ],
            "image": "https:\/\/balyberdin.com\/hey\/pictures\/metronome_04_min.png",
            "_date_published_rfc2822": "Fri, 13 Jun 2025 18:07:01 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "59",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/balyberdin.com\/hey\/pictures\/metronome_04_min.png"
                ]
            }
        },
        {
            "id": "34",
            "url": "https:\/\/balyberdin.com\/hey\/all\/ae-expressions\/",
            "title": "Подборка экспрешнов для After Effects",
            "content_html": "<p>Собрал список выражений для Аfter Effects, которые упрощают мою работу. Совсем простых в стиле <f>loopOut()<\/f> или <f>wiggle (.4,6)<\/f> здесь нет, но и ничего слишком сложного тоже.<\/p>\n<p>Своих экспрешнов здесь всего несколько. Большинство я взял из интернета и немного адаптировал под себя. Так что там где уместно, я указал ссылки на авторов.<\/p>\n<h2>Динамическая рамка для текста<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-text_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"560\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Плашка, которая автоматически подстраивается под длину текста.<\/p>\n<p>Создайте прямоугольный <f>Shape Layer<\/f> и сверху отдельным слоем добавьте текст.<br \/>\nПримените экспрешн к параметру <f>Size<\/f> у шейпа:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">margin_width = 60;\nmargin_height = 40;\n\ntext_width = thisComp.layer(index-1).sourceRectAtTime().width;\ntext_height = thisComp.layer(index-1).sourceRectAtTime().height;\n\nbox_width = text_width + margin_width*2;\nbox_height = text_height + margin_height*2;\n\n[box_width, box_height]<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/creativecow.net\/forums\/thread\/changing-shape-layers-size-width-due-to-text-width\/\">© Kalleheikki Kannisto<\/a><\/p>\n<p>Если текст в несколько строк, то добавьте ещё этот экспрешн к <f>Position<\/f> у шейпа:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">x = value[0];\ny = content(&quot;Rectangle 1&quot;).content(&quot;Rectangle Path 1&quot;).size[1]\/2;\n[x,y]<\/code><\/pre><h2>Анимируемый wiggle<\/h2>\n<p>Простой способ анимировать wiggle с помощью двух слайдеров: первый отвечает за частоту, второй за амплитуду. Лучше анимировать только амплитуду.<\/p>\n<p>Добавьте эффект <f>Slider Control<\/f> на слой с экспрешном и продублируйте его.<br \/>\nПримените экспрешн к нужному параметру:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">w_freq = effect(&quot;Slider Control&quot;)(&quot;Slider&quot;);\nw_amplitude = effect(&quot;Slider Control 2&quot;)(&quot;Slider&quot;);\n\nwiggle(w_freq,w_amplitude)<\/code><\/pre><h2>Цикличный wiggle<\/h2>\n<p>Благодаря этому экспрешну, wiggle начинается и заканчивается в одной и той же точке.<\/p>\n<p>Если вдруг цикл не работает, то это скорей всего из-за того, что луп не успевает прийти в изначальное состояние за отведённое время. Просто увеличьте <f>loopTime<\/f> или <f>freq<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">freq = 1;\namp = 65;\n\nstartTime = 0; \/\/ На какой секунде начинается луп\nloopTime = 3; \/\/ Сколько секунд идёт\n\nt = (time+startTime) % loopTime;\nwiggle1 = wiggle(freq, amp, 1, 0.5, t);\nwiggle2 = wiggle(freq, amp, 1, 0.5, t - loopTime);\n\nlinear(t, 0, loopTime, wiggle1, wiggle2)<\/code><\/pre><p class=\"foot\"><a href=\"http:\/\/www.motionscript.com\/design-guide\/looping-wiggle.html\">© Dan Ebberts<\/a><\/p>\n<h2>Прикрепить шейп к одной стороне<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_size-2_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"560\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Фиксирует одну сторону шейпа на месте, когда вы меняете <f>Size<\/f>.<\/p>\n<p>Примените к <f>Position<\/f> у шейпа:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">stickTo = &quot;left&quot;; \/\/ top, bottom, right or left\nchosenShape = content(&quot;Rectangle 1&quot;).content(&quot;Rectangle Path 1&quot;);\n\nif (stickTo == &quot;top&quot;){\n     x = chosenShape.position[0];\n     y = chosenShape.position[1]+chosenShape.size[1]\/2;\n}\n\nelse if (stickTo == &quot;bottom&quot;){\n     x = chosenShape.position[0];\n     y = chosenShape.position[1]-chosenShape.size[1]\/2;\n}\n\nelse if (stickTo == &quot;right&quot;){\n     x = chosenShape.position[0]-chosenShape.size[0]\/2\n     y = chosenShape.position[1]\n}\n\nelse if (stickTo == &quot;left&quot;){\n     x = chosenShape.position[0]+chosenShape.size[0]\/2;\n     y = chosenShape.position[1]\n}\n\n[x,y]<\/code><\/pre><h2>Риг для катящегося круга и квадрата<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_rolling_rig_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"560\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><h3>Катящийся круг<\/h3>\n<p>Примените к <f>Rotation<\/f> и анимируйте <f>Position<\/f>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">transform.position[0]-(content(&quot;Ellipse 1&quot;).content(&quot;Ellipse Path 1&quot;).size[0]\/2)-transform.position[0]\/2<\/code><\/pre><h3>Катящийся квадрат<\/h3>\n<p>Работает как с шейпами, так и со слоями и композициями.<\/p>\n<p>Примените экспрешн к <f>Position<\/f>. Добавьте <f>Slider Control<\/f> на этот же слой. Анимируйте <f>Rotation<\/f>. Если квадрат катится неправильно, измените значение у <f>Slider Control<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">targetLayer = thisLayer;\nsquareSize = targetLayer.sourceRectAtTime().width;\nsquareDiag = (Math.sqrt(2)*squareSize)\/2\/3.5;\n\ntry{\n    squareOffset = effect(&quot;Slider Control&quot;)(&quot;Slider&quot;);\n}\n\ncatch(err) {\n    squareOffset = 0;\n}\n\n\nrot=transform.rotation;\nscl=transform.scale[0]\/100;\nw=(squareSize\/2)*scl;\nr=(degreesToRadians(rot))*2;\nt=transform.position;\n\n[t[0]+w*rot\/45,t[1]-(Math.abs((squareDiag+squareOffset)*Math.sin(r)))*scl];<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/youtu.be\/sVg8jnajLSk\">На основе экспрешна от Mikey Borup<\/a><\/p>\n<h2>Ступенчатые повороты<\/h2>\n<p>Альтернатива <f>time*n<\/f>. Только вместо плавного вращения создаются ступенчатые движения. Отлично подходит для анимации стрелок часов, шестерёнок и других похожих механизмов.<\/p>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_rotator_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"670\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Примените к <f>Rotation<\/f>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">angle = 15; \/\/ Угол поворота в секунду\nrotateDuration = 10; \/\/ Длительность поворота в кадрах\n\nrotateDurationFr = rotateDuration\/(1\/thisComp.frameDuration);\n\nwholeSecond = Math.floor(time);\nstartAngle = wholeSecond * angle;\nease(time, wholeSecond, wholeSecond + rotateDurationFr, startAngle, startAngle + angle)<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/creativecow.net\/forums\/thread\/clock-second-hand-ticking\/\">© Xinlai Ni<\/a><\/p>\n<h2>Продвинутые ступенчатые повороты<\/h2>\n<p>Практически то же самое, что и выше. Но с чуть большим количеством настроек.<\/p>\n<p>Примените к <f>Rotation<\/f>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">angle = 15; \/\/ Угол поворота\nrotateDuration = 6; \/\/ Длительность поворота в кадрах\ntimeStop = 5; \/\/ Длительность остановки между поворотами\noffset = 0; \/\/ Сдвиг начального положения в кадрах\n\nfr = timeToFrames(time)+offset;\n\ncycle = timeStop+rotateDuration;\nn = Math.floor(fr\/cycle);\ncur_phase = fr-n*cycle;\n\nif((cur_phase)&gt;timeStop){\nangle*n+(cur_phase-timeStop)*angle\/rotateDuration;\n}\nelse{\nangle*n;\n}<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/aexpressions.ru\/expressions\/circular\/analogue-clock\/\">© aexpressions.ru<\/a><\/p>\n<h2>Постоянный масштаб при скейле<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_maintain-scale_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"670\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Когда вы привязываете один объект к другому и масштабируете родительский, оба слоя увеличиваются. Этот экспрешн не позволяет дочернему слою менять масштаб и только перемещает его по позиции.<\/p>\n<p>Примените к <f>Scale<\/f> у слоя, который должен сохранять постоянный масштаб:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">s = [];\nps = parent.transform.scale.value;\nfor (i = 0; i &lt; ps.length; i++){\ns[i] = value[i]*100\/ps[i];\n}\ns<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1a3ArTUHAJwVi-ObZofvz6IfrKbSGSENlaTIRTs8pAJU\/edit?pageId=116871612094468624414#gid=0\">© JR Canest<\/a><\/p>\n<h2>Переключатель по чекбоксу<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_switcher_01_@loop.mp4#t=0.001\" width=\"1020\" height=\"490\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Меняет одно значение параметра на другое по нажатию на чекбокс.<\/p>\n<p>Добавьте эффект <f>Checkbox Control<\/f> на слой с экспрешном. Примените экспрешн к любому параметру:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">if (effect(&quot;Checkbox Control&quot;)(1) == 0) 0 else 100<\/code><\/pre><h2>Луп для шейпов<\/h2>\n<p>Обычный <f>loopOut()<\/f> не работает с шейпами, но зато работает этот экспрешн.<\/p>\n<p>Примените к <f>Path<\/f> у шейпа:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">try{\npingPong = false; \/\/ Поставьте true, если нужен pingPong\n\ntimeStart = thisProperty.key(1).time;\nduration = thisProperty.key(thisProperty.numKeys).time-timeStart;\nquant=Math.floor((time-timeStart)\/duration);\n\nif(quant&lt;0) quant = 0\n\nif(quant%2 == 1 &amp;&amp; pingPong == true){\nt = 2*timeStart+ (quant+1)*duration - time;\n}\n\nelse{\nt = time-quant*duration;\n}\n}\ncatch(err){\nt = time;\n}\nthisProperty.valueAtTime(t)<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/aexpressions.ru\/expressions\/loop\/loopout-path-ping-pong\/\">© aexpressions.ru<\/a><\/p>\n<h2>Range Mapper<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_range-mapper_01_@loop.mp4#t=0.001\" width=\"1150\" height=\"560\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Преобразует значения из одного диапазона в другой.<\/p>\n<p>Добавьте <f> Slider Control<\/f> на слой. Примените экспрешн к нужному параметру:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">input = effect(&quot;Slider Control&quot;)(&quot;Slider&quot;);\n\ninputLow = 0;\ninputHigh = 100;\noutputLow = 466;\noutputHigh = 618;\n\nlinear(input,inputLow,inputHigh,outputLow,outputHigh)<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/creativecow.net\/forums\/thread\/range-mapping-expression\/\">© Dan Ebberts<\/a><\/p>\n<h2>Обводка независимая от скейла<\/h2>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp_stroke-scale_01_@loop.mp4#t=0.001\" width=\"1280\" height=\"670\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Сохраняет постоянную обводку у шейпов при изменении масштаба.<\/p>\n<p>Примените к <f>Stroke Width<\/f>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">value \/ length(toComp([0,0]), toComp([0.7071,0.7071])) || 0.001;<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/battleaxe.tumblr.com\/post\/101945073972\/maintain-stroke-weight-expression\">© Adam Plouff<\/a><\/p>\n<h2>Счётчики<\/h2>\n<p>Подборка из 6 экспрешнов для создания различных счётчиков. По сути, все эти счётчики представляют собой текст, привязанный к <f>Slider Control<\/f>, который можно анимировать при помощи ключей.<\/p>\n<h3>1. Обычный счётчик<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_simple_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Счётчик с фиксированным количеством десятичных знаков.<\/p>\n<p>Добавьте эффект <f>Slider Control<\/f> к текстовому слою. Примените экспрешн к <f>Source Text<\/f>. Количество знаков после запятой обозначается параметром <f>toFixed(2)<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">parseFloat(effect(&quot;Slider Control&quot;)(&quot;Slider&quot;)).toFixed(2)<\/code><\/pre><h3>2. Счётчик с запятыми вместо точек<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_comma_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Заменяет точку для десятичных знаков на запятую. Если нужен похожий сетап с большим количеством настроек, то он <a href=\"http:\/\/keyframed.tv\/how-to-format-a-slider-control-value-as-money-in-after-effects\/\">вот здесь<\/a>.<\/p>\n<p>Добавьте <f>Slider Control<\/f> на текстовый слой и примените экспрешн к <f>Source Text<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">c = parseFloat(effect(&quot;Slider Control&quot;)(&quot;Slider&quot;)).toFixed(2);\nc.toString().replace(&quot;.&quot;, &quot;,&quot;)<\/code><\/pre><h3>3. Счётчик с дополнительными знаками<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_symbols_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Добавляет любые дополнительные символы в начале или конце счётчика.<\/p>\n<p>Добавьте <f>Slider Control<\/f> на текстовый слой и примените экспрешн к <f>Source Text<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">&quot;+&quot;+parseFloat(effect(&quot;Slider Control&quot;)(&quot;Slider&quot;)).toFixed(2)+&quot;%&quot;<\/code><\/pre><h3>4. Счётчик с нулями в начале<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_zeros_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Превращает числа из <f>1 <\/f> в <f>001<\/f>.<\/p>\n<p>Добавьте <f>Slider Control<\/f> на текстовый слой и примените экспрешн к <f>Source Text<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">zerosAmount = 3;\n\nvar slider = effect(&quot;Slider Control&quot;)(&quot;Slider&quot;);\n\nfunction padStart(string, targetLength, character) {\n\tstring = (string instanceof String) ? string : string.toString();\n\ttargetLength = targetLength &gt;&gt; 0;\n\tcharacter = character || ' ';\n\n\twhile (string.length &lt; targetLength) {\n\t\tstring = character + string;\n\t}\n\nreturn string;\n};\n\nif (slider &gt;= 0) {\nzeroAmount = zerosAmount + 1;\npaddedString = padStart(parseFloat(slider.value).toFixed(0), zerosAmount, '0');\n}\n\nelse {\npaddedString = '-0'+padStart(parseFloat(slider.value).toFixed(0)*-1, zerosAmount, '0');\n}\n\npaddedString;<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/community.adobe.com\/t5\/after-effects\/how-to-create-a-counting-number-but-starting-with-zeros\/td-p\/10632356\">На основе экспрешна от Tomas Sinkunas<\/a><\/p>\n<h3>5. Счётчик с разрядами<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_grouping_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Группирует цифры по разрядам, превращая <f>30000<\/f> в <f>30 000<\/f>.<\/p>\n<p>Добавьте <f>Slider Control<\/f> на текстовый слой и примените экспрешн к <f>Source Text<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">num = parseFloat(effect(&quot;Slider Control&quot;)(&quot;Slider&quot;)).toFixed(0);\nstr = isNaN(num) ? &quot;&quot; : (num * 1 + &quot;&quot;);\nstr.replace(\/(\\d)(?=(\\d\\d\\d)+([^\\d]|$))\/g, '$1 ');<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/creativecow.net\/forums\/thread\/number-expression-with-decimals\/\">© Tomas Bumbulevičius<\/a><\/p>\n<h3>6. Счётчик для больших чисел<\/h3>\n<div class=\"quarter-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-counter_large_01_@loop.mp4#t=0.001\" width=\"700\" height=\"140\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Счётчик, привязанный к <f>Slider Control<\/f>, не идёт дальше 1 000 000. Поэтому если нужны большие числа, приходится использовать эффект <f>Angle Control<\/f>.<\/p>\n<p>Добавьте <f>Angle Control<\/f> на текстовый слой и примените экспрешн к <f>Source Text<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">number = Math.round(effect(&quot;Angle Control&quot;)(&quot;Angle&quot;)\/360);\n\nn=&quot;&quot; + number;\ns=&quot;&quot;;\nfor(i=0, l=n.length; i&amp;#60;l;  i++){\n    if(s &amp;&amp; s!=&quot;-&quot; &amp;&amp; (l-i)%3 ==0)\n                s+=&quot; &quot;; \n        s += n[i];\n}\ns;<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/chunkmotion.design\/resources\/after-effects-expressions\/\">© Chunk Motion<\/a><\/p>\n<h2>Мини-экспрешны<\/h2>\n<p>И, под конец, 4 полезных мини-выражения, которые часто пригождаются.<\/p>\n<h3>1. Привязка к слою выше или ниже<\/h3>\n<div class=\"half-video\"><div class=\"e2-text-video\">\n<video src=\"https:\/\/balyberdin.com\/hey\/video\/en_exp-index-1_01_@loop.mp4#t=0.001\" width=\"900\" height=\"560\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<\/div><p>Это не полноценный экспрешн, а только его часть. Вместо того, чтобы привязывать один слой к другому напрямую, иногда удобнее динамически привязывать к слою, который стоит выше или ниже слоя с экспрешном.<\/p>\n<p>В примере, я привязываю позицию у слоя с шейпом к любому слою, который стоит выше на таймлайне. Если нужна привязка к слою ниже, то используйте <f>index+1<\/f>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">thisComp.layer(index-1)<\/code><\/pre><h3>2. Постоянно ускоряющиеся повороты<\/h3>\n<p>Добавьте это к <f>Rotation<\/f>, чтобы создать вращение, которое становится быстрее с каждой секундой:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">time*time*time*time<\/code><\/pre><h3>3. Ключи для time*n<\/h3>\n<p>Добавляет постоянное движение, но оставляет возможность ставить ключи.<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">value+time*11<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/youtu.be\/rsW4fwscwKI?t=193\">© Ben Marriott<\/a><\/p>\n<h3>4. Привязка градиента к слою<\/h3>\n<p>Чтобы <f>Gradient Ramp<\/f> не слетал при перемещении слоя, добавьте на <f>Start<\/f> и <f>End<\/f>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"javascript\">toComp(value)<\/code><\/pre><p class=\"foot\"><a href=\"https:\/\/aexpressions.ru\/expressions\/misc\/link-ramp-to-layer\/\">© aeexpressions.ru<\/a><\/p>\n<p>Это все выражения, которыми я пользуюсь на постоянной основе. Всего получилось 23.<br \/>\n<a href=\"https:\/\/balyberdin.gumroad.com\/l\/ae-expressions\">📁 Проект со всеми экспрешнами<\/a>, который вы можете скачать бесплатно.<\/p>\n",
            "date_published": "2021-02-09T22:22:30+03:00",
            "date_modified": "2025-06-08T21:03:44+03:00",
            "tags": [
                "after effects",
                "expressions"
            ],
            "image": "https:\/\/balyberdin.com\/hey\/pictures\/exp-cover-timeline.jpg",
            "_date_published_rfc2822": "Tue, 09 Feb 2021 22:22:30 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "34",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/balyberdin.com\/hey\/pictures\/exp-cover-timeline.jpg"
                ]
            }
        },
        {
            "id": "17",
            "url": "https:\/\/balyberdin.com\/hey\/all\/ae-render-basic\/",
            "title": "Рендер в After Effects",
            "content_html": "<p>Расскажу самые базовые вещи о рендере в Adobe After Effects. Будет как небольшая подсказка для новичков.<\/p>\n<p>Рендерить можно двумя способами. Через Render Queue внутри After Effects и через стороннюю программу Adobe Media Encoder.<\/p>\n<p>Для слабых компьютеров или тяжёлых проектов советую Render Queue. А для всего остального — Media Encoder.<\/p>\n<p>Две заметки перед началом<br \/>\n1) Если АЕ 2017 года или ниже — скачайте <a href=\"https:\/\/support.apple.com\/downloads\/quicktime\">кодеки Quicktime<\/a>. На macOS не нужно.<br \/>\n2) Если рендерите через Media Encoder проверьте, чтобы он был того же года, что и After Effects.<\/p>\n<h2>Рендерим видео с оптимальным соотношением веса и качества через Media Encoder<\/h2>\n<p>Сейчас самый распространённый стандарт сжатия видео — H.264. Мало весит, не убивает качество и везде поддерживается.<\/p>\n<p>— Открываем композицию, которую хотим отрендерить.<br \/>\n— Заходим в Composition → Add to Adobe Media Encoder Queue. Немного ждём, открывается Media Encoder.<br \/>\n— Нажимаем на стрелочку в Format и выбираем H.264.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_H264_01.png\" width=\"729\" height=\"353\" alt=\"Media Encoder Format H.264\" \/>\n<\/div>\n<p>— В Preset выбираем Match Source High Bitrate.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_H264_02.png\" width=\"690\" height=\"396\" alt=\"Preset Match Source High Bitrate\" \/>\n<\/div>\n<p>— Output File выбираем куда сохранить. Нажимаем Enter или на зелёный треугольничек справа. Рендер пошёл.<\/p>\n<p>В итоге, минутное видео больше не будет весит несколько гигабайт, а останется где-то в пределах сотни мегабайт.<\/p>\n<h2>Рендерим видео с оптимальным соотношением веса и качества через Render Queue<\/h2>\n<p>— Открываем композицию, которую хотим отрендерить.<br \/>\n— Заходим в Composition → Add to Render Queue.<br \/>\n— Нажимаем на синий текст рядом с Output Module.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Module.png\" width=\"598\" height=\"268\" alt=\"After Effects Render Queue Output Module\" \/>\n<\/div>\n<p>— В Format выбираем Quicktime.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AE2017_H264_Render_Queue_02.png\" width=\"577\" height=\"129\" alt=\"After Effects Render Queue Format\" \/>\n<\/div>\n<p>— Нажимаем Format Options.<br \/>\n— В Video Codec выбираем H.264.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AE2017_H264_Render_Queue_03.png\" width=\"451\" height=\"202\" alt=\"After Effects Render Queue H.264\" \/>\n<div class=\"e2-text-caption\">Если АЕ 2018 или старше, то H.264 в списке не будет. Выбирайте Animation.<br \/>\nФайл получится тяжеловатый, но легче, чем совсем без сжатия. Поэтому для последних версий АЕ лучше использовать Media Encoder, где есть H.264.<\/div>\n<\/div>\n<p>— Кликаем ОК в двух окошках.<br \/>\n— Справа от Output To нажимаем на синий текст и выбираем куда сохранить.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Place.png\" width=\"598\" height=\"268\" alt=\"After Effects Render Queue Output\" \/>\n<\/div>\n<p>— Нажимаем Enter или кнопку «Render» справа.<br \/>\nГотово! Рендер начался.<\/p>\n<h2>Рендерим видео на альфа-канале через Media Encoder<\/h2>\n<p>А сейчас рассмотрим как отрендерить анимацию с прозрачным фоном. Это уже чуть-чуть посложнее.<\/p>\n<p>— Открываем нужную композицию.<br \/>\n— Composition → Add To Adobe Media Encoder Queue<br \/>\n— В Format выбираем Quicktime<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_01.png\" width=\"833\" height=\"655\" alt=\"Media Encoder Format Quicktime\" \/>\n<\/div>\n<p>— В Preset ничего не выбираем, просто нажимаем на синий текст<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_02.png\" width=\"761\" height=\"191\" alt=\"Media Encoder Preset\" \/>\n<\/div>\n<p>— Теперь выбираем Video Codec в зависимости от версии AE:<br \/>\nAE 2017 и ниже — PNG.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_03.png\" width=\"452\" height=\"143\" alt=\"Media Encoder QuickTime PNG\" \/>\n<\/div>\n<p>АЕ 2018 — Animation.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_QTAnimation.png\" width=\"449\" height=\"142\" alt=\"Media Encoder QuickTime Animation\" \/>\n<\/div>\n<p>AE 2019 или любая версия на macOS — ProRes 4444.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_ProRes4444.png\" width=\"445\" height=\"145\" alt=\"ProRes 4444 Media Encoder\" \/>\n<\/div>\n<p>— Нажимаем кнопку Match Source.<br \/>\n— Проматываем чуть-чуть вниз, в Depth выбираем параметр у которого написано +alpha или 32 bit.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_Depth.png\" width=\"377\" height=\"102\" alt=\"Media Encoder Alpha Depth\" \/>\n<\/div>\n<p>— Нажимаем ОК, в Output выбираем место куда сохранится файл и запускаем рендер.<\/p>\n<p>Всё, теперь ролик отрендерится с прозрачностью, будет потяжелее. Зато на фон можно подставить всё, что угодно.<\/p>\n<h2>Рендерим видео на альфа-канале через Render Queue<\/h2>\n<p>— Открываем нужную композицию.<br \/>\n— Composition → Add To Adobe Media Encoder Queue<br \/>\n— Кликаем на синий текст рядом с Output Module.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Module.png\" width=\"598\" height=\"268\" alt=\"\" \/>\n<\/div>\n<p>— В Format выбираем Quicktime.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AE2017_H264_Render_Queue_02.png\" width=\"577\" height=\"129\" alt=\"After Effects Render Queue Format Quicktime\" \/>\n<\/div>\n<p>— Нажимаем «Format Options».<\/p>\n<p>— Теперь выбираем Video Codec в зависимости от версии AE:<br \/>\nAE 2017 и ниже — PNG.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_PNG.png\" width=\"463\" height=\"153\" alt=\"After Effects Render Queue Alpha PNG\" \/>\n<\/div>\n<p>АЕ 2018 — Animation.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Animation.png\" width=\"463\" height=\"153\" alt=\"After Effects Render Queue Alpha Animation\" \/>\n<\/div>\n<p>AE 2019 или любая версия на macOS — ProRes 4444.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_4444.png\" width=\"463\" height=\"153\" alt=\"After Effects Render Queue Alpha ProRes\" \/>\n<\/div>\n<p>— Нажимаем ОК.<br \/>\n— В Channels выбираем RGB+Alpha.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Video_Output_Alpha.png\" width=\"543\" height=\"127\" alt=\"After Effects Render Queue RGB Alpha\" \/>\n<\/div>\n<p>— Нажимаем ОК.<br \/>\n— В Output To выбираем куда сохранить файл.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Place.png\" width=\"598\" height=\"268\" alt=\"After Effects Render Queue Output\" \/>\n<\/div>\n<p>— Нажимаем Enter или кнопку «Render».<br \/>\nЕсть!<\/p>\n<h2>Создаём шаблоны для рендера в Media Encoder<\/h2>\n<p>Как в Media Encoder, так и в Render Queue можно создавать шаблоны на все случаи жизни: для H.264, альфа-канала, MP3, PNG-секвенций. Один раз настраиваете рендер, сохраняете в темплейт и в нужный момент переключаетесь между ними.<\/p>\n<p>— Чтобы сохранить шаблон достаточно настроить рендер под себя и нажать на эту кнопку<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_07.png\" width=\"456\" height=\"174\" alt=\"Save Preset Adobe Media Encoder\" \/>\n<\/div>\n<p>— После этого, созданный темплейт будет доступен в выборе пресетов<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_Template_01.png\" width=\"713\" height=\"261\" alt=\"Custom Template Adobe Media Encoder\" \/>\n<\/div>\n<h2>Создаём шаблоны для рендера в Render Queue<\/h2>\n<p>— Настраиваем рендер, нажимаем справа от Output Module на стрелочку и выбираем Make Template<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_01.png\" width=\"624\" height=\"316\" alt=\"Make template After Effects Render Queue\" \/>\n<\/div>\n<p>— Задаём имя шаблону — готово, можно рендерить<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Template_01.png\" width=\"663\" height=\"237\" alt=\"Custom Template Render Queue\" \/>\n<\/div>\n<p>— Чтобы сделать шаблон рендером по умолчанию просто выбираем его в Movie Default<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Template_02.png\" width=\"669\" height=\"155\" alt=\"Movie Default After Effects Template\" \/>\n<\/div>\n<h2>Рендерим один кадр из видео<\/h2>\n<p>Сохранить текущий кадр можно двумя способами. Одной кнопкой в плагине <a href=\"https:\/\/www.videocopilot.net\/blog\/2016\/11\/fx-console-v1-0-1-new-enhancements-and-fixes\/\">FX Console<\/a>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_FXConsole_VC.png\" width=\"507\" height=\"92\" alt=\"FX Console Interface\" \/>\n<\/div>\n<p>Или штатными средствами After Effects. Единственное, по умолчанию картинка сохраняется в PSD, но это быстро исправить.<\/p>\n<p>— Создаём любую композицию<br \/>\n— Нажимаем Composition → Add To Render Queue<br \/>\n— Справа от Output Module нажимаем на маленькую стрелочку и выбираем Make Template<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_01.png\" width=\"624\" height=\"316\" alt=\"Make template After Effects Render Queue\" \/>\n<\/div>\n<p>— В появившемся меню нажимаем Edit<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_02.png\" width=\"677\" height=\"447\" alt=\"Edit Template Render Queue\" \/>\n<\/div>\n<p>— Format ставим PNG Sequence<br \/>\n— Channels — RGB + Alpha<br \/>\n— Нажимаем ОК<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_03.png\" width=\"565\" height=\"399\" alt=\"Format PNG Sequence Render Queue\" \/>\n<\/div>\n<p>— Переименовываем шаблон<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_04.png\" width=\"663\" height=\"92\" alt=\"Settings Name Render Template\" \/>\n<\/div>\n<p>— Ставим его во Frame Default. Нажимаем ОК<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_05.png\" width=\"676\" height=\"448\" alt=\"Frame Default Render Queue\" \/>\n<\/div>\n<p>— Возвращаемся обратно в нашу композицию<br \/>\n— Выбираем Composition → Save Frame As → File и сохраняем кадр куда нужно. Если будет прозрачность, сохранит с прозрачностью.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_06.png\" width=\"525\" height=\"294\" alt=\"Same Frame As After Effects\" \/>\n<\/div>\n<p>Теперь в любом проекте можно нажать Save Frame As или Ctrl+Alt+S и кадр сохранится. Настраивать темплейт снова больше не нужно.<\/p>\n<p>Думаю на этом всё. Надеюсь, что эта заметка поможет вам с рендером!<\/p>\n",
            "date_published": "2018-04-14T20:14:37+03:00",
            "date_modified": "2025-06-08T18:26:46+03:00",
            "tags": [
                "AE",
                "лонгрид",
                "рендер",
                "туториал"
            ],
            "image": "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_H264_01.png",
            "_date_published_rfc2822": "Sat, 14 Apr 2018 20:14:37 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "17",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_H264_01.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_H264_02.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Module.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AE2017_H264_Render_Queue_02.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AE2017_H264_Render_Queue_03.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Output_Place.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_01.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_02.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_PNG_03.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_QTAnimation.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_ProRes4444.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_Depth.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_PNG.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Animation.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_4444.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Video_Output_Alpha.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_07.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_AME_Template_01.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_01.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Template_01.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_RQ_Template_02.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_FXConsole_VC.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_02.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_03.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_04.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_05.png",
                    "https:\/\/balyberdin.com\/hey\/pictures\/render_base_Save_Frame_06.png"
                ]
            }
        },
        {
            "id": "16",
            "url": "https:\/\/balyberdin.com\/hey\/all\/about-fps\/",
            "title": "Разберёмся с кадрами в секунду",
            "content_html": "<p>В этой заметке расскажу откуда появились 24 кадра в секунду, почему в США их 29,97. Зачем играм так много FPS и почему 25 кадр не работает.<\/p>\n<h2>Вступление<\/h2>\n<p>Любая анимация существует благодаря инертности зрения. Если изображения сменяются достаточно быстро, то мозг не видит их по отдельности, а создаёт иллюзию непрерывного движения. Скорость смены изображений должна быть выше 10-12 в секунду, иначе мозг воспринимает картинки по-отдельности. Казалось бы, вот и подходящая для человека кадровая частота — 12 FPS и больше. Но не всё так просто.<\/p>\n<h2>Немые фильмы<\/h2>\n<p>Представьте себе ленту немого фильма, в которой 1&thinsp;500 отдельных изображений. Если мы покажем фильм со скоростью 12 кадров в секунду, то увидим <a href=\"http:\/\/balyberdin.com\/hey\/pictures\/fps_Flicker.gif\">что-то такое<\/a>. Гифку сделал по ссылке, чтобы не раздражала мерцанием.<\/p>\n<p>Движение есть, но мерцание в кадре всё портит. Оно появилось из-за того, что мы должны закрыть проектор, чтобы прокрутить ленту дальше и показать новое изображение. По словам Томаса Эдисона, наше зрение не заметит мерцание, если мы будем прокручивать ленту со скоростью 46 кадров в секунду. Но это не лучший вариант, и вот почему.<\/p>\n<p>Сейчас у нас фильм состоит из 1&thinsp;500 изображений и мы его проигрываем со скоростью 12 кадров в секунду.<br \/>\nПолучается 1&thinsp;500 кадров&thinsp;\/&thinsp;12 кадров в секунду = 125 секунд<br \/>\nЗначит, нам достаточно 1&thinsp;500 кадров, что создать двухминутный фильм.<\/p>\n<p>Со скоростью 46 кадров в секунду наш фильм будет идти всего 32 секунды. То есть, чтобы восстановить хронометраж мы должны создать не 1&thinsp;500 кадров, а 5&thinsp;750 = 125 секунд&thinsp;*&thinsp;46 кадров в секунду. Кинолента будет длиннее в четыре раза, количество кадров больше, а значит отснять, смонтировать и показать фильм выйдет намного дороже.<\/p>\n<p>Легче изменить конструкцию проектора. Поэтому вместо обычного обтюратора поставили трёхлезвийный.<\/p>\n<p><video autoplay loop muted playsinline><source src=\"pictures\/fps_Triple_Bladed_Shutter.mp4\" type=\"video\/mp4\"><\/video><\/p>\n<p>Теперь один кадр показывают три раза и только потом сменяют на новый. Получается частота кадров (хоть и одинаковых) увеличилась. Количество мерцания увеличилось по количеству, но в три раза сократилось по времени. Таким образом инертность зрения стала «съедать» мерцание в кадре.<\/p>\n<p>Мы сменяем кадры со скоростью 16 FPS, но зрителям показываем один и тот же кадр три раза.<br \/>\nИ получаем 48 спроецированных кадра в секунду = 16 кадров * 3 повторения. Прямо как и хотел Эдисон, даже лучше.<\/p>\n<p>Мы взяли 16 FPS, а не 12 или 14, так как 16 — минимальное целое число, которое умножается на 3 и в результате даёт число больше 46.<\/p>\n<p>Вот мы и получили первую кадровую частоту — 16 FPS для немых фильмов. Плюс немых фильмов в том, что мы можем легко увеличить или уменьшить количество кадров в секунду, это повлияет только на скорость воспроизведения. Ручку проектора крутил человек и мог варьировать скорость кадров от 14 до 26 FPS.<\/p>\n<h2>Звук<\/h2>\n<p>Всё сложнее стало со звуком. Теперь нельзя крутить фильм быстрее или медленнее. Нужно соблюдать постоянную кадровую частоту, чтобы скорость, а значит и тембр голоса не изменялся на протяжении фильма. С 16 FPS была проблема, звук не звучал точно, как задумывалось. Нужно было выбрать новую частоту, чтобы она была больше 16 и в итоге давала 48 проецируемых FPS. В итоге, вместо трёхлезвийного обтюратора стали использовать двулезвийный. И утвердили новый фрейм рейт — 24 FPS.<\/p>\n<p><video autoplay loop muted playsinline><source src=\"pictures\/fps_Double_Bladed_Shutter.mp4\" type=\"video\/mp4\"><\/video><\/p>\n<p>24 кадра * 2 повторения = 48 проецируемых кадров в секунду. Всё просто и удобно. 24 нацело делится на 2, 3 и 4. То есть мы знаем, что половина секунды — 12 FPS, треть — 8, а четверть — 6.<\/p>\n<p>Тут вроде становится понятно — мы и сейчас используем 24 FPS. Тогда зачем нам 25, 30 и тем более 29,97?<\/p>\n<h2>Телевизор<\/h2>\n<p>Когда решили транслировать изображение по телевизору возникли новые проблемы. Показывать два раза один и тот же кадр было не вариант, да и технически это было сложновато. Ещё надо передать аналоговый сигнал по радиоволнам. И чем больше кадров, тем больше вес файла — значит канал передачи должен быть шире, а значит и дороже. Поэтому стали передавать кадры по половинкам — полукадрами. Разбиваем изображение на полосы и показываем сначала все нечётные, а потом все чётные. Инертность зрения делает своё дело и мы видим целый кадр.<\/p>\n<p><video autoplay loop muted playsinline poster=\"pictures\/fps_Interlaced_MIB_cover.jpg\"><source src=\"pictures\/fps_Interlaced_MIB.mp4\" type=\"video\/mp4\"><\/video><\/p>\n<p class=\"tiny\">Кадр из людей в чёрном 3<\/p>\n<p class=\"tiny\">В телевизоре происходит то же самое, только намного быстрее.<\/p>\n<p>По-умному, это называется чересстрочная развёртка и обозначается буквой «i», от слова «interlaced». Ролик с чересстрочной развёрткой и разрешением 1920 × 1080 будет называтся 1080i. А такой же ролик с прогрессивной развёрткой — 1080p. Это означает «progressive» или то, что кадры передаются целиком.<\/p>\n<p>Чтобы не было лишних шумов и конструкция телевизора была проще, полукадры решили обновлять с частотой электросети. Для Европы это 50 Гц. Получилось 50 полукадров в секунду или 25 целых кадров в секунду. В США частота электросетей 60 Гц, значит полукадров будет 60, а кадров соответственно 30.<\/p>\n<p>И вот вроде как всё хорошо, но тут появляется цвет.<\/p>\n<h2>Цвет<\/h2>\n<p>Теперь через тот же канал нужно донести больше информации. Мы должны передать чёрно-белое изображение для старых телевизоров, цветное изображение и звук. И сделать это было довольно сложно. Потому что как только мы добавляем в электромагнитный спектр информацию о цвете его частота пересекается со звуком и создаёт помехи. Чтобы чётко разделить цвет и звук решили снизить частоту полукадров на 0,1%.<\/p>\n<blockquote>\n<p>60 полукадров — 0,1% = 59,94 полукадров в секунду<br \/>\n59,94 полукадров в секунду\/2 = 29,97 кадров в секунду<\/p>\n<\/blockquote>\n<p>Система вещания с такой странной кадровой частотой называется NTSC и использовалась в США и ещё парочке стран.<\/p>\n<p>В Европе таких сложностей не было, в качестве стандарта сразу взяли PAL, который был создан, чтобы решить проблемы с цветом. Поэтому как было 25 кадров в секунду, так и осталось.<\/p>\n<h2>>30 FPS<\/h2>\n<p>Зачем же тогда делают фильмы в 60 FPS?<br \/>\nДело в том, что камера размывает любое резкое движение в сторону направления объекта. Величина размытия зависит от расстояния, которое объект прошёл за 1 кадр. И чем больше количество кадров в секунду, тем меньше размытие.<\/p>\n<blockquote>\n<p>1 секунда&thinsp;\/&thinsp;25 фпс&thinsp;=&thinsp;0,04<br \/>\n1 секунда&thinsp;\/&thinsp;60 фпс&thinsp;=&thinsp;0,016<\/p>\n<\/blockquote>\n<p>Это называется моушн-блюр.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/balyberdin.com\/hey\/pictures\/fps_25vs60.png\" width=\"600\" height=\"200\" alt=\"\" \/>\n<\/div>\n<p>Разница между фильмами с 25 FPS и 60 FPS только в плавности движения. Резкие движения в фильме выглядят менее размытыми. За счёт этого картинка кажется более реалистичной. Вот в этом и смысл.<\/p>\n<h2>25 кадр<\/h2>\n<p>Представьте, что мы берём книгу в которой 24 страницы — 23 белые и 1 красная. Если мы пролистнём книгу за одну секунду, то точно заметим, что одна страница другого цвета. Если страниц в книге 25, то ничего не изменится. Страница не станет невидимой и тем более не будет влиять на подсознание, она просто пролистнётся не за 1\/24 секунды, а за 1\/25. Вот и вся разница. Даже если страниц будет больше 100 — глаз поймёт, что одна из них отличается. Абсолютно то же самое с видео.<\/p>\n<p>Наше зрение не ограничивается считыванием какого-то определённого количества кадров в секунду. Различия между кадрами будут заметны и на двухстах, и на пятистах кадрах в секунду.<\/p>\n<h2>Слоумоушн и таймлапс<\/h2>\n<p>Слоумоушн это, когда мы снимаем видео с большей частотой кадров, а смотрим с меньшей — снимаем в 120, смотрим в 25.<\/p>\n<p>Снимем на айфон 6 секунд в 120 FPS. Это значит, что за секунду он создаст 120 изображений. За 6 секунд — 720. А смотреть мы их будем в 25 FPS. Это значит, что 720 изображений&thinsp;\/&thinsp;25 FPS мы будем смотреть почти 29 секунд. За это время мы и рассмотрим все детали.<\/p>\n<p>А если мы возьмём высокоскоростную камеру, снимем 1 секунду с фреймрейтом 5&thinsp;000 FPS и посмотрим в 25 FPS.<\/p>\n<blockquote>\n<p>5&thinsp;000&thinsp;*&thinsp;1&thinsp;\/&thinsp;25 = 200 секунд или 3 минуты 20 секунд<\/p>\n<\/blockquote>\n<p>Одну секунду реального времени мы смотрим целых 3 минуты. Можно в деталях рассмотреть выстрел пистолета под водой.<\/p>\n<p>После таких расчётов становится понятно почему Slow Mo Guys не выкладывают свои ролики в 60 FPS. Мы просто увидим меньше деталей.<\/p>\n<blockquote>\n<p>5&thinsp;000&thinsp;*&thinsp;1&thinsp;\/&thinsp;60 = 83 секунды или 1 минута 22 секунды<\/p>\n<\/blockquote>\n<p>Также, есть противоположность для слоумоушна — timelapse. Снимаем видео с меньшей частотой, а проигрываем с большей. Ставим штатив на балкон и делаем одну фотографию в день на протяжении года. Получается, что у нас получилось видео с частотой кадров — 1 кадр в день. За год у нас получилось 365 кадров. Теперь мы включаем скорость 25 FPS. В итоге, получаем 365&thinsp;\/&thinsp;25 = 14,6 секунд в которые уместился целый год.<\/p>\n<h2>Игры<\/h2>\n<p>Почему тогда играм недостаточно 25 FPS? А нужно намного больше: 60 или даже 100 FPS.<\/p>\n<p>Как написано в абзаце про фильмы с 60 FPS — камера всегда снимает с небольшим размытием в движении. Компьютер же создаёт абсолютно чёткие изображения. Из-за этого мозгу сложнее складывать их в непрерывную картинку. И чем больше движения в игре, тем больше чётких кадров нам нужно для корректного восприятия.<\/p>\n<p>Для сапёра нам хватит и 2 FPS. Два раза в секунду компьютер будет обновлять изображение на мониторе и показывать попали мы в бомбу или нет. А для Counter-Strike не хватит и 30. Просто потому, что движения там слишком динамичные.<\/p>\n<p>Конечно, игры научились включать искуственное размытие, но оно похоже только мешает игровому процессу. По крайней мере, я не знаю ни одного человека, который включает моушн-блюр в играх. Да и система лишний раз нагружается.<\/p>\n<p>На восприятие также влияет то, что фильмы мы смотрим с постоянной кадровой частотой. В играх же, в зависимости от происходящего, FPS меняется. Как только FPS резко падает, мозг сразу же замечает это. То же самое было бы и с фильмами, если бы кадров в секунду было то 25, то 60.<\/p>\n<p>FPS для игр важен не только для комфортного восприятия игры. Частота кадров равна частоте обновления физической модели. Это значит, чем больше FPS, тем чаще компьютер проверяет сделали вы выстрел или нет. Иногда эти доли секунды важны.<\/p>\n<p>Похоже, что всё, что хотел рассказать — рассказал. Вот кратко все тезисы этой заметки.<\/p>\n<h2>Итоги<\/h2>\n<p>1) Первый фрейм рейт — 16 FPS<br \/>\n2) Звук увеличил кадровую частоту и сделал её постоянной — 24 FPS<br \/>\n3) Частота электросети определила новую кадровую частоту для телевизоров — 25 FPS и 30 FPS<br \/>\n4) Цвет превратил 30 FPS в 29,97 FPS из-за того, что не дружил со звуком<br \/>\n5) Фильмы в 60 FPS плавнее<br \/>\n6) Слоумоушн — снимаем с бóльшим FPS, смотрим с меньшим. В таймлапсе наоборот<br \/>\n7) Игры генерируют абсолютно чёткие кадры, поэтому нужно больше FPS, чтобы создать плавное движение<br \/>\n8) В фильмах кадры в секунду постоянные, в играх зависят от ситуации<\/p>\n<h2>Источники<\/h2>\n<p><a href=\"https:\/\/vimeo.com\/118533139\">The History of Frame Rate for Film<\/a><br \/>\n<a href=\"https:\/\/youtu.be\/3GJUM6pCpew\">Why is TV 29.97 frames per second?<\/a><br \/>\n<a href=\"http:\/\/nvworld.ru\/files\/old\/docs\/30fps.html\">Почему нам мало 30 fps?<\/a><br \/>\n<a href=\"https:\/\/youtu.be\/71t_MCJ2_XI?t=2m5s\">Why aren’t Slow Mo Guys videos 60fps?<\/a><\/p>\n",
            "date_published": "2018-04-11T12:11:34+03:00",
            "date_modified": "2021-01-30T01:11:28+03:00",
            "tags": [
                "FPS",
                "лонгрид",
                "моушн"
            ],
            "image": "https:\/\/balyberdin.com\/hey\/pictures\/fps_Interlaced_MIB.gif",
            "_date_published_rfc2822": "Wed, 11 Apr 2018 12:11:34 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "16",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [],
                "og_images": [
                    "https:\/\/balyberdin.com\/hey\/pictures\/fps_Interlaced_MIB.gif",
                    "https:\/\/balyberdin.com\/hey\/pictures\/fps_25vs60.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}