使用选择过滤器时,ffplay保持视频/音频同步

时间:2016-08-24 11:38:18

标签: select audio filter ffmpeg synchronization

我尝试使用ffplay播放/跳过某些视频片段。我跳过的第一种方法是说框架100到400是:

ffplay -vf "select='lte(n\,100)+gte(n\,400)'" -i INPUT

这会跳过所需的帧,但是在跳过的帧期间它也会冻结视频。我尝试通过使用setpts选项修改视频演示时间戳(PTS)来解决此问题:

ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -i INPUT

这似乎工作(仍然有点冻结,猜测是因为缓冲),但现在音频不同步。我已尝试应用选择过滤器并修改音频上的PTS

ffplay -vf "select='lte(n\,100)+gte(n\,400)',setpts='PREV_OUTPTS'" -af "aselect='lte(n\,100)+gte(n\,400)',asetpts='PREV_OUTPTS'" -i INPUT

这会跳过一些音频帧,但仍然不同步。我尝试过使用aresample = async = 10000选项,但结果相似。将部分/全部过滤器移动到输出(将它们放在-i INPUT之后)也不起作用。

有人知道如何使用ffplay跳过部分视频吗?非常感谢

1 个答案:

答案 0 :(得分:1)

音频帧编号!= 视频帧编号。由FFmpeg编码器生成的AAC音频是每帧1024个采样,因此48kHz流每秒具有48000/1024 = 46.875个音频帧。其他编解码器可能有不同的速率。

使用 try: if module.parent is not None: if module.parent.path is not None: path = os.pathsep.join([origPath] + module.parent.path) os.environ["PATH"] = path self._CopyFile(module.file, target, copyDependentFiles) else: path = os.pathsep.join([origPath, os.path.dirname(module.parent.file)]) os.environ["PATH"] = path print '========================================================' finally: os.environ["PATH"] = origPath 代替t,并生成一系列连续的时间戳。

n

我假设视频帧速率为25 fps。相应修改。