微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将视频分段与 FFMPEG 初始加载延迟一起添加

如何解决将视频分段与 FFMPEG 初始加载延迟一起添加

我有段 .m4s 文件,前 2 个段的分辨率低于后 2 个段,我也有两种分辨率的初始化文件。每个片段是 10 秒,我想将它们全部放在一个视频(40 秒)中,然后查看 20 秒标记处的分辨率变化。之后,我使用命令将视频延迟 1.7 秒以模拟初始加载延迟。所有命令都运行良好,视频编译为 40 秒的视频,您会看到 20 秒的质量变化,但是当应用下面的初始加载延迟命令时,在 20 秒标记处,视频结束。我通过另一个实验完成了它,其中前 2 个片段的分辨率比其他 2 个片段的分辨率高,并且效果很好,40 秒的视频具有分辨率更改和加载延迟。

使用的代码: 组合 4 个部分:

cat init(lowquality).mp4 > output.mp4 cat segment10seconds1(lowquality).m4s >> output.mp4 cat segment10seconds2(lowquality).m4s >> output.mp4 cat init(highquality).mp4 >> output.mp4 cat segment10seconds3(highquality).m4s >> output.mp4 cat segment10seconds4(highquality).m4s >> output.mp4

之后我使用以下命令应用 1.7 秒的加载延迟:

ffmpeg -i output.mp4 -vf "setpts='PTS-STARTPTS+ gte(T,0)*(1.17/TB)'" -af "asetpts='PTS-STARTPTS+gte(T,0)*(1.17/TB)',aresample=async=1:first_pts=0" -vsync cfr finaloutput.mp4

我还尝试在没有第二个 init 的情况下添加所有段,但结果相同。 video works well until it reaches different resolution segment here

解决方法

如果我理解正确,那么如果当前不存在下一个剪辑,则连接不起作用,因为在读取整个列表之前不会开始解码。但是,可以引用当前列表末尾的另一个列表。以下脚本为此机制提供了一个示例:https://trac.ffmpeg.org/wiki/Concatenate.

请注意,递归引用播放列表文件将导致 ffmpeg 最终耗尽文件描述符(或其他资源),因为 ffmpeg 仅在播放列表完成时关闭播放列表文件,但在上面的示例中,由于递归链接没有播放列表文件实际上结束了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?