ffmpeg - Как мне наложить PNG поверх другого PNG?

2093
Sibbs Gambling

У меня есть PNG Aс альфа-слоем, который я хочу наложить поверх другого PNG B. Как мне это сделать ffmpeg?

Я пытался ffmpeg -i A.png -i B -filter_complex "[0:v][1:v] overlay=0:0" out.png, но я только вижу B.

Вот вывод команды.

> frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A > speed=0.0883x video:2169kB audio:0kB subtitle:0kB other streams:0kB > global headers:0kB muxing overhead: unknown ffmpeg version > N-83044-g2a293ec Copyright (c) 2000-2017 the FFmpeg developers built > with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) configuration: > --prefix=/data/local/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/data/local/ffmpeg_build/include > --extra-ldflags=-L/data/local/ffmpeg_build/lib --bindir=/data/local/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree libavutil 55. 43.100 / 55. 43.100 libavcodec 57. 72.100 / 57. 72.100 libavformat 57. 62.100 / 57. 62.100 libavdevice 57. 2.100 / 57. 2.100 libavfilter 6. 68.100 /  > 6. 68.100 libswscale 4. 3.101 / 4. 3.101 libswresample 2. 4.100 / 2. 4.100 libpostproc 54. 2.100 / 54. 2.100 Input #0, png_pipe, from '/data/output/067_90.png': > Duration: N/A, bitrate: N/A > Stream #0:0: Video: png, rgba(pc), 2560x1440, 25 tbr, 25 tbn, 25 tbc Output #0, image2, to > '/data/output/067_90_down2.png': > Metadata: > encoder : Lavf57.62.100 > Stream #0:0: Video: png, rgba, 1280x720, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc > Metadata: > encoder : Lavc57.72.100 png Stream mapping: Stream #0:0 -> #0:0 (png (native) -> png (native)) Press [q] to stop, [?] for help frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A > speed=0.163x video:134kB audio:0kB subtitle:0kB other streams:0kB > global headers:0kB muxing overhead: unknown 
1
Работает для меня. Покажите полный вывод консоли из вашей команды. LordNeckbeard 7 лет назад 0
@LordNeckbeard Пожалуйста, смотрите вопрос. Спасибо! Sibbs Gambling 7 лет назад 0

2 ответа на вопрос

2
Gyan

Если вы хотите наложить A поверх B, вам необходимо изменить либо порядок ввода файлов, либо порядок наложения.

ffmpeg -i B.png -i A.png -filter_complex "[1]scale=iw/2:-1[b];[0:v][b] overlay" out.png 
Спасибо, но я только что попробовал, все еще безрезультатно. :-( Sibbs Gambling 7 лет назад 0
Можете ли вы добавить `-report` и запустить мою команду? Ссылка на созданный отчет. Gyan 7 лет назад 1
Вот и все - http://s000.tinyupload.com/index.php?file_id=71172992522639780031. В очередной раз благодарим за помощь! Sibbs Gambling 7 лет назад 0
Вы хотите, чтобы 065_0 был сверху 065? Gyan 7 лет назад 0
Вот так! :-) Sibbs Gambling 7 лет назад 0
Предполагая, что альфа-слой не полностью черный, используйте отредактированный cmd. Gyan 7 лет назад 0
Это работает сейчас! Большое спасибо! Не могли бы вы также объяснить `[1] ... [b]` и `overlay`? Можно ли вообще объединить много команд в одну? Sibbs Gambling 7 лет назад 0
Ваше оверлейное изображение в два раза больше базового, поэтому я добавил масштабный фильтр, чтобы уменьшить его. `[1]` - это сокращение от «выбрать наиболее подходящий поток» («[1: v]» - сокращение от «выбрать наиболее подходящий видеопоток» - в этом случае тоже самое), а «[b]» - метка для вывод шкалы, который затем подается на оверлей. Gyan 7 лет назад 2
0
Camille Goudeseune

Укажите кодек и формат, которые поддерживают альфа, например -c:v png -pix_fmt rgba. Чтобы увидеть, какие кодеки у вас есть ffmpeg -codecs. Чтобы увидеть, какие форматы у вас есть ffmpeg -pix_fmts.

Спасибо, но я добавил два варианта, но он все еще не работает. Sibbs Gambling 7 лет назад 0

Похожие вопросы