关于我的上一个问题FFMpeg: merge images with audio for specific duration,通过使用以下命令,我已经成功地在特定持续时间内将几张图像与音频合并。
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 /未知/未知),640x480 [SAR 72:72 DAR 4:3],25 tbr,25 tbn,25 tbc
图片2:流#0:0:视频:mjpeg,yuvj444p(pc,bt470bg /未知/未知),640x480 [SAR 72:72 DAR 4:3],25 tbr,25 tbn,25 tbc
这是合并失败的可能原因。
答案 0 :(得分:1)
使用
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多路分配器将其第一个输入的属性(如编解码器,分辨率,时基等)注册为其多路分配的流属性。因此,为了获得可靠的结果,所有输入都应具有相同的属性。