исчезнуть в PNG с прозрачностью в видео MP4

1678
papas-source

Я пытаюсь наложить файл PNG с прозрачностью в видео MP4

исходное видео - 20 секунд, и я хочу наложить прозрачный png с 00:10 до 00:20 исходного видео, а затем добавить 00:10 - 00:14.

 0s 10s 14s 20s video |---------------------------------+--------+-------------------------| png | . . . . . . . . . . . . . . . . +========+-------------------------| | | | start png fade-in _/ | | | | end png fade-in _/ | end of .png overlay _/ 

Я не могу создать эффект png fadein. Я пытался создать прозрачный мов с

ffmpeg -loop 1 -i file.png -frames:v 300 -vf 'fade=in:0:120' \ -pix_fmt rgba -vcodec png output.mov 

и объединение 2 файлов с

../ffmpeg -y -i video.mp4 -i output.mov -filter_complex \ "[0:v][1:v] overlay=170:150:enable='between(t,10,20)'" final.mp4 

но финальное видео отображает mov в мгновение ока, не исчезая.

Есть что-то, чего мне не хватает?

Заранее спасибо,

1

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

3
Rajib

You don't need to create the overlay mov as a separate step.

First create the overlay like a movie in this way:

-loop 1 -i watermark.png

Then use a fade filter to fade in for 4 seconds (that is 100 frames):

fade=in:0:100

And then delay it by 10 seconds to start later in this way:

setpts=PTS-STARTPTS+10/TB

Your command then becomes:

ffmpeg -i video.mp4 -loop 1 -i watermark.png -filter_complex \ "[1:v]fade=in:0:100[v1]; [0:v]setpts=PTS-STARTPTS[v0]; \ [v1]setpts=PTS-STARTPTS+10/TB[v3];[v0][v3]overlay=eof_action=pass[out1]" \ -map [out1] <other parameters> overlaidoutput.mp4 

The overlay will continue to the end. And of course you can use many fine-tuning parameters within the "other parameters" section.

NOTE: I used 100 frames for 4 seconds because I used PAL 25 fps. You can change that to 120 frames if you work in 30 fps.


If you need to end the overlay at a specific time point, you can also use the enable parameter:

ffmpeg -i video.mp4 -loop 1 -i watermark.png -filter_complex \ "[1:v]fade=in:0:100[v1]; [0:v]setpts=PTS-STARTPTS[v0]; \ [v1]setpts=PTS-STARTPTS+10/TB[v3]; \ [v0][v3]overlay=enable='between(t,10,12)':eof_action=pass[out1]" \ -map [out1] <other parameters> overlaidoutput.mp4 

This ends the overlay at 12 seconds. Make sure you are using ffmpeg ver 2 or above.

Кто-нибудь знает, почему звук входного фильма теряется на выходе? fiveDust 8 лет назад 0
Похоже, когда я не использую проход eof_action, у него есть работающий звук, но кодирование будет выполняться в бесконечном цикле. Есть идеи? fiveDust 8 лет назад 0

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