我已经构建了一个bash脚本,我试图用ffmpeg放大图像,持续10秒:
ffmpeg -r 25 -i image0.jpg -filter_complex "scale=-2:10*ih,zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',scale=-2:720" -y -shortest -c:v libx264 -pix_fmt yuv420p temp_1.mp4
此命令包含在while循环中,循环开头有两个“if”条件:
first=1017
i=0
while read status author mySource myFormat urlIllustration credit shot_id originalShot categories title_EN length_title_EN text_EN tags_EN title_FR length_title_FR text_FR tags_FR title_BR length_title_BR text_BR tags_BR; do
if [ $myFormat != "diaporama" ]; then
let "i = i + 1"
continue
fi
if [ "$shot_id" -lt "$first" ]; then
let "i = i + 1"
continue
fi
rm temp_1.mp4
ffmpeg -r 25 -i image0.jpg -filter_complex "scale=-2:10*ih,zoompan=z='min(zoom+0.0015,1.5)':d=250:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',scale=-2:720" -y -shortest -c:v libx264 -pix_fmt yuv420p temp_1.mp4
let "i = i + 1"
done <../data.tsv
echo "All done."
(我已经删除了循环中的内容,这是能够捕获问题的最小代码)。
现在奇怪的错误:如果我运行这样的代码,我试图生成的视频不会长10秒,只有1-2秒长。 ffmpeg退出时出现错误“[out_0_0 @ 0x2fa4c00] 100个缓冲区在out_0_0中排队,可能有问题。”
现在,如果我在循环开始时删除其中一个“if”条件(第一个或第二个,无关紧要),视频将被生成为10秒长。
造成这个问题的原因是什么?