4 ms·
Does anybody know how to overlay a shorter footage on a longer one? Because the shortest footage just freeze at the last frame in the tutorial. I want the short
by throw_m239339 6y ago
Does anybody know how to overlay a shorter footage on a longer one? Because the shortest footage just freeze at the last frame in the tutorial. I want the shorter overlaid footage to loop on top of the longer one, Here is what I've tried:
ffmpeg -i "Old Film Grain.mp4" -i "main-footage.mp4" -filter_complex \
"[0]format=rgba,colorchannelmixer=aa=0.25[fg];[1][fg]overlay[out]"\
-map [out] -pix_fmt yuv420p -crf 18 final.mp4
The shortest footage (Old Film Grain.mp4) doesn't loop as an overlay.
- mmozeiko 6y agoTry adding "-stream_loop -1" before first -i argument.
- throw_m239339 6y agothanks, -stream_loop -1 just loops the encoding forever for me, adding a duration with -t fixes it.
- __zayne__ 6y agoI like to get the duration of the base video using ffprobe, then use -stream_loop -1 to loop the overlay video on top of it, while using -t with the duration before the output to ensure it will only be as long as the duration of the base video. Here's an example: DURATION="$(ffprobe -i input.mp4 -show_entries format=duration -v quiet -of csv='p=0')" ffmpeg -i input.mp4 -stream_loop -1 -i overlay.mp4 -filter_complex " [1]colorchannelmixer=aa=0.1[2];[2][0]scale2ref[2][1];[1] [2]overlay" -t $DURATION output.mp4
- throw_m239339 6y agoThanks, adding a duration to the CLI args works well.
- _Gyan_ 6y agoffprobe step nor -t needed. ffmpeg -i input.mp4 -stream_loop -1 -i overlay.mp4 -filter_complex " [1]colorchannelmixer=aa=0.1[2];[2][0]scale2ref[2][1];[1] [2]overlay=shortest=1" -shortest -fflags +shortest -max_interleave_delta 100M output.mp4