gpt4 book ai didi

尽管重新采样音频过滤器,但 Ffmpeg 对 ts 和 m3u8 文件的切割不准确

转载 作者:行者123 更新时间:2023-12-04 22:58:16 24 4
gpt4 key购买 nike

我需要准确地寻找和剪切视频。一些在线消息来源说将 -ss 放在源代码的前面或后面。结果对我来说是一样的。在下面的示例中,开始时间是准确的,但持续时间是不准确的。

ffmpeg -y -ss 00:00:05 -t 00:00:05 -i output.ts 5s.wav
ffprobe 5s.wav

Duration: 00:00:04.74

ffmpeg -y -i output.ts -ss 00:00:05 -t 00:00:05 5s.wav
ffprobe 5s.wav

Duration: 00:00:04.74
有时起点不准确,但持续时间是准确的。通过剪切 ts 文件和剪切未压缩的 wav 文件并同时收听两者,可以清楚地听到这一点。
ffmpeg -y -i output.ts -ss 00:00:15 -t 00:00:05 5s.wav

ffmpeg -y -i output.wav -ss 00:00:15 -t 00:00:05 5s-reference.wav
修复开始时间的方法是,如果我使用包含每个关键帧的字节偏移量的 m3u8 文件,并且我将 -ss 选项放在源文件的前面(如果我把它放在源文件之后,开始时间不准确,但持续时间是准确的):
ffmpeg -y -ss 00:00:15 -t 00:00:05 -i output.m3u8 5s.wav
这修复了开始时间,但持续时间在我没有使用 m3u8 文件时会得到的位置(持续时间仅为 4.47 秒)。
似乎涉及不同的时间戳,有时会使用其中一个。
ts 文件是通过捕获 UDP 流并将其与 ffmpeg 和 -codec:v 副本一起存储而生成的。
是ffmpeg坏了,还是ts文件坏了?如何解决此问题或修复 ts 文件?我意识到视频开始比音频晚,可能是因为视频不是以关键帧开始的。我可以让 ffmpeg 在第一个关键帧之后启动 -codec:v 复制吗?我还注意到,使用 ffprobe 报告“开始:1.400000”。我可以强制它从0开始吗?
任何提示将不胜感激。
我尝试了 ffmpeg 4.3.1 和 ffmpeg git-2020-07-24-21442a8。
output.* 文件的生成如下。语句“af aresample=async=1”应根据 Duration of source video and subtracted audio are different 填充丢失的音频.添加此语句在准确性或持续时间方面没有任何区别。这个问题不是重复的。
ffmpeg -i udp://example:port ^
-af aresample=async=1 ^
-codec:v copy ^
-codec:a aac -ac 2 -ar 44100 -b:a 160k ^
-hls_time 4 -hls_flags single_file -hls_list_size 0 -hls_segment_filename output.ts -hls_segment_type mpegts output.m3u8 ^
-codec:a pcm_s16le -bitexact -ar 11025 -ac 1 output.wav

最佳答案

以 HLS 作为输入,使用

ffmpeg -y -ss 00:00:13 -copyts -start_at_zero -i input.m3u8 -af aresample=async=1 -ss 15 -to 20 -map 0:a ts-cut-m3u8.wav
由于 TS 段没有全局索引,因此比实际入点早一点查找,因此解复用器查找将从下一个关键帧开始。由于正在复制时间戳,因此使用输出 ss/to 来设置范围。 aresample 将填补时间戳间隙(如果有)。对于此输入,在 15 到 20 范围内没有任何输入。有一个早在 5 秒左右。

关于尽管重新采样音频过滤器,但 Ffmpeg 对 ts 和 m3u8 文件的切割不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63188134/

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