FFmpeg:合并视频和图像

9
我有两个视频文件(分辨率和编码相同),想要合并它们,并在它们之间插入3秒的文本作为分隔符。我正在Windows上使用FFmpeg进行操作。
以下是我感兴趣的一些可选想法:
- 避免在过程中重新编码视频。 - 在每个部分交叉处实现淡入/淡出效果。
目前,我已经将文本制作成了图像(但我也接受其他建议)。假设我有以下内容:
- video1.mp4:6:33 - splitter.png(与video1.mp4具有相同的分辨率) - video2.mp4:16:44
我尝试了一些方法,但总是遇到同样的问题:视频长度为23:20(video1 + 3秒 + video2),但3秒的空白只是最后一个video1帧冻结而不是我的图像/文本...
请问我做错了什么或者应该如何实现这个功能?
以下是我迄今为止尝试过的方法:
方法1:将图像转换为视频
将图像转换为3秒的MP4视频,然后使用concat(demuxer)与其他视频文件连接起来。
ffmpeg -loop 1 -f image2 -i splitter.png -r 30 -t 3 splitter.mp4
ffmpeg -f concat -i input.txt -codec copy output.mp4

input.txt 的内容如下:

file 'E:\video1.mp4'
file 'E:\splitter.mp4'
file 'E:\video2.mp4'
splitter.png的内容在splitter.mp4中可见,但在output.mp4中不可见。另外我不确定splitter.mp4是否采用与两个视频完全相同的编码方式,也不知道如何进行验证。

方法二:插入图像帧

直接在图像上运行concat(分解器)90次(30fps -> 3秒)

ffmpeg -f concat -i input.txt -codec copy output.mp4

以下是 input.txt 文件的样子:

file 'E:\video1.mp4'
file 'E:\splitter.png'
...
file 'E:\splitter.png'
file 'E:\video2.mp4'

编辑:可能的解决方案?

既然我只需要屏幕录制,那么我可以把我的分割图像也一并录制下来。这样我就能确保音频和视频编码质量,并且合并时不会遇到任何问题,也不需要重新编码...我知道这听起来有点傻,但这可能是个好办法...

注意:我没有尝试过,因为我已经用 Openshot 完成了。


我通过强制像素格式来解决这个问题:对于连接的所有输入文件使用-pix_fmt=yuv420p - Sebastian
1个回答

1

听起来是个好主意。但在你链接中给出的例子中,ffmpeg期望每个视频都有音频流。我的splitter.mp4只有视频流。我不确定该如何处理... - Yosko
只是一个想法,你的图像视频长度都不同吗?否则,你总可以包含一份空白的wav(或其他格式)文件。 - Jared
不确定“不同长度”是什么意思,但在分离器中添加一个静默但实际的流听起来不错。我正在尝试。似乎不起作用,但现在我需要自己搜索。我明天会回来的。谢谢 :) - Yosko
这个想法很好,但最终并没有奏效:我的分流器视频流还有其他问题...不管怎样,我最终安装了Ubuntu+Openshot(是的,我当时非常绝望),它解决了问题...还是要感谢你的帮助。 - Yosko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接