Zenix-K
Zenix-K

Reputation: 21

How to use blend and concat filter with audio stream?

I tried to combine two video files with concat, blend and amx filter.

I've succeed two video when I used only video stream. after then adding audio streams the code(filter script) Ffmpeg didn't work.

  1. two video crossfade(Good work)

    ffmpeg -y -i "A.mp4" -i "B.mp4" -filter_complex "[0:v]split[v000][v010];[1:v]split[v100][v110];[v000]trim=0:17[v001]; [v010]trim=17:27[v011t];[v011t]setpts=PTS-STARTPTS[v011];[v100]trim=0:10[v101]; [v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111];[v101] [v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1- (if(gte(T,10),1,T/10)))'[outv];[v001][outv][v111] concat=n=3[outv2]" -vcodec libx264 -map [outv2] -t 50 d:\Output\1.mp4

  2. 1 + audio streams

    ffmpeg -y -i "A.mp4" -i "B.mp4" -filter_complex "[0:v]split[v000][v010];[1:v]split[v100][v110];[v000]trim=0:17[v001];[v010]trim=17:27[v011t];[v011t]setpts=PTS-STARTPTS[v011];[v100]trim=0:10[v101];[v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111];[0:a]asplit[a000][a010];[1:a]asplit[a100][a110];[a000]atrim=0:17[a001];[v010]atrim=17:27[a011t];[a011t]asetpts=PTS-STARTPTS[a011];[a100]atrim=0:10[a101];[a110]atrim=10:50[a111t];[a111t]asetpts=PTS-STARTPTS[a111];[v101][v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'[outv];[a101][a011]amix=inputs=2:duration=first:dropout_transition=3[outa];[v001][outv][v111] [a001][outa][a111] concat=n=6:v=1:a=1:unsafe=1 [outv2][outa2]" -vcodec libx264 -acodec aac -map [outv2] -map [outa2] -t 50 d:\Output\1.mp4

the Error message Media type mismatch between the 'Parsed_blend_16' filter output pad 0 (video) and the 'Parsed_concat_18' filter input pad 1 (audio) [AVFilterGraph @ 026d3680] Cannot create the link blend:0 -> concat:1 Error initializing complex filters. Invalid argument

How to fix it?

ps. I think the filter script is too complicated. Could you let me know more easy way how to use crossfade with ffmpeg?

Upvotes: 1

Views: 537

Answers (1)

Zenix-K
Zenix-K

Reputation: 21

Solved If you want to use video and audio streams in a script at once you should write about video stream script after then do audio's.

"[0:v]split[v000][v010];[1:v]split[v100][v110];
[v000]trim=0:17[v001];[v010]trim=17:27[v011t];[v011t]setpts=PTS-STARTPTS[v011];
[v100]trim=0:10[v101];[v110]trim=10:50[v111t];[v111t]setpts=PTS-STARTPTS[v111];
[v101][v011]blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1- 
(if(gte(T,10),1,T/10)))'[outv];
[v001][outv][v111] concat=n=3 [outv2];
[0:a]asplit[a000][a010];[1:a]asplit[a100][a110];[a000]atrim=0:17[a001];
[a010]atrim=17:27[a011t];[a011t]asetpts=PTS-STARTPTS[a011];
[a100]atrim=0:10[a101];[a110]atrim=10:50[a111t];
[a111t]asetpts=PTS-STARTPTS[a111];
[a101][a011]acrossfade=d=10[outa];
[a001][outa][a111] concat=n=3:v=0:a=1:unsafe=1 [outa2]"

Upvotes: 1

Related Questions