[FFmpeg-user] Can't get acrossfade to work properly

Jim Worrall coniophora at gmail.com
Sat Sep 26 15:58:48 CEST 2015


I guess I’m just talking to myself here, but thought I would close this thread with a report of how I solved the problem.  After trying hundreds of things, I found the solution in a very old post by Carl Eugen, replying to someone who had buffer queue overflows for a completely different reason.  He said “Please try fifo”.  Putting that at the end of the first filter chain of each video stream did the trick.

For the benefit of any others searching for how to do this and having similar problems, here is the complete working command with all the bells and whistles, and a brief explanation.

ffmpeg -i t1.mov -i t2.mov -i t3.mov -f lavfi -i color=black:size=720x540:duration=26.09:rate=23.976024 -filter_complex "\
[0:v] yadif, fade=t=out:st=8:d=2:alpha=1, setpts=PTS-STARTPTS, scale=720x540, fifo [vid0]; \
[1:v] yadif, fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(8/TB), fade=t=out:st=16:d=2:alpha=1, scale=720x540, fifo [vid1]; \
[2:v] yadif, fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(16/TB), scale=720x540, fifo [vid2]; \
[3:v][vid0] overlay [ovr1]; \
[ovr1][vid1] overlay [ovr2]; \
[ovr2][vid2] overlay, fade=t=in:d=2, fade=t=out:st=24.09:d=2 [outv]; \
[0:a][1:a] acrossfade=d=2 [acf1]; \
[acf1][2:a] acrossfade=d=2, afade=t=in:d=2, afade=t=out:st=24.09:d=2 [outa]" \
-map '[outv]' -c:v libx264 -map '[outa]' -c:a libfdk_aac -b:a 256K -y out.mp4

Explanation:
My clips are 10.04, 10.04, and 10.01 sec.  Because of two, 2-sec crossfades, output duration is 26.09.
-f lavfi color=black - gives you a black background for the alpha overlays.  Set its parameters to match what we want for the video.  I don’t know why this is necessary but everything goes to hell without it.
yadif - deinterlaces so you don't get the horizontal lines during action or fades.  My clips are interlaced bottom frame first.
Each video stream gets an alpha fade where it will overlap with another.  Its presentation timestamp gets adjusted to start 2 sec before end of the previous one (0 for first one).
scale=720x540 - my clips come in with 720x480, display aspect ratio of 4x3, and weird SAR.  This changes everything so SAR is 1:1 and DAR stays 4:3.
fifo - this is needed to avoid buffer queue overflows.  It holds packets or whatever until they are requested.
overlay - puts video streams into a single stream.
acrossfade - concatenates 2 audio streams, overlapping and crossfading them by 'duration' number of seconds.
After video and audio streams are combined with overlay and acrossfade, respectively, they are faded in and out with fade and afade for final output.


> On 2015 Sep 20, at 8:43 AM, Jim Worrall <coniophora at gmail.com> wrote:
> 
> I simplified the commands to highlight the problem and increase the chance of getting help here. With my limited knowledge, it seems that the acrossfade filter interferes with video.
> 
> Here is a command for two 10-second clips, cross-fading video and audio between for two seconds.  No error or warning.  The video works fine without acrossfade, but the stream from 0:v freezes during transition with the acrossfade filter.
> 
> ffmpeg -i t1.mov -i t2.mov -f lavfi -i color=black -filter_complex \
> "[0:v] fade=t=out:st=8.04:d=2:alpha=1, setpts=PTS-STARTPTS [v0]; \
> [1:v] fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(8/TB) [v1]; \
> [2:v] scale=720x480, trim=duration=18.09 [ovr0]; \
> [ovr0][v0] overlay [ovr1]; \
> [ovr1][v1] overlay [outv]; \
> [0:a][1:a] acrossfade=d=2 [outa]" \
> -map [outv] -c:v libx264 -preset ultrafast -map [outa] -c:a libfdk_aac -b:a 256K -y out.mp4
> 
> And here is the simplified command with three clips with the ouput.  There are buffer queue overflows, and the output is messed up in many ways.  Again, without acrossfade, the video comes out as expected, with no buffer queue overflows, 2-second crossfades between the clips, and no freezes.
> 
> ffmpeg -i t1.mov -i t2.mov -i t3.mov -f lavfi -i color=black -filter_complex "\
> [0:v] fade=t=out:st= 8:d=2:alpha=1, setpts=PTS-STARTPTS [vid0]; \
> [1:v] fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(8/TB), fade=t=out:st=16:d=2:alpha=1 [vid1]; \
> [2:v] fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(16/TB)  [vid2]; \
> [3:v] scale=720x480, trim=duration=26.08[ovr0]; \
> [ovr0][vid0] overlay [ovr1]; \
> [ovr1][vid1] overlay [ovr2]; \
> [ovr2][vid2] overlay [outv]; \
> [0:a][1:a] acrossfade=d=2 [acf1]; \
> [acf1][2:a] acrossfade=d=2 [outa]" \
> -map '[outv]' -c:v libx264 -preset ultrafast -map '[outa]' -c:a libfdk_aac -b:a 256K -y out.mp4
> 
> ffmpeg version N-75262-g494b792 Copyright (c) 2000-2015 the FFmpeg developers
>   built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
>   configuration: --prefix=/Volumes/Ramdisk/sw --enable-nonfree --enable-gpl --enable-version3 --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libgsm --enable-libvpx --enable-libfdk-aac --enable-libvorbis --enable-libass --enable-libfreetype --enable-libfontconfig --enable-libfribidi --disable-outdevs --disable-ffserver --disable-network
>   libavutil      55.  2.100 / 55.  2.100
>   libavcodec     57.  1.100 / 57.  1.100
>   libavformat    57.  0.100 / 57.  0.100
>   libavdevice    57.  0.100 / 57.  0.100
>   libavfilter     6.  1.100 /  6.  1.100
>   libswscale      4.  0.100 /  4.  0.100
>   libswresample   2.  0.100 /  2.  0.100
>   libpostproc    54.  0.100 / 54.  0.100
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 't1.mov':
>   Metadata:
>     major_brand     : qt  
>     minor_version   : 512
>     compatible_brands: qt  
>     encoder         : Lavf57.0.100
>   Duration: 00:00:10.04, start: 0.030333, bitrate: 30310 kb/s
>     Stream #0:0(eng): Video: dvvideo (dvc  / 0x20637664), yuv411p, 720x480 [SAR 8:9 DAR 4:3], 28771 kb/s, SAR 10:11 DAR 15:11, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
>     Metadata:
>       handler_name    : DataHandler
>       encoder         : DV/DVCPRO - NTSC
>       timecode        : 00:04:33;12
>     Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
>     Metadata:
>       handler_name    : DataHandler
>     Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
>     Metadata:
>       handler_name    : DataHandler
>       timecode        : 00:04:33;12
> Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 't2.mov':
>   Metadata:
>     major_brand     : qt  
>     minor_version   : 512
>     compatible_brands: qt  
>     encoder         : Lavf57.0.100
>   Duration: 00:00:10.04, start: 0.030333, bitrate: 30310 kb/s
>     Stream #1:0(eng): Video: dvvideo (dvc  / 0x20637664), yuv411p, 720x480 [SAR 8:9 DAR 4:3], 28771 kb/s, SAR 10:11 DAR 15:11, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
>     Metadata:
>       handler_name    : DataHandler
>       encoder         : DV/DVCPRO - NTSC
>       timecode        : 00:04:45;12
>     Stream #1:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
>     Metadata:
>       handler_name    : DataHandler
>     Stream #1:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
>     Metadata:
>       handler_name    : DataHandler
>       timecode        : 00:04:45;12
> Input #2, mov,mp4,m4a,3gp,3g2,mj2, from 't3.mov':
>   Metadata:
>     major_brand     : qt  
>     minor_version   : 512
>     compatible_brands: qt  
>     encoder         : Lavf57.0.100
>   Duration: 00:00:10.01, start: 0.005542, bitrate: 30312 kb/s
>     Stream #2:0(eng): Video: dvvideo (dvc  / 0x20637664), yuv411p, 720x480 [SAR 8:9 DAR 4:3], 28771 kb/s, SAR 10:11 DAR 15:11, 29.97 fps, 29.97 tbr, 30k tbn, 29.97 tbc (default)
>     Metadata:
>       handler_name    : DataHandler
>       encoder         : DV/DVCPRO - NTSC
>       timecode        : 00:04:57;08
>     Stream #2:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
>     Metadata:
>       handler_name    : DataHandler
>     Stream #2:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
>     Metadata:
>       handler_name    : DataHandler
>       timecode        : 00:04:57;08
> Input #3, lavfi, from 'color=black':
>   Duration: N/A, start: 0.000000, bitrate: N/A
>     Stream #3:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
> [libx264 @ 0x7fca53009e00] using SAR=8/9
> [libx264 @ 0x7fca53009e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
> [libx264 @ 0x7fca53009e00] profile Constrained Baseline, level 3.0
> [libx264 @ 0x7fca53009e00] 264 - core 146 r2555 0c21480 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html <http://www.videolan.org/x264.html> - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
> Output #0, mp4, to 'out.mp4':
>   Metadata:
>     major_brand     : qt  
>     minor_version   : 512
>     compatible_brands: qt  
>     encoder         : Lavf57.0.100
>     Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x480 [SAR 8:9 DAR 4:3], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
>     Metadata:
>       encoder         : Lavc57.1.100 libx264
>     Stream #0:1: Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, s16, 256 kb/s (default)
>     Metadata:
>       encoder         : Lavc57.1.100 libfdk_aac
> Stream mapping:
>   Stream #0:0 (dvvideo) -> fade
>   Stream #0:1 (pcm_s16le) -> acrossfade:crossfade0
>   Stream #1:0 (dvvideo) -> fade
>   Stream #1:1 (pcm_s16le) -> acrossfade:crossfade1
>   Stream #2:0 (dvvideo) -> fade
>   Stream #2:1 (pcm_s16le) -> acrossfade:crossfade1
>   Stream #3:0 (rawvideo) -> scale
>   overlay -> Stream #0:0 (libx264)
>   acrossfade -> Stream #0:1 (libfdk_aac)
> Press [q] to stop, [?] for help
> [Parsed_overlay_9 @ 0x7fca52c04b80] [framesync @ 0x7fca52c04c88] Buffer queue overflow, dropping.
>     Last message repeated 43 times
> [Parsed_overlay_9 @ 0x7fca52c04b80] [framesync @ 0x7fca52c04c88] Buffer queue overflow, dropping.
>     Last message repeated 11 times
> [Parsed_overlay_9 @ 0x7fca52c04b80] [framesync @ 0x7fca52c04c88] Buffer queue overflow, dropping.
>     Last message repeated 22 times
> [Parsed_overlay_9 @ 0x7fca52c04b80] [framesync @ 0x7fca52c04c88] Buffer queue overflow, dropping.
>     Last message repeated 32 times
> frame=  652 fps= 64 q=-1.0 Lsize=    8913kB time=00:00:26.08 bitrate=2799.6kbits/s    
> video:8081kB audio:816kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.175704%
> [libx264 @ 0x7fca53009e00] frame I:3     Avg QP:21.00  size: 45702
> [libx264 @ 0x7fca53009e00] frame P:649   Avg QP:22.61  size: 12538
> [libx264 @ 0x7fca53009e00] mb I  I16..4: 100.0%  0.0%  0.0%
> [libx264 @ 0x7fca53009e00] mb P  I16..4: 11.5%  0.0%  0.0%  P16..4: 45.0%  0.0%  0.0%  0.0%  0.0%    skip:43.6%
> [libx264 @ 0x7fca53009e00] coded y,uvDC,uvAC intra: 38.0% 33.0% 6.1% inter: 28.9% 20.5% 1.2%
> [libx264 @ 0x7fca53009e00] i16 v,h,dc,p: 34% 34% 18% 14%
> [libx264 @ 0x7fca53009e00] i8c dc,h,v,p: 47% 23% 23%  7%
> [libx264 @ 0x7fca53009e00] kb/s:2538.20
> 
>> On 2015 Sep 19, at 9:26 AM, Paul B Mahol <onemda at gmail.com <mailto:onemda at gmail.com>> wrote:
>> 
>> On 9/19/15, Jim Worrall <coniophora at gmail.com <mailto:coniophora at gmail.com>> wrote:
>>> . . .
>>> The clips are available at:
>>> https://dl.dropboxusercontent.com/u/18324334/t1.mov
>>> https://dl.dropboxusercontent.com/u/18324334/t2.mov
>>> https://dl.dropboxusercontent.com/u/18324334/t3.mov
>>> 
>>> Here is the command and output for 2 clips:
>>> ffmpeg -i t1.mov -i t2.mov -f lavfi -i color=black -filter_complex \
>>> "[0:v] fade=t=in:d=2, fade=t=out:st=8.04:d=2:alpha=1, setpts=PTS-STARTPTS
>>> [v0]; \
>>> [1:v] fade=t=in:d=2:alpha=1, setpts=PTS-STARTPTS+(8/TB),
>>> fade=t=out:st=16:d=2 [v1]; \
>>> [2:v] scale=720x480, trim=duration=18.09 [ovr0]; \
>>> [ovr0][v0] overlay [ovr1]; \
>>> [ovr1][v1] overlay [outv]; \
>>> [0:a] afade=t=in:d=2, asetpts=PTS-STARTPTS [a0]; \
>>> [1:a] asetpts=PTS-STARTPTS, afade=t=out:st=8:d=2 [a1]; \
>>> [a0][a1] acrossfade=d=2 [outa]" \
>>> -map [outv] -c:v libx264 -preset ultrafast -map [outa] -c:a libfdk_aac -b:a
>>> 256K -y out.mp4
>>> 
>> 
>> acrossfade basically concatenate two audio clips so I dont get how this above
>> can work.
> . . . 



More information about the ffmpeg-user mailing list