gpt4 book ai didi

ffmpeg:是否可以替换可变帧率视频中的帧?

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

用于视频处理的机器学习算法通常适用于帧(图像)而不是视频。
在我的工作中,我使用 ffmpeg 将特定场景转储为一系列 .png 文件,以某种方式处理它们(去噪、去模糊、着色、注释、修复等),将结果输出到相等数量的 .png 文件中,然后用新帧更新原始视频。
这适用于恒定帧速率 (CFR) 视频。我转储图像 as so (例如,从 1:47 开始的 50 帧序列):

ffmpeg -i input.mp4 -vf "select='gte(t,107)*lt(selected_n,50)'" -vsync passthrough '107+%06d.png'
然后在编辑图像后,我替换原件 as so (对于 12.5fps CFR 视频):
ffmpeg -i input.mp4 -itsoffset 107 -framerate 25/2 -i '107+%06d.png' -filter_complex "[0]overlay=eof_action=pass" -vsync passthrough -c:a copy output.mp4
但是,我使用的许多视频都是可变帧速率 (VFR),这带来了一些挑战。
一个简单的解决方案是将 VFR 视频转换为 CFR,无论如何 ffmpeg 都想做,但我想知道是否可以避免这种情况。原因是 CFR 需要丢帧——因为 ML 视频处理的目的通常是提高输出,我想避免这种情况——或者复制帧——但是我现在正在使用的升级算法使用数据的前一帧和下一帧 - 如果前一帧或下一帧是重复的,那么......没有用于放大的数据。
-vsync passthrough ,我曾希望我可以简单地删除 -framerate选项,并按原样保留原始帧,但生成的命令:
ffmpeg -i input.mp4 -itsoffset 107 -i '107+%06d.png' -filter_complex "[0]overlay=eof_action=pass" -vsync passthrough -c:a copy output.mp4
使用 ffmpeg 的 default of 25fps ,并丢掉很多帧。是否有可靠的方法来替换 VFR 视频中的帧?

最佳答案

是的,它可以做到,但它很复杂。至关重要的是,覆盖视频具有与底层视频完全相同的帧时间戳,以便该过程可靠地工作。生成这样的 VFR 视频片段覆盖需要从源视频中捕获帧时间戳,以生成精确定时的替换片段。
该过程的简短版本是将上述命令替换为以下命令以提取图像:

ffmpeg -i input.mp4 -vf "select='gte(t,107)*lt(selected_n,50)',showinfo" -vsync passthrough '107+%06d.png' 2>&1 | 'sed s/\r/\n/g' | showinfo2concat.py --prefix="107+" >concat.txt
这需要一个可以下载的脚本 here .编辑图像后,更新源视频:
ffmpeg -i input.mp4 -f concat -safe 0 -i concat.txt -filter_complex"[1]settb=1/90000,setpts=9644455+PTS*25/90000[o];[0:v:0][o]overlay=eof_action=pass" -vsync passthrough -r 90000 output.mp4
其中 90000 是 timescale (时基的倒数),而 9644455 是要替换的第一帧的 PTS。
source有关这些命令实际作用的更多详细信息。

关于ffmpeg:是否可以替换可变帧率视频中的帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63880205/

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