В приведенном ниже коде я добавляю различные фильтры для каждого изображения.

Чтобы проиллюстрировать проблему, я удалил фильтр drawbox из [2:v] .

Вот видео из кода ниже: http://128.199.50.223/videos/super_user_test_10_temp.mp4

Вы заметите, что первый переход срезается на черный, прежде чем появится следующее изображение. Затем второй переход (с изображения 2 к изображению 3) перекрещивается. Однако, если я добавлю фильтр drawbox обратно в [2:v] он будет обрезан до черного цвета и исчезнет второй переход точно так же, как и первый.

Итак, мой вопрос состоит из двух частей:

  1. Почему коробка передач ломает перекрестное затухание и приводит к порезу черного цвета до появления затухания?
  2. Как я могу получить полупрозрачную рамку за текстом, сохраняя эффект перехода, который виден во втором переходе?

Вот код:

ffmpeg \
-i images/25_test/31630738_0.jpg \
-i images/25_test/31630738_4.jpg \
-i images/25_test/31630738_6.jpg \
-i images/25_test/31630738_8.jpg \
-filter_complex \
"[0:v]format=yuva420p, \
    scale=iw*10:ih*10, \
    zoompan=z='min(zoom+0.0015,1.5)':d=500:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480, \
    drawbox=y=0:color=black@0.6:width=iw:height=48:t=max, \
    drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Front':fontcolor=white:fontsize=24:x=20:y=16, \
    fifo \
 [zoom_0]; \
 [1:v]format=yuva420p, \
    scale=iw*10:ih*10, \
    zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480, \
    drawbox=y=0:color=black@0.6:width=iw:height=48:t=max, \
    drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Kitchen':fontcolor=white:fontsize=24:x=20:y=16, \
    fade=t=in:st=0:d=1:alpha=1, \
    setpts=PTS+5/TB, \
    fifo \
 [zoom_1]; \
 [2:v]format=yuva420p, \
    scale=iw*10:ih*10, \
    zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480, \
    drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Entrance':fontcolor=white:fontsize=24:x=20:y=16, \
    fade=t=in:st=0:d=1:alpha=1, \
    setpts=PTS+10/TB, \
    fifo \
 [zoom_2]; \
 [3:v]format=yuva420p, \
    scale=iw*10:ih*10, \
    zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=640x480, \
    drawbox=y=0:color=black@0.6:width=iw:height=48:t=max, \
    drawtext='fontfile=fonts/OpenSans-Bold.ttf':text='Pool':fontcolor=white:fontsize=24:x=20:y=16, \
    fade=t=in:st=0:d=1:alpha=1, \
    setpts=PTS+15/TB, \
    fifo \
 [zoom_3]; \
 [zoom_0][zoom_1]overlay=0:0:enable='between(t,5,15)'[overlay_0_1]; \
 [overlay_0_1][zoom_2]overlay=0:0:enable='between(t,10,20)'[overlay_1_2]; \
 [overlay_1_2][zoom_3]overlay=0:0:enable='between(t,15,25)' \
" videos/out.mp4

Ниже приведена упрощенная версия, которая все еще показывает проблему. Чтобы проверить код, введите любые изображения 640x480. Вы увидите разрез, затем исчезните. Затем удалите фильтры drawbox и вы увидите перекрестное затухание, как оно должно появиться.

ffmpeg \
-loop 1 -t 10 -i images/25_test/31630738_0.jpg \
-loop 1 -t 10 -i images/25_test/31630738_4.jpg \
-filter_complex \
"[0:v]format=yuva420p, \
    drawbox=y=0:color=black@0.6:width=iw:height=48:t=max \
 [zoom_0]; \
 [1:v]format=yuva420p, \
    drawbox=y=0:color=black@0.6:width=iw:height=48:t=max, \
    fade=t=in:st=0:d=1:alpha=1, \
    setpts=PTS+5/TB \
 [zoom_1]; \
 [zoom_0][zoom_1]overlay=0:0:enable='between(t,5,15)' \
" out.mp4

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо!

1 ответ1

1

Ваша команда в порядке как есть. В фильтре drawtext была ошибка, из-за которой нельзя рисовать текст на (полупрозрачной) поверхности. Ну, вы могли бы, но альфа-плоскость стала непрозрачной. Эта ошибка была исправлена в сентябре 2016 года.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .