ffmpeg 调整大小并连接多个视频

Bac*_*alo 6 ffmpeg

我需要对源视频执行 3 次操作(按顺序)

1 将源视频的大小从 320X 240 调整为 640X480 (200%)
2 在之前添加另一个视频文件
3 在之后添加第三个视频

此外,我需要将音频文件与完成的结果(3 个视频文件连接在一起。

我在这里找到了部分解决方案,建议了一种连接 2 个视频文件的方法 http://sonnati.wordpress.com/2012/07/02/ffmpeg-the-swiss-army-knife-of-internet-streaming-part-v /

但不确定连接第三个文件的正确语法,并将音频文件与最终结果混合。任何人都可以帮助尝试一些建议的设置吗?

Beh*_*far 3

  1. 过滤scale器可以做到这一点:

    如果您想要将输入视频的大小调整为特定大小(例如 640x480),无论其大小和长宽比如何,则: ffmpeg -i INPUT -filter_complex [0:v]scale=640:480[Scaled] -map [Scaled] OUTPUT

    但是,不保留宽高比可能会导致视频难看。因此,如果您想调整输入视频的大小并保留宽高比,请指定其中一个尺寸并设置-2其他尺寸: ffmpeg -i INPUT -filter_complex [0:v]scale=-2:480[Scaled] -map [Scaled] OUTPUT

  2. (和 3.)连接多个流可以通过过滤器完成concat

    下面的命令将合并三个视频流(如果存在,将删除音频流) ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex [0:v][1:v][2:v]concat=n=3:v=1:a=0[Merged] -map [Merged] OUTPUT

为您执行的整个命令将如下所示:

ffmpeg -i VideoBefore.mp4 -i MainVideo.mp4 -i VideoAfter.mp4 -i Audio.mp3 -filter_complex [1:v]scale=-2:480,setsar=sar=1[Scaled];[0:v][Scaled][2:v]concat=n=3:v=1:a=0[Merged] -map [Merged] -map 3:a OUTPUT.mp4

重要提示concat过滤器文档说:所有相应的流在所有段中必须具有相同的参数;过滤系统将自动为视频流选择通用的像素格式,为音频流选择通用的采样格式、采样率和通道布局,但其他设置(例如分辨率)必须由用户显式转换。SAR(样本长宽比)属性通常为 1:1 。但scale过滤器会改变它。我们需要再次更改它以使其与其他流相同。过滤setsar器就可以做到。

  • 可以简化为“setsar=1”。 (2认同)