Объединить два видео с прозрачностью в ffmpeg

6336
tiimowad

У меня есть два видео, объединенные в один файл с помощью команды ниже. К сожалению, второе видео охватывает первое видео, и оно не видно. Как сделать второе видео прозрачным (например, 50%)?

ffmpeg -i in1.mp4 -i in2.mp4 -filter_complex "nullsrc=size=480x360 [base]; [0:v] setpts=PTS-STARTPTS, scale=480x360 [top]; [1:v] setpts=PTS-STARTPTS, scale=480x360 [bottom]; [base][top] overlay=shortest=1 [temp]; [temp][bottom] overlay=shortest=1" -acodec libvo_aacenc -vcodec libx264 out.pm4 
6
Не имеет отношения к вашему вопросу, но `libvo_aacenc` - дерьмовый кодировщик AAC. Вместо этого используйте `-c: aac`. Если `ffmpeg` выдает ошибку, указав, что` aac` является экспериментальным, то обновите ваш `ffmpeg`, потому что` aac` больше не является экспериментальным. LordNeckbeard 8 лет назад 0
Оба входа содержат аудио? Если да, как вы хотите иметь дело с аудио? С вашей командой `ffmpeg` выберет аудио из одного входа. При обращении за помощью к `ffmpeg` вы всегда должны включать полный вывод консоли из вашей команды. LordNeckbeard 8 лет назад 0

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

6
Gyan

Use

ffmpeg \ -i in1.mp4 -i in2.mp4 \ -filter_complex " \ [0:v]setpts=PTS-STARTPTS, scale=480x360[top]; \ [1:v]setpts=PTS-STARTPTS, scale=480x360, \ format=yuva420p,colorchannelmixer=aa=0.5[bottom]; \ [top][bottom]overlay=shortest=1" \ -acodec libvo_aacenc -vcodec libx264 out.mp4 

Set aa to the opacity value needed.

Это почти работает для меня, за исключением того, что основное видео (in1.mp4) перестает показывать видео после завершения in2.mp4, однако звук из in1.mp4 продолжается в течение всего видео, только видео «приостановлено» Titan 7 лет назад 0
Можете ли вы также объяснить `top` и` bottom`, чтобы мой оверлей был выровнен по левому краю, и я бы хотел, чтобы он находился по центру, даже если мне нужно указать количество пикселей, которое необходимо переместить Titan 7 лет назад 0
@Mulvya это работает хорошо, можно повторить самое короткое видео? Janis S. 6 лет назад 0
Если вы знаете, какой вход самый короткий, его цепочка фильтров должна быть `scale = 480x360, loop = -1: 99999: 0, setpts = PTS-STARTPTS`. где 99999 - число, равное или большее, чем число его кадров. Gyan 6 лет назад 0

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