FFMpeg:在视频创建过程中添加背景图像

FFMpeg: Add background image during the process of video creation

关于我之前的问题我已经使用以下命令成功地将一些图像与特定持续时间的音频合并。

ffmpeg \
-y \
-f concat \
-safe 0 \
-r 1/5 \
-i concat.txt \
-i audio.ogg \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

为了添加背景图片,我尝试使用 https://superuser.com/a/876275/299733 和网络上存在的其他解决方案。但是给定的解决方案没有正确覆盖我的图像,并且我在整个过程中都得到了黑色视频。因此,我再次通过 :

对先前命令的结果视频进行编码
ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-i output.mp4 \
-filter_complex "overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output2.mp4

现在,我可以得到想要的结果了。有什么办法可以将两个请求合并为一个请求吗?或者更好的方法而不损失任何性能?

其他详细信息:

concat.txt

file '/home/shubham/Desktop/FFMpeg/image_1.jpg'
file '/home/shubham/Desktop/FFMpeg/image_2.jpg'
file '/home/shubham/Desktop/FFMpeg/image_3.jpg'

基于@gyan 回复

已更新concat.xml:

file '/home/shubham/Desktop/FFMpeg/image_4.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_5.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_6.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_6.jpg'

更新命令:

ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-f concat \
-safe 0 \
-i concat.txt \
-i audio.ogg \
-filter_complex "[1]fps=25[v];[0][v]overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

问题是当图像具有不同的分辨率甚至相同的分辨率时,图像会被跳过。大多数时候最后一张图片会显示出来。但是,没有选择哪个图像以及跳过哪个图像的标准。 样本: https://drive.google.com/file/d/1JxCsV2eudKzdgWWuefXqdaWPaBf9Dzzd/view?usp=sharing

但是,如果我重复使用同一张图片或复制图片并重命名。在这两种情况下,我都在背景上获得了正确的图像,没有任何跳跃。

编辑:2018 年 7 月 9 日

正如@gyan 在评论中所述:将每个图像转换为相同的分辨率和类型。 我检查图像的信息。通过

 ffmpeg -i image_X.jpg

发现两张图片编码不同:

图像 1:流 #0:0:视频:mjpeg,yuvj420p(pc,bt470bg/unknown/unknown),640x480 [SAR 72:72 DAR 4:3], 25 tbr、25 tbn、25 tbc

图像 2:流 #0:0:视频:mjpeg,yuvj444p(pc,bt470bg/unknown/unknown),640x480 [SAR 72:72 DAR 4:3], 25 tbr、25 tbn、25 tbc

合并失败的可能原因是什么

使用

ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-f concat \
-safe 0 \
-r 1/5 \
-i concat.txt \
-i audio.ogg \
-filter_complex "[1]fps=25[v];[0][v]overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

concat 解复用器将其第一个输入的属性(如编解码器、分辨率、时基等)注册为其解复用流 属性。因此,为了获得可靠的结果,所有输入都应具有相同的属性。