如何通过循环图像生成视频,然后在不使用 ffmpeg re-encoding 的情况下与另一个很长的视频连接?

How to generate a video by looping an image and then concat with another very long video without re-encoding using ffmpeg?

我有一张图片和一段很长的视频(1.5 小时)。 现在我想通过循环图像生成一个大约5秒的标题视频,然后将它与长视频拼接起来。由于视频很长,我不想re-encode 视频。 我尝试使用

生成标题视频
ffmpeg -loop 1 -i image.png -c:v libx264 -t 5 -pix_fmt yuv420p head.mp4

然后

ffmpeg -f concat -i list.txt -c:v copy concat.mp4

其中 list.txt 包含

file head.mp4
file longvideo.mp4

我在两台机器上都试过这些操作。 在一台机器上,连接的视频没有音频。而且卡在5-10秒,直接跳到11秒。 在另一台机器上,视频和音频不同步。

为了提供更多信息,我通过

检查了两个视频的编解码器
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \
  -of default=noprint_wrappers=1:nokey=1 xxxxx.mp4

都是h264.

我的问题是,如何使用ffmpeg正确生成它?如果很难使用 ffmpeg,有没有什么方法可以快速完成?据我所知,Adobe Premiere 和 Final Cut Pro 的导出速度不如我预期,因为它们 re-encode 视频。

使用:

ffmpeg -framerate 60 -loop 1 -t 5 -i image.png -f lavfi -i anullsrc=cl=stereo:r=48000 -vf "scale=1920x1080,setsar=1,format=yuv420p" -c:v libx264 -c:a aac -video_track_timescale 16k -shortest head.mp4

这将匹配 longvideo.mp4 attributes required for proper concatenation.