FFMPEG 2视频转码并在1帧中并排?

时间:2012-02-15 12:20:36

标签: video ffmpeg transcode

我有2个视频:HEADSHOT.MOV和SCREEN.MOV。它们都是大文件,我希望缩小(大小,比特率​​等)并将这两个并排放置在同一个非常宽的视频帧中。最终结果是,当您播放output_video.mp4时,您将拥有一个非常宽的帧,两个视频同步并以相同的速率播放。

以下是我正在尝试做的语法不正确的版本:

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

在上面的例子中,我也尝试将测试电影的持续时间设置为2分钟,这引出了另一个问题:处理2部不同长度的电影的最佳方法是什么(如果它们接近的话)?

到目前为止,我发现有用的资源是:

Multiple video sources combined into one

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

非常感谢任何帮助/建议。我在使用FFMPEG语法时遇到问题!谢谢!

2 个答案:

答案 0 :(得分:33)

结果可以通过缩放,填充和叠加滤镜的组合实现,如下所示:

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

这里第一个视频缩小了一半,并填充到原始大小。第二个视频缩小了三分之二,并叠加在第一个视频的右半部分(填充区域)上。

较短的视频可以淡出;否则,最后一帧将显示直到合并视频结束。

可以使用-b:v选项设置结果比特率。此外,视频大小和位置可以按像素指定,用于打击垫,缩放和叠加滤镜。

答案 1 :(得分:0)

为了让一个视频占据输出视频的全部左半部分,另一个视频占据输出视频的全部右半部分并获得正确的音频,我将扩展@Dmitry Shkuropatsky 的回答。这花了我大约 5 分钟或更长时间才弄清楚,我使用了 ffmpeg 3.4 版(版权所有 (c) 2000-2017):

>ffmpeg -i left.webm -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=right.mp4, scale=iw/2:ih/2, fade=alpha=1 [right]; [left][right] overlay=main_w/2:0 [out]" -c:a aac -b:v 3800k output.mp4

>ffmpeg -i output.mp4 -i right.mp4 -c copy -map 0:0 -map 1:1 -shortest output_with_audio.mp4

变化:

  • 无淡出
    我成功删除了淡出选项/参数,因为它给我带来了问题。如果您想使用淡出,则可以针对您的具体情况更改 fade=out:300:30:alpha=1 中的数字。
  • 左视频填满了整个左半部分,右视频填满了整个右半部分
    我将右视频改为完全填满,而不是右半部分只占三分之二带有右半部分的视频。
  • 修复了音频问题
    我运行了第二个 FFmpeg 命令,因为第一个(包含所有 -vf 内容)似乎只使用 {{ 1}} 而不是 -i 的内容。如果 movie= 是一个没有音频的视频,而您想使用来自 -i 的音频,这将是一个问题。第二个 ffmpeg 命令将来自 movie= 的视频流和来自 output.mp4 的音频流复制到 right.mp4