У меня есть процесс, который я запускаю ежечасно для обновления 60-секундного видео о погоде.
Я объединяю фоновое видео с сгенерированной аудиодорожкой m4a, прокручивая текст и разделяя верхний и нижний наложения.
Мне нужно все это в формате mp4 и в формате TLS (m3u8).
Прямо сейчас я делаю 3 последовательных сессии ffmpeg и в итоге получаю рендеринг в формате 720p mp4.
Затем я запускаю 4-й сеанс ffpmeg для преобразования mp4 в версию TLS (мне нужны и mp4, и m3u8.)
Я делаю это в 4 запусках ffmpeg, потому что я неразобрался, как объединить фильтры и сделать это за меньшее.
Когда я пытаюсь скомбинировать это, я теряю оверлеи или текст.Я не могу заставить все это выйти за один сеанс.Я пробовал разделять запятые внутри фильтров, но я не нашел правильную комбинацию.
Любая помощь в показе мне, как объединить эту работу и уменьшить количество прогонов, будет принята с благодарностью.
Он запускается на блоке Centos 7 с версией ffmpeg 3.4.1.
#
# Step 1: Combine background video with audio and scrolling text
#
ffmpeg -i /video/weather/media/sunnybeach.mp4 \
-i /video/weather/prod/currentweather.m4a \
-i /video/weather/media/weather-lower-third1.png \
-map 2:v:0 -map 1:a:0 -strict -2 \
-filter_complex "[0]split[txt][orig];[txt]drawtext=fontfile=/var/www/vhosts/30a.tv/httpdocs/openx/lib/pear/Image/Canvas/Fonts/arial.ttf:fontsize=80:fontcolor=white:x=(w-text_w)/2+20:y=h-70*t:textfile=/video/weather/prod/currentweather.txt:bordercolor=black:borderw=2[txt];[orig]crop=iw:50:0:0[orig];[txt][orig]overlay” \
-t 60 -c:v libx264 -y -s hd720 -loglevel quiet /video/weather/prod/currentweather.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 1; exit 1;fi
#
# Step 2: now overlay current lowerthird
#
ffmpeg -i /video/weather/prod/currentweather.mp4 \
-i /video/weather/media/weather-lower-third1.png \
-strict -2 -filter_complex "[0:v][1:v]overlay" -c:a copy -y \
-loglevel quiet $FKWI/currentweather1.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 2; exit 1;fi
#
# Step 3: now overlay current topbanner
#
ffmpeg -i $FKWI/currentweather1.mp4 \
-i /video/weather/media/weather-top-banner.png \
-strict -2 -filter_complex "[0:v][1:v]overlay" -c:a copy -y \
-loglevel quiet $FKWI/currentweather.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 3; exit 1;fi
#
# Step 4: Now make TLS version
#
cd $FKWI/httpdocs/weather
RES1=`/usr/bin/ffmpeg -i $FKWI/httpdocs/currentweather.mp4 \
-profile:v baseline -level 3.0 -s 1280x720 \
-c:a aac -ar 48000 -g 60 -start_number 0 \
-hls_time 6 -hls_list_size 0 -f hls \
-hls_base_url "http://$URL.com/weather/" \
-hls_segment_filename "video%04d.ts" \
-strict -2 -loglevel quiet "currentweather.m3u8" 2>&1>>/dev/null `
if [ $? != 0 ]; then echo fail step 4; exit 1;fi
Этот код дает хорошие результаты для обоих видео, но он занимает 4 прогона, и мне нужно, чтобы это происходило в меньшем количестве прогонов,