Search code examples
videoffmpegtranscode

FFMPEG 2 Videos transcoded and side by side in 1 frame?


I have 2 videos: HEADSHOT.MOV and SCREEN.MOV. They are both large files and I am looking to both shrink (size, bitrate, etc) and place these two side by side in the same, very wide, video frame. The end result would be that when you play the output_video.mp4, you would have a very wide frame with both videos in sync and playing at the same rate.

Here is the syntatically incorrect version of what I am trying to do:

ffmpeg -i HEADSHOT.MOV -t 00:02:00 -acodec libfaac -ab 64k -vcodec libx264 -r 30 -pass 1 -s 374x210 -vf "movie=SCREEN.MOV [small]; [in][small] -an -r 30 -pass 1 -s 374x210 overlay=10:10 -t 00:02:00 [out]" -threads 0 output_movie.mp4

In the above example, I also tried to set a test movie duration for 2 minutes which raises another question, What is the best way to handle 2 movies of varying length (if they are close)?

The resources I have found helpful so far are:

Multiple video sources combined into one and

http://ffmpeg.org/ffmpeg.html#overlay-1

Any help/advice is greatly appreciated. I am having trouble with the FFMPEG syntax! Thank you!


Solution

  • The result can be achieved with the combination of scale, pad and overlay filters as the following:

    ffmpeg.exe -i LeftInput.mp4 -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; 
        movie=RightInput.mp4, scale=iw/3:ih/3, fade=out:300:30:alpha=1 [right]; 
        [left][right] overlay=main_w/2:0 [out]" -b:v 768k Output.mp4
    

    Here the first video is shrunk by half, and padded to its original size. The second video is shrunk by two thirds and overlayed on the right half (padding area) of the first one.

    The shorter video can be faded out; otherwise, it last frame will be display till the end of the combined video.

    The result bit rate can be set with -b:v option. Also, video sizes and positions can be specified in pixels for pad, scale and overlay filters.