如何合并两个不同分辨率的 .mp4 视频

How to merge two .mp4 videos of different resolutions

我需要通过 API 在 YouTube 上嵌入视频,为了让这个过程更加实用,我想在发布到 YouTube 之前将我的插图与视频合并。但是,这些视频具有不同的分辨率和不同的特性,因此我找到的解决方案使最终视频存在音频或流媒体问题。

我最终找到了以下解决方案,效果很好,但速度非常慢,请参阅:

$code1 = 'ffmpeg -i vinheta.mp4 -qscale 0 vinheta.mpg';
$code2 = 'ffmpeg -i movie2.mp4 -qscale 0 movie2.mpg';
$code3 = 'cat vinheta.mpg movie2.mpg | ffmpeg -f mpeg -i - -qscale 0 -vcodec mpeg4';

system($code1);
system($code2);
system($code3);

这个方案很好用,没有断线,但是确实需要很长时间,有些视频转换需要长达2个小时,之后视频非常沉重

我在几个地方研究过它,测试了各种代码,这是我发现的唯一一个无论分辨率如何都不会在最终视频中留下音频或视频问题的代码。

另一个有趣的解决方案如下:

$code1 = "ffmpeg -i vinheta.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts";
$code2 = "ffmpeg -i 4.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts";
// now join
$code3 = "ffmpeg -i \"concat:temp1.ts|temp2.ts\" -c copy -bsf:a aac_adtstoasc output.mp4";

system($code1);
system($code2);
system($code3);

输出文件工作得很好。但仅限于我的电脑。当我把它发送到 youtube 时,第二个视频的音频一直在断断续续

有没有更简单、更轻便的方法可以在不破坏我的最终视频的情况下做到这一点?

关于在 youtube 上截断音频的第二个代码,我设法通过更改编解码器来解决它。所以现在它工作得很好,如下所示:

$code1 = "ffmpeg -i vinheta.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1.ts";
$code2 = "ffmpeg -i 4.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2.ts";
// now join
$code3 = "ffmpeg -i \"concat:temp1.ts|temp2.ts\" -c copy -acodec aac output.mp4";

system($code1);
system($code2);
system($code3);