FFMPEG拼接两个随机且不同的视频

3

我正在制作一个应用程序,用户可以发送视频,并且它会自动地与其他视频连接起来。由于这些视频的格式各不相同,所以在连接之前,我需要使用以下命令将它们转换为相同格式:

ffmpeg -y -i {orginalVideo.itsExtention} -vcodec wmv2 4.wmv

对于连接操作,我有以下命令:

ffmpeg -y -i concat.wmv -i 4.wmv -filter_complex "[0:0][0:1][1:0][1:1] concat=n=2:v=1:a=1" output.wmv

但我收到了以下错误提示。
Input link in1:v0 parameters (size 640x480, SAR 1:1) do not match the corresponding output link in0:v0 parameters (1080x1920, SAR 1:1)

Failed to configure output pad on Parsed_concat_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #1:0

感谢您的回答。
2个回答

3

将缩放作为一个独立的步骤不够高效,如果使用有损编码器,它会引入另一种质量世代的损失。

既然您已经重新编码,可以在同一命令中进行缩放:

ffmpeg -y -i concat.wmv -i 4.wmv -filter_complex "[1:v]scale=1080:1920,setsar=1[v1];[0:v][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.wmv

或者你可以使用更复杂的指令来避免由于宽高比差异而导致的拉伸或压缩:

ffmpeg -y -i concat.wmv -i 4.wmv -filter_complex "[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1[v1];[0:v][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.wmv

0

视频必须具有相同的尺寸(即像素尺寸)。输出流不能在中途更改大小。因此,将一个(或两个)调整为所需的尺寸。

e.g.:

ffmpeg -y -i {orginalVideo.itsExtention} -vf scale=640:480 -vcodec wmv2 4.wmv

请参阅https://trac.ffmpeg.org/wiki/Scaling以获取更多信息。


谢谢您的回答,但我该如何实现呢? - Meddah Abdallah
@AbibadAbdou 我已经更新了我的答案,并提供了一个示例。 - L. Scott Johnson
非常顺利,谢谢! - Meddah Abdallah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接