如何在不使用 ffmpeg 重新编码的情况下通过循环图像然后与另一个很长的视频连接来生成视频?

问题描述

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

生成标题视频
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 的导出速度没有我预期的那么快,因为它们对视频进行了重新编码。

解决方法

使用:

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