【问题标题】:FFMPEG 2 Videos transcoded and side by side in 1 frame?FFMPEG 2 视频在 1 帧中并排转码?
【发布时间】:2012-02-15 12:20:36
【问题描述】:

我有 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 语法时遇到问题!谢谢!

【问题讨论】:

    标签: video ffmpeg transcode


    【解决方案1】:

    可以通过组合使用 scale、pad 和 overlay 过滤器来实现结果,如下所示:

    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 选项设置结果比特率。此外,可以为填充、缩放和覆盖过滤器以像素为单位指定视频大小和位置。

    【讨论】:

    • 谢谢德米特里,这太棒了。对于将两个视频都搜索到一个共同的时间码,您有什么建议吗?我知道对于 [left] 我可以使用 -ss 但我可以为 [right] 找到的唯一过滤器是 seek_point 但这只是几秒钟,而不是对时间码的引用。是否可以使用 setpts=[特定时间码点] 之类的东西?关于同步两者的任何其他建议?
    • 为了传递电影过滤器允许之外的输入参数,请改用-filter_complex。它比-vf 更灵活。例如,可以使用以下命令实现相同的输出:ffmpeg.exe -i LeftInput.mp4 -i RightInput.mp4 -filter_complex "[0:v] scale=iw/2:ih/2, pad=2*iw:ih [left]; [1:v] 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
    • 如果一部电影在几秒钟后开始,是否有可能以某种方式同步时间?
    • 如何让两个音频对齐?
    • @CanBal,当我使用-filter_complex 尝试您的版本时,我收到Filter overlay has a unconnected output 错误,但经过一些试验后,我通过将args 中的最后一个[out] 删除为-filter_complex 来解析id。
    【解决方案2】:

    为了让一个视频占据输出视频的整个左半部分,另一个视频占据输出视频的整个右半部分并获得正确的音频,我将扩展 @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 内容)似乎只使用来自 -i 内容的音频,而不是movie=。如果-i 是没有音频的视频并且您想使用来自movie= 的音频,则会出现问题。第二个 ffmpeg 命令将视频流从output.mp4 和音频流从right.mp4 复制到output_with_audio.mp4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2018-01-14
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2015-08-16
      相关资源
      最近更新 更多