在串联的视频上添加徽标

问题描述

我正在尝试在级联视频的顶部添加徽标。视频串联和徽标的添加应位于同一过滤器组合中。我的过滤器复合体当前如下所示(由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,setsar=1[v1];[2:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v2];[3:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v3];[4:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v4];[5:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v5];[6:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v6];[7:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v7];[8:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v8];[9:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v9];[10:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v10];[11:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v11];[12:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v12];[13:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v13];[14:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v14];[15:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v15];[16:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v16];[17:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v17];[18:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v18];[19:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v19];[20:v]scale=854:480:force_original_aspect_ratio=1,setsar=1[v20];[21:v]scale=854:480:force_original_aspect_ratio=1,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,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