我正在寻找一种方法来自动检查 3 个内容相同但使用 3 种不同分辨率(320x180、640x360、1280x720)的视频文件,并识别丢帧并用音频从关键帧到关键帧替换受影响的帧,确保音频波形与其他文件对齐。
本质上,每个文件都具有完全相同的帧数,并且每个音频波形文件在每个单独的文件中都完全排列。
使用 ffmpeg 可以实现这个吗?
答案1
我对 FFMPEG 还不熟悉...但我一直在做的研究表明这确实是可行的。
识别丢帧:
/bin/bash 复制代码
rm framediffs.lis
ffmpeg -i MPEG0004.AVI f%d.png
framenum=1 while [ $framenum -lt 50 ] do file1=f$(( $framenum )).png file2=f$(( $framenum + 1 )).png 比较 -metric RMSE $file1 $file2 NULL: 2>diff.lis fdiff= cat diff.lis |cut -d ' ' -f 1
echo $file1 $file2 $fdiff>>framediffs.lis framenum=$(( $framenum + 1 )) done
cat framediffs.lis
模拟一些丢帧:
比较-metric RMSE f45.png f47.png NULL:比较-metric RMSE f45.png f48.png NULL:比较-metric RMSE f46.png f48.png NULL:比较-metric RMSE f47.png f50.png NULL:
然后如果需要的话,剪掉文件的坏部分......
无需重新编码即可剪切一个片段: ffmpeg -i 源.mp4 -ss 00:00:05 -t 00:00:10 -c 复制 cut_video.mp4
或者从未显示丢失的文件中替换某个片段......
替换来自好文件的片段: ffmpeg -i in.mp4 -vf trim=X -c:a 复制出.mp4 ffmpeg -i in.mp4 -vf trim=X,setpts='if(eq(N,0),0,PTS)' -c:a 复制出.mkv
如果是音频差异,则提取音频然后重新混合坏文件......
从文件中提取音频并重新混合(我认为应该可以在两个关键帧之间选择一个片段): ffmpeg -i vid.mkv -map 0:2 -ac 2 aud.wav avconv -i INPUT_FILE_WITH_BROKEN_SOUND.mp4 -i SECOND_INPUT_FILE.mkv -c copy -map 0:v:0 -map 1:a:1 OUTPUT.mp4
正如我所说,我是新手,希望得到一些建议,避免浪费时间。谢谢!