背景の画像を複数用意し、順番にフェドアウト、フェードインさせてみました。
<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content=
"width=device-width, initial-scale=1.0">
<title>Fade Background Image</title>
<style>
body {
    margin: 0;
    padding: 0;
    height: 100vh;
    background: 
    url('pic/pic_01.jpg') no-repeat center center/cover;
    /* 実行直後に画面に表示される画像の配列を定義 */
    transition: background-image 4s ease; /* ※ */
    /* 画像の切り替え時間 */
}
.fade-out {
    opacity: 0;
}
.fade-in {
    opacity: 1;
}
</style>
</head>
<body>
<script>
    // 画像の配列を定義
    // 表示の順番は以下の通り
    // pic_01,pic_02,pic_03,pic_04,pic_02,pic_03,pic_04・・・
    const images = 
    ['pic/pic_02.jpg', 'pic/pic_03.jpg', 'pic/pic_04.jpg'];
    let currentIndex = 0;
    // 画像を切り替える関数
    function changeBackgroundImage() {
        document.body.classList.add('fade-out');
        setTimeout(() => {
            document.body.style.backgroundImage = 
            `url('${images[currentIndex]}')`;
            document.body.classList.remove('fade-out');
            document.body.classList.add('fade-in');
            // currentIndex が images.length に達した場合
            // currentIndex は0に戻り、
            // 配列の末尾に達した場合に最初の要素に戻る。
            currentIndex = (currentIndex + 1) % images.length;
        }, 2000);  // ※ 
        // 最初の画像のフェードアウトの時間
    }
    changeBackgroundImage();
    // 一定時間ごとに2枚目以降の画像を切り替える
    setInterval(changeBackgroundImage, 8000);  // ※ 
    // 画像の切り替え間隔
</script>
</body>
</html>
<!-- index.html -->
3箇所の※印で設定した時間の関係(バランス)が意外と面倒でした。


 
 
 

 
