#ffmpeg #concatenation #video-processing
#ffmpeg #конкатенация #обработка видео #объединение
Вопрос:
Я пытаюсь добавить логотип поверх объединенного видео. Объединение видео и добавление логотипа должны выполняться в одном и том же комплексе фильтров. Мой комплекс фильтров в настоящее время выглядит следующим образом (он генерируется 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];
На 0bin это легче читать. Итак, есть действительно длинная часть объединения видео, и в конце я бы попытался добавить логотип вот так:
[conc][логотип] наложение=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
Комментарии:
1. Я отредактировал свой вопрос, чтобы включить скрипт bash. Нет, путь правильный. Причина, по которой я пытался сделать это таким образом, заключается в том, что это казалось проще, чем вычислять, какой ввод будет логотипом. Действительно, я мог бы использовать i 1 для логотипа.
2. Я попытался добавить i с помощью -i, ошибка та же. Комплекс фильтров выглядит следующим образом: 0bin.net/paste /…
3. Да, проблема заключалась в том, что в последнем [outv] не должно быть точки с запятой ([outv];) Спасибо за вашу помощь! ibb.co/ncgcdbt
Ответ №1:
В последнем [outv] не должно быть точки с запятой.
Поэтому вместо
FILTER_FINAL_LINE=»${FILTER_FINAL_LINE} concat=unsafe=1:n = 22:v = 1:a = 0 [conc]; [conc] [наложение логотипа] = 50:50 [outv];»
FILTER_FINAL_LINE=»${FILTER_FINAL_LINE} concat=unsafe=1:n = 22:v = 1:a = 0 [conc]; [conc] [наложение логотипа] = 50:50 [outv]»
правильно
https://superuser.com/questions/1395235/no-such-filter-in-ffmpeg