如何解决在串联的视频上添加徽标
我正在尝试在级联视频的顶部添加徽标。视频串联和徽标的添加应位于同一过滤器组合中。我的过滤器复合体当前如下所示(由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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。