【问题标题】:Concatenate mkv files keeping original timestmap with gaps连接 mkv 文件,保持原始时间戳和间隙
【发布时间】:2020-12-03 02:08:48
【问题描述】:

16 天前我遇到了这个问题:Concatenating mka files but keeping timestamp,我使用 amix 解决了这个问题,使用来自 ffprobe 的 start_pts 解决了延迟。

今天我有一个像这样的新挑战,但需要视频。

所以我有一堆 mkv 视频。每次有人加入聊天时,都会记录一个 mkv,但如果该人刷新页面,则会创建一个新的 mkv,其中 start_pts 和 start_time 与实际相同。此外,如果会议开始并且有人在一分钟后加入,则 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

这可行,但没有我提到的那些差距。

【问题讨论】:

    标签: video ffmpeg video-processing ffmpeg-php


    【解决方案1】:

    您可以使用 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
    

    【讨论】:

    • 嗯,这可以工作。现在将尝试播放它。您还知道如何使用 concat 将所有视频调整为最小的吗?例如,如果用户更改了网络摄像头并具有其他分辨率,则 concat 会抱怨它。我的想法:遍历所有视频,获得所有视频中最小的分辨率,然后所有拼接视频都应该是该分辨率
    • 您可以使用scale 过滤器调整所有视频的大小。您可以将它们放入一个盒子中,例如:[0:v]scale=w='if(gt(iw/ih,${w}/${h}),${w},-2)':h='if(gt(iw/ih,${w}/${h}),-2,${h})':eval=init[out] 与 ${w} ${h} 您的输出与高度。这样,它们的分辨率无关紧要,它们将被缩放并保持它们的比例。
    • 你可能还需要一个pad 来填充空白空间和精确的输出
    • 你也可以使用 ffprobe 预先获取视频的尺寸
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多