met*_*ira 40 ffmpeg duplicates
有没有办法检测视频中的重复帧ffmpeg.
我尝试用-vf旗帜select=gt(scene\,0.xxx)改变场景.但是,它对我的情况不起作用.
Gya*_*yan 55
使用mpdecimate过滤器,其目的是"删除与前一帧没有太大差异的帧以降低帧速率".
这将生成一个控制台读数,显示过滤器认为哪些帧是重复的.
ffmpeg -i input.mp4 -vf mpdecimate -loglevel debug -f null -
生成删除了重复项的视频
ffmpeg -i input.mp4 -vf mpdecimate,setpts=N/FRAME_RATE/TB out.mp4
第setpts滤波器表达在帧频fps的视频产生光滑时间戳.请参阅ffmpeg中什么是视频时间刻度,时基或时间戳的时间戳说明?
Vla*_*čík 19
我也遇到了这个问题,Gyan上面的优秀答案让我开始了,但结果却是去同步音频所以我不得不探索更多选择:
mpdecimate 是我在SO和互联网上找到的标准建议,但我不认为它应该是第一个选择
decimate 精确地删除帧,但它仅对定期出现的重复项有用ffprobe in.mkv将输出检测到的FPS; 它可能看起来像这样
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
如果您in.mkv在媒体播放器中打开媒体,可以找到当时步进一帧的实际帧速率; 然后计算推进播放时间1秒所需的步骤,在我的情况下它是30 fps
N/FRAME_RATE/TB除了使用FRAME_RATE变量之外,N/FRAME_RATE/TB等于ffmpeg文档中的示例(源代码)
设置每秒25帧的固定速率:
setpts=N/(25*TB)
它背后的数学完美地解释了什么是ffmpeg中的视频时间刻度,时基或时间戳?
TB以提高精度FRAME_RATE 变量与文字FPS值(例如25)FRAME_RATE变量N/FRAME_RATE/TBFRAME_RATE自行
计算N/25/TB
FRAME_RATE(我实际上尝试过),它将采取错误检测到的25帧fps,即FRAME_RATE=25,通过mpdecimate过滤器运行它将删除每第6帧,它将更新到FRAME_RATE=20.833所以N/FRAME_RATE/TB实际上将N/20.833/TB 是完全错误这是我用过的好结果
ffmpeg -i in.mkv -vf mpdecimate out.mkv
ffmpeg -i in.mkv -vf decimate=cycle=6,setpts=N/25/TB out.mkv
但以下给了我去同步的音频
ffmpeg -i in.mkv -vf mpdecimate,setpts=N/FRAME_RATE/TB out.mkv
ffmpeg -i in.mkv -vf mpdecimate,setpts=N/25/TB out.mkv
正如你看到的
FRAME_RATE变量并使用,N/25/TB因为实际的FPS没有被正确检测到-af asetpts=N/SAMPLE_RATE/TBSAMPLE_RATE根据删除的重复帧的比例来调整,但在我看来像是额外的不必要的工作,特别是当我的视频在开始时同步音频时,所以最好使用命令来保持它而不是以后修复它的方式如果通常建议的命令不起作用,请尝试:ffmpeg -i in.mkv -vf mpdecimate,setpts=N/FRAME_RATE/TB out.mkv
ffmpeg -i in.mkv -vf mpdecimate out.mkv
要么
ffmpeg -i in.mkv -vf decimate=cycle=6,setpts=N/25/TB out.mkv
(cycle=6因为每第6帧都是重复的,N/25/TB因为删除重复后视频将有25 fps(避免FRAME_RATE变量);根据您的用例进行调整)
| 归档时间: |
|
| 查看次数: |
21208 次 |
| 最近记录: |