gpt4 book ai didi

video - 如何正确制作视频循环?

转载 作者:行者123 更新时间:2023-12-04 23:13:54 25 4
gpt4 key购买 nike

我想循环播放这个视频https://www.nicovideo.jp/watch/sm16617386 .我想以这样的方式播放一个 mp4 文件,只要它到达视频中的某个点(比如 30.3 秒),它就会循环回来(例如 5.85 秒)。

我尝试在 ffplay.c 中添加此代码,但效果不佳,我可以听到过渡。我猜寻找速度不够快,或者音频需要以某种独立的方式循环播放。

static void video_refresh(void *opaque, double *remaining_time)
{
(original code here...)
time = get_master_clock(is);
if (isnan(time))
time = (double)is->seek_pos / AV_TIME_BASE;
if (time > jump_when) {
stream_seek(is, (int64_t)(6.0 * AV_TIME_BASE), (int64_t)(0.0 * AV_TIME_BASE), 0);
}
}

我目前的计划是深入研究 ffmpeg,了解视频和音频解码器的工作原理,并保存解码器的状态/加载状态。

最佳答案

  • "I want to play an mp4 file in such a way, that whenever it gets to some point in the video (eg: 30.3 seconds), it will loop back to earlier time (eg: 5.85 seconds)."

  • "I can hear the transition. I guess seeking isn't fast enough, or audio needs to be looped in an independent way somehow."



您的链接视频每 2 秒有一个关键帧(准确地说是 2.023)。
所以你只能寻找像 2.023、4.023、6.023、8.023 等这样的秒数。

如果你想要 5.850 秒你需要首先在 4 秒处寻找关键帧,然后每下一帧解码到所需的时间戳 5.850。此时您可以显示视频。

我过去使用的解决方案是简单地将 P/B 帧的时间戳 ( PTS ) 调整为与关键帧相同,然后再将它们的字节馈送到 H264 解码器。 (这种方式迫使解码器快进视频以保持同步)。我只在命令行中使用了 FFmpeg,所以不确定如何在显示的代码中更改显示时间。

为什么? :
在 MPEG 压缩中,您可以 只寻找关键帧 .每个音频帧都是一个关键帧,但视频有 3 种类型的帧: I (即关键帧或全图),还有 PB帧(随着时间的推移与主图片只有很小的差异)。这些 P/B 帧需要最近的前一个关键帧才能解码 第一个 所以他们也有像素数据要显示。 P/B 帧不能单独解码(因为它们不是完整的图像数据)。

关于video - 如何正确制作视频循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310704/

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