gpt4 book ai didi

ffmpeg - 当文件通过标准输入给出时,ffprobe/ffmpeg 报告不同的视频持续时间

转载 作者:行者123 更新时间:2023-12-04 22:45:26 25 4
gpt4 key购买 nike

我正在尝试使用 ffmpeg 确定 MP4 视频的持续时间,这当然是可能的,除了当数据通过 stdin 流式传输(在我的情况下是一个要求)时,报告的持续时间比实际更短是。我对 ffprobe 有同样的问题。

视频的实际长度约为 13 秒。

下面是我使用 ffprobe 收到的输出示例。

从磁盘读取文件(正确持续时间):

$ ffprobe video.mp4
...
Duration: 00:00:13.05, start: 0.000000, bitrate: 736 kb/s
...

在文件中流式传输(持续时间不正确):

$ cat video.mp4 | ffprobe -i -
...
Duration: 00:00:08.40, start: 0.080000, bitrate: N/A
...

如何让 ffprobe 报告正确的持续时间,同时通过 stdin 在文件中进行流式传输?

最佳答案

您可以使用 ffprobe 的 -show_packets 选项,它将“显示有关输入多媒体流中包含的每个数据包的信息”。 ( Read about it in the ffprobe docs .)

使用此选项,ffprobe 将为流中的每个数据包输出一个条目,如下所示:

dts_time=13.008000

所以我们可以 grep dts_time 的输出:

$ cat video.mp4 | ffprobe -i - -show_packets | grep dts_time
...
dts_time=13.008000
dts_time=13.029333

输出的最后一行将包含最后一个数据包的时间戳,可以将其视为视频的持续时间,因此我们可以这样做:

$ cat video.mp4 \
| ffprobe -i - -show_packets -v quiet \
| grep dts_time \
| tail -n 1 \
| awk -F"=" '{print $2}'
13.029333

关于ffmpeg - 当文件通过标准输入给出时,ffprobe/ffmpeg 报告不同的视频持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56665039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com