7

我有两个ffmpeg命令:

ffmpeg -i d:\1.mp4 -i d:\1.mp4 -filter_complex "[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" d:\3.mp4

ffmpeg -i d:\1.mp4 -vf scale=320:240 d:\3.mp4

如何同时使用它们?

4

3 回答 3

22

对于后代: 如果输入源的大小不同,则接受的答案不起作用(这是您需要在组合之前进行缩放的主要原因)。

您需要做的是首先缩放然后将该视频输出通过管道传输到 concat 过滤器,如下所示:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \
"[0:v]scale=1024:576:force_original_aspect_ratio=1[v0]; \ 
 [1:v]scale=1024:576:force_original_aspect_ratio=1[v1]; \
 [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map [v] -map [a] output.mp4

今天遇到了这个问题,我拉了三个小时的头发试图弄清楚这一点,不幸的是,接受的答案并没有像评论中指出的那样起作用。

于 2018-02-18T16:02:51.633 回答
8
ffmpeg -i d:\1.mp4 -i d:\2.mp4 -filter_complex "concat=n=2:v=1:a=1 [v] [a]; \
[v]scale=320:200[v2]" -map "[v2]" -map "[a]" d:\3.mp4

首先,我们将所有内容和管道结果连接起来[v] [a](请参阅filtergraph 语法文档- 它来自concat过滤器的输出)。接下来我们将其进行[v]缩放并输出到[v2],最后我们将其进行[v2][a]复用到d:\3.mp4文件中。

于 2013-10-18T10:50:40.873 回答
0

构建自定义过滤器图,将调整大小的过程移近视频源,例如让我们处理一个更复杂的图,以掌握其构建语言的精神:

ffmpeg.exe -i Movie_oriented_minus_90.mov -i Movie_pause.mp4 -i Sound_pause.aac -filter_complex "[0:v:0]scale=1920:1080 [c1],[c1]vflip[c2],[c2]hflip[clip], [clip] [0:a:0] [1:v:0] [2:a:0] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" -c:v libx264 -q:v 0 -acodec mp3 -s 1920x1080 Movie_oriented_plus_90_with_pause.mp4
  • 阶段 1:Movie_orient_minus_90 是源 0,它的视频流 [0:v:0]被输入到 scale filter 并产生为[c1],然后[c1]垂直翻转到[c2],然后[c2]水平翻转到[clip] 因此旋转了 180 度
  • 第 2 阶段:第一个视频流与第二个源流连接,即第一个视频流:[剪辑](来自源 0 的处理流)和来自原始视频的声音[0:a:0]第二个视频流:由来自源 1 的视频构成[来自源 2 的1:v:0]和音频[2:a:0] (在 ffmpeg 的单独运行期间使用-filter_complex "aevalsrc=0:d=30" 产生30 秒的静音)
  • 第 3 阶段:生成的视频序列[v][a]然后用x264编解码器压缩到目标mp4文件中

因此,您的问题的主要问题是您尝试连接具有不同大小的流,然后才对已经聚合的流应用调整大小操作,这当然不能包含不同大小的媒体样本。

于 2015-11-19T09:38:58.317 回答