FFmpeg портит ширину наложения изображения после добавления его в видео - PullRequest
0 голосов
/ 01 января 2019

Я использую следующую команду для наложения данного изображения на видео:

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[1:v]fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1 \
[ovr1]; \
[0][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"

Команда работает, но приводит к наложению с шириной, отличной от входной overlay.png, она имеетхотя такая же высота.

Вот overlay.png:

overlay.png preview

А вот как это выглядит в видео после наложения FFmpeg:

video screenshot

overlay.png размер составляет 274x79, но в видео это становится примерно 324x79.

У меня естьпроверил этот вопрос ( размер оверлея ffmpeg ), который предлагает использовать scale, я изменил команду на следующее:

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[1:v]scale=274:79 \
fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1 \
[ovr1]; \
[0][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"

Но результаты все те же (большая ширина), и я смог подтвердить, что scale действительно работает, отредактировав его в scale=400:400, чтобы проверить его эффект.

Что вызвало это и как я могу сохранить исходный размер overlay.png после наложенияэто на видео?


Редактировать:

ffmpeg -i Input.mp4 показывает следующее:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2018-12-30T12:38:54.000000Z
    encoder         : HandBrake 1.1.0 2018040700
  Duration: 00:00:17.45, start: 0.000000, bitrate: 1179 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x480 [SAR 32:27 DAR 16:9], 1174 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2018-12-30T12:38:54.000000Z
      handler_name    : VideoHandler

1 Ответ

0 голосов
/ 01 января 2019

Ваше видео имеет разрешение 720x480, но с соотношением сторон 16: 9, в основном это широкоэкранное видео в формате SD NTSC.

Перед наложением изображения вам потребуется сделать его в виде видео с квадратным пикселем, используя масштаб и сетсар.фильтр.

Итак,

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[0:v]scale=2*trunc(iw*sar/2):ih,setsar=1[0v]; \
[1:v]fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1[ovr1]; \
[0v][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...