我有两个视频文件(分辨率和编码相同),想要合并它们,并在它们之间插入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)与其他视频文件连接起来。
以下是我感兴趣的一些可选想法:
- 避免在过程中重新编码视频。 - 在每个部分交叉处实现淡入/淡出效果。
目前,我已经将文本制作成了图像(但我也接受其他建议)。假设我有以下内容:
- 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