串联mkv文件,使原始时间戳映射保持空白

问题描述

16天前,我遇到了一个问题:Concatenating mka files but keeping timestamp是我使用amix解决的,这是从ffprobe中使用start_pts解决的。

今天,我遇到了一个新挑战,但有视频。

所以我有一堆mkv视频。每次一个人加入聊天时,都会记录一个mkv,但是如果该人刷新页面,则会使用start_pts和start_time创建一个实际的实际mkv。同样,如果会议开始并且一分钟后有人加入,则start_time设置为1分钟。我需要合并所有这些mkv,并在没有供稿的情况下用空白屏幕填充它们。

与上述示例类似,如果某人在一分钟后加入,则第一分钟是空白屏幕。另外,如果参与者在10秒后离开并重新加入,那10秒又将变成空白。

关于如何使用ffmpeg做到这一点的任何想法?

文件的具体示例:

0PA84c5c3f412769b311d44b159941b2d22.mkv - start_pts: 742 start_time: 0.742000
2PA73d94e8cb0f41c3002fadd6c04b4a88f.mkv - start_pts: 30761 start_time: 30.761000
3PAcd35e470325618fa8a3fb8bb5a41403e.mkv - start_pts: 50940 start_time: 50.940000
4PAddccde7b8847ecc43d5e8643b7903dba.mkv - start_pts: 69243 start_time: 69.243000

最终文件将导致文件长度为69.243000,前0.742秒为空白,并且之间的间隔也应为空白。

到目前为止,我已经尝试过:

ffmpeg -i 0PA84c5c3f412769b311d44b159941b2d22.mkv -i 2PA73d94e8cb0f41c3002fadd6c04b4a88f.mkv -i 3PAcd35e470325618fa8a3fb8bb5a41403e.mkv -i 4PAddccde7b8847ecc43d5e8643b7903dba.mkv -filter_complex "[0:v] [1:v] [2:v] [3:v] concat=n=4:v=1 [v]" -map "[v]" test.mkv

这行得通,但我没有提到那些差距。

解决方法

您可以使用ffprobe获取文件的长度并计算间隙的长度。 然后使用color过滤器创建这些间隙并在视频之间进行合并。

以下是命令:

ffmpeg -i 1.mkv -i 2.mkv -i 3.mkv -filter_complex"\
color=s=1280x720,trim=0:0.742[gap0];\
color=s=1208x720,trim=0:5[gap1];\
color=s=1208x720,trim=0:2[gap2];\
[gap0][0:v][gap1][1:v][gap2][2:v]concat=6:v=1 [v]"\
-map [v] out.mkv

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...