[FFmpeg-user] Cross fading of videos

Ryan Williams rwilliams at busivid.com
Wed Dec 16 00:47:13 CET 2015


I discovered I could avoid using the 'fifo' filter by providing the same input file multiple times rather than reading from the same input source stream multiple times in the filter graph.

-----Original Message-----
From: ffmpeg-user [mailto:ffmpeg-user-bounces at ffmpeg.org] On Behalf Of Tony Mobily
Sent: Wednesday, 16 December 2015 10:44
To: FFmpeg user questions
Subject: Re: [FFmpeg-user] Cross fading of videos

Hi,

Is that the bug you were getting around when passing the same file name multiple times?

Merc.
ᐧ

On 16 December 2015 at 07:37, Ryan Williams <rwilliams at busivid.com> wrote:

> Please to see you have it working, however the 'fifo' filter stores 
> frames in memory (I believe in an uncompressed format).
> You should do testing with longer videos to ensure you don't run out 
> of resources.
>
> -----Original Message-----
> From: ffmpeg-user [mailto:ffmpeg-user-bounces at ffmpeg.org] On Behalf Of 
> Tony Mobily
> Sent: Tuesday, 15 December 2015 16:43
> To: FFmpeg user questions
> Subject: Re: [FFmpeg-user] Cross fading of videos
>
> Hi Ryan,
>
> Well, now I to know FFMpeg!
> But I have to say, this is what we ended up with. It's simple, it's 
> straightforward, and it just seems to work...
>
>
> /tmp/ffmpeg -i segment2s.mp4 -i segment1s.mp4 -an \ -filter_complex \
> "   [0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[firstclip];
>     [1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip];
>     [0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[fadeoutsrc];
>     [1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc];
>     [fadeinsrc]format=pix_fmts=yuva420p,
>                 fade=t=in:st=0:d=1:alpha=1[fadein];
>     [fadeoutsrc]format=pix_fmts=yuva420p,
>                 fade=t=out:st=0:d=1:alpha=1[fadeout];
>     [fadein]fifo[fadeinfifo];
>     [fadeout]fifo[fadeoutfifo];
>     [fadeoutfifo][fadeinfifo]overlay[crossfade];
>     [firstclip][crossfade][secondclip]concat=n=3[output];
>     [0:a][1:a] acrossfade=d=1 [audio]
> " \
> -map "[output]" -map "[audio]" result.mp4
>
> That was exactly my approach; I was doing my best to make it happen, 
> doing exactly that: get the first video minus the last second, get the 
> second video minus the initial second, get the two versions of the 
> "middle second", and then fade them together. And voila', you have a 
> well faded video. The audio is ridiculosly simple too.
>
> As I was banging my head against the wall making this happen, Guido 
> found this post:
>
>
> http://superuser.com/questions/1001039/what-is-an-efficient-way-to-do-
> a-video-crossfade-with-ffmpeg
>
> All I had to do is fix the syntax a little, add the audio, and voila'!
>
> Just in case you can use it for your project -- free of charge! :D
>
> Thanks for your answer...
>
> Merc.
>
>
> On 11 December 2015 at 15:44, Ryan Williams <ryan at ryanwilliams.id.au>
> wrote:
>
> > Please note that I haven't tested any of the following suggestions.
> > I do however have dissolve with crossfade working a project of mine 
> > and I have based these suggestions off working code.
> >
> > 1) Dissolve (Assuming the resolution of both videos is 1280x720 and 
> > the audio format is identical)
> >
> > Notes:
> > '+9/TB' represents (length of 1st video in seconds - length of 
> > dissolve in
> > seconds)
> > 'ns=43076’ represents (1 second at 44100 Hz sample rate - 1024
> > samples) to work around a bug I reported (which may've been fixed
> already).
> > The reason for including the same files multiple times is a work 
> > around filters which "scrub" (trim, atrim, select etc) thus causing 
> > buffering problems during encoding.
> >
> > Visuals Explained:
> > * Create a 1 second fade in from the start of the 2nd video to be 
> > the transition.
> > * Overlay the transition onto the 1st video so that the end lines up.
> > * Take the remainder of the 2nd video and concatenate it on the end.
> >
> > Audios Explained:
> > * Cossfade the 2nd videos audio with the first with a 1 second 
> > overlap (Allowing for the 1024 sample bug I reported)
> > * Truncate that new audio stream to be the same length as the first 
> > video
> > * Take the remainder of the 2nd videos audio and append it to the end.
> >
> > The reason for making the audio in 2 parts is so that each part can 
> > be resynced with the visuals in the concat filter.
> > If you attempt to conjure the visuals completely separate from the 
> > audio you may get lip sync issues during playback of the 2nd clip.
> >
> > ffmpeg \
> >  -y \
> >  -i "2.mp4" \
> >  -i "1.mp4" \
> >  -i "2.mp4" \
> >  -i "1.mp4" \
> >  -i "2.mp4" \
> >  -i "2.mp4" \
> >  -filter_complex " \
> >    [0:a] anullsink; \
> >    [0:v] trim='duration=1', format='pix_fmts=yuva420p', 
> > fade='alpha=1:d=1:t=in', setpts='PTS-STARTPTS+9/TB' [transition-v]; 
> > \
> >
> >    [1:v][transition-v] overlay='eval=init', setpts='PTS-STARTPTS'
> > [scene-0]; \
> >    [2:v] select='e=gte(t\, 1)', setpts='PTS-STARTPTS', 
> > format='pix_fmts=yuva420p' [scene-1]; \
> >
> >    [3:a][4:a] acrossfade='ns=43076', atrim='duration=10' [track-0]; \
> >    [5:a] atrim='start=1', asetpts='PTS-STARTPTS' [track-1]; \
> >
> >    [scene-0][track-0] [scene-1][track-1] concat='n=2:v=1:a=1'
> > [output-v][output-a] \
> >  " \
> >  -map '[output-a]' \
> >  -strict experimental -acodec aac \
> >  -map '[output-v]' \
> >  -s 1280x720 \
> >  -vcodec mpeg4 \
> >  -pix_fmt +yuvj420p \
> >  -q:v 0 \
> >  "output.mp4"
> >
> >
> > 2) Slicing
> > ffmpeg -y -i 1.mp4 -filter_complex " \
> >   [0:v] trim='start=10.45:end=23.54' [trim-v]; \
> >   [0:a] atrim='start=10.45:end=23.54' [trim-a]; \
> >   [trim-v][trim-a] concat='n=1:v=1:a=1' [output] \ " \ -map '[output]'
> > \ -strict experimental -acodec aac \ -vcodec mpeg4 \ -q:v 0 \
> > output.mp4
> >
> >
> > 3) Overwriting
> > ffmpeg -y -i 1.mp4 -i 2.mp4 -filter_complex " \
> >   [0:v] trim='duration=31.5' [trim-v]; \
> >   [0:a] trim='duration=31.5' [trim-a]; \
> >   [trim-v][trim-a][1:v][1:a] concat='n=2:v=1:a=1' [output] \ " \ 
> > -map '[output]' \ -strict experimental -acodec aac \ -vcodec mpeg4 \ 
> > -q:v 0 \
> > output.mp4
> >
> > -----Original Message-----
> > From: ffmpeg-user [mailto:ffmpeg-user-bounces at ffmpeg.org] On Behalf 
> > Of Tony Mobily
> > Sent: Friday, 11 December 2015 16:45
> > To: ffmpeg-user at ffmpeg.org
> > Subject: [FFmpeg-user] Cross fading of videos
> >
> > Hi,
> >
> > I am new to ffmpeg. I am reading through the documentation -- 
> > although there is a lot to take in!
> > I was wondering if you could give me a couple of hints on how to get 
> > started.
> >
> > 1) Cross-dissolve
> >
> > I have two videos, 1.mp4 and 2.mp4, 10 seconds each. I want to 
> > concatenate those videos, so that the first one has a cross-dissolve 
> > with the second one when they are joined. If the effect goes on for 
> > 1 second, this necessarily means that the resulting video will 
> > necessarily be 19 seconds (since the last second of 1.mp4 will "blend"
> with the first second of 2.mp4.
> > Is this something that can be done with ffmpeg?
> >
> > 2) Slicing
> >
> > I have a 60 second video, and want to get a slice from the second
> > 10.45 to the second 23.54. Is that possible?
> >
> > 2) Overlay
> > I have two videos, 1.mp4 (30 seconds) and 2.mp4 (8.5 seconds). I 
> > want to create a result video where 2.mp4 overwrites the last 8.5 
> > seconds of
> 1.mp4.
> > Is this possible without doing cut/concatenation?
> >
> > Thank you in advance -- and I apologise if I asked silly questions!
> >
> > Merc.
> > ᐧ
> > _______________________________________________
> > ffmpeg-user mailing list
> > ffmpeg-user at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-user
> >
> > _______________________________________________
> > ffmpeg-user mailing list
> > ffmpeg-user at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-user
> >
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user at ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-user



More information about the ffmpeg-user mailing list