我有一个每小时运行一次的过程来更新60秒的天气视频。
我将背景视频与生成的m4a音轨,滚动文本以及单独的顶部和底部覆盖层结合在一起。
我需要mp4和TLS(m3u8)格式的所有这些文件。
现在,我连续进行了3次ffmpeg会话,最终呈现了720p mp4。
然后我运行第4个ffpmeg会话,将mp4转换为TLS版本(我需要mp4和m3u8。)
我要在4个ffmpeg运行中执行此操作,因为我还没有弄清楚如何组合过滤器并减少使用它。
当我尝试将其组合时,会丢失叠加层或文本。我不能一口气拿出来。我已经尝试在过滤器中使用逗号分隔,但是找不到正确的组合。
在向我展示如何结合这项工作并减少运行次数方面的任何帮助将不胜感激。
这在ffmpeg版本3.4.1的Centos 7机器上运行。
#
# 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次,因此我需要减少运行次数。