ffmpeg - 在级联视频上添加 Logo

标签 ffmpeg concatenation video-processing

我正在尝试在级联视频的顶部添加 Logo 。视频连接和 Logo 的添加应该在同一个过滤器复合体中。我的过滤器复合体目前看起来像这样(它是由 Bash 生成的):

[0:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v0];[1:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v1];[2:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v2];[3:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v3];[4:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v4];[5:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v5];[6:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v6];[7:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v7];[8:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v8];[9:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v9];[10:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v10];[11:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v11];[12:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v12];[13:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v13];[14:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v14];[15:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v15];[16:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v16];[17:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v17];[18:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v18];[19:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v19];[20:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v20];[21:v]scale=854:480:force_original_aspect_ratio=1,pad=width=854:height=480:x='if(lt(in_w,854),(854-in_w)/2,0)':0,setsar=1[v21];movie=/home/logo.png, scale=180:-1 [logo];
[v0][v1][v2][v3][v4][v5][v6][v7][v8][v9][v10][v11][v12][v13][v14][v15][v16][v17][v18][v19][v20][v21] concat=unsafe=1:n=22:v=1:a=0[conc]; [conc][logo] overlay=50:50 [outv];
On 0bin , 更容易阅读。所以,有一个很长的视频连接部分,最后,我会尝试添加这样的标志:

[conc][logo] overlay=50:50 [outv];


这是我得到的错误:
[AVFilterGraph @ 0x5640862fc520] No such filter: '' 
Error initializing complex filters.
Invalid argument
如何正确执行此操作?
编辑 :
这是 Bash 脚本:
    echo "Creating the video list..."
    # Number of videos
    VID_NUMBER=$(find $VIDS_PATH -maxdepth 1 -type f -printf . | wc -c)
    # File names can not contain spaces. INPUT_LIST will contain the list of input files, all files in VIDS folder.
    INPUT_LIST=""
    for file in $VIDS_PATH*
    do
        if [ ${file: -4} == ".jpg" ]
        then
            INPUT_LIST="${INPUT_LIST} -loop 1 -t $IMAGE_DURATION -i $file"
        else
            INPUT_LIST="${INPUT_LIST} -i $file"
        fi
    done

    echo "Creating filter complex..."
    # This is the beginning of the filter that is used for concatenation. Has to be an entry for all videos.
    FILTER_COMPLEX_LIST=""
    for ((i=0; i<$VID_NUMBER; i++))
    do
        FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1[v$i];"
    done

    # Insert logo
    FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}movie=$LOGO, scale=180:-1, setpts=PTS-STARTPTS [logo];"

    # Filter final line. This is also generated in a loop. Tells ffmpeg which videos to concat and specifies output [outv]. No sound.
    FILTER_FINAL_LINE=""
    for ((i=0; i<$VID_NUMBER; i++))
    do
        FILTER_FINAL_LINE="${FILTER_FINAL_LINE}[v$i]"
    done
    FILTER_FINAL_LINE="${FILTER_FINAL_LINE} concat=unsafe=1:n=22:v=1:a=0[conc]; [conc][logo] overlay=50:50 [outv];"

    # Run ffmpeg
    date +"%Y %b %d %H:%M:%S Starting ffmpeg to stream videos ..." >> /home/streamer.log
    ffmpeg \
        -y \
        -fflags +genpts \
        $INPUT_LIST \
        -filter_complex "\
        $FILTER_COMPLEX_LIST \
        $FILTER_FINAL_LINE" \
        -map "[outv]" \
        $OUTPUT_SETTINGS \
        $OUTPUT

        sleep 1
done

最佳答案

最后 [outv] 不应该有分号。
所以而不是
FILTER_FINAL_LINE="${FILTER_FINAL_LINE} concat=unsafe=1:n=22:v=1:a=0[conc]; [conc][logo] overlay=50:50 [outv];"
FILTER_FINAL_LINE="${FILTER_FINAL_LINE} concat=unsafe=1:n=22:v=1:a=0[conc]; [conc][logo] overlay=50:50 [outv]"
是正确的
https://superuser.com/questions/1395235/no-such-filter-in-ffmpeg

关于ffmpeg - 在级联视频上添加 Logo ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63745080/

相关文章:

android - av_register_all 中的段错误

在C中连接字符串,哪种方法更有效?

Golang 循环遍历视频帧和像素?

ffmpeg 将白色转换为 alpha

c++ - 使用 C++/python 调整视频捕获输入端口

python - 如何在特定键上合并这两个数据帧?

matlab - 在 MATLAB 中将彩色视频转换为灰度视频

ffmpeg 刻录中文字幕(srt)出现错误

c++ - AVFrame 宽度、高度和线条大小之间的混淆

css-selectors - 返回父元素 - Cypress 中的 CSS 选择器