android - FFMpeg:在视频创建过程中添加背景图片
问题描述
关于我之前的问题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
现在,我能够得到想要的结果。有什么方法可以将两个请求合并为一次传递?还是更好的方法而不损失任何性能?
额外细节:
连接文件
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 demuxer 将其第一个输入的属性注册为它的 demuxed 流属性,例如编解码器、分辨率、时基等。因此,为了获得可靠的结果,所有输入都应具有相同的属性。
推荐阅读
- ios - 导航链接和滚动视图问题 SwiftUI
- mysql - MySQL 5.7 升级到 8.0 无法启动服务
- sed - 删除以 sed 开头的可选分号
- javascript - 替换 FabricJS 中的对象?
- angular - 将科尔多瓦添加到我的 Angular 应用程序中,它比浏览器中的应用程序慢
- javascript - 在没有 JavaScript 框架的 HTML 中安装 turbolinks
- python - 用于编译网络 (CNN) 的 Keras 自定义损失函数中的错误
- rest - REST 服务 Jersey 2、Guice、HK 和 Message Body Writers and Readers
- c# - 如何通过允许密码中包含非字母数字字符来更改密码策略?
- kubernetes - 如果有现有控制器,如何创建额外的 NGNIX 入口控制器