![最适合拼接的视频格式是什么](https://linux22.com/image/1585625/%E6%9C%80%E9%80%82%E5%90%88%E6%8B%BC%E6%8E%A5%E7%9A%84%E8%A7%86%E9%A2%91%E6%A0%BC%E5%BC%8F%E6%98%AF%E4%BB%80%E4%B9%88.png)
我已经为 .mp4 苦苦挣扎了大约 2 天,试图将大约 20 个文件串联成一个文件。文件之间的任何差异都是一场噩梦。有些文件有不同的 fps,有些文件有不同的比率。
我想知道 mp4 是否是我应该使用的格式,或者是否有更好、更易于使用的连接格式。时间不是问题,我只是需要一种在大多数情况下可以连接的相对高质量的格式。
如果不存在的话,那么关于如何处理 mp4 文件的大量不同属性的任何建议(我不完全确定除了 fps 和视频之间的比例之外还有哪些不同可能会导致问题)都会很棒。
我正在使用 ffmpeg 尝试连接文件。首先,我尝试使用解复用器,然后使用连接过滤器,但是我发现连接过滤器非常令人生畏,完全不知道如何使用它。
每个视频都有音频,有些视频有静止图像,有些视频有移动图像。
答案1
多媒体文件很复杂,因此连接有几个要求:
- 所有要连接的段必须具有相同数量和类型的流。
- 所有流必须具有相同的参数。
由于每个输入可能在任意参数上有所不同,我建议使用 concat 过滤器。您必须使用过滤器使每个输入符合一组通用参数。输入格式并不重要,因为无论如何您都要重新编码所有内容。
基本的通用示例,其中main.mp4
有视频和音频以及end.mp4
有视频但没有音频。所有其他参数都假定不同。此处使用的过滤器是:anullsrc、scale、pad、setsar、fps、format、aformat 和 concat。
ffmpeg -i main.mp4 -i end.mp4 -f lavfi -t 0.1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,format=yuv420p[v0];[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=25,format=yuv420p[v1];[0:a]aformat=channel_layouts=stereo:sample_rates=44100[a0];[v0][a0][v1][2:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4
有几种方法可以做到这一点,您可能需要根据您的输入或满足您的要求进行调整。