bash - 流式传输时更改 ffmpeg 输入
问题描述
有没有办法在流式传输到 rtmp 时更改 ffmpeg 输入?我有这个 bash 脚本
#! /bin/bash
VBR="1500k"
FPS="24"
QUAL="superfast"
RTMP_URL="rtmp://live.live/live"
KEY="xxxxxxxxxxxxxxxxxxxxx"
VIDEO_SOURCE="video.mp4"
AUDIO_SOURCE="song.mp3"
NP_SOURCE="song.txt"
FONT="font.ttf"
ffmpeg \
-re -f lavfi -i "movie=filename=$VIDEO_SOURCE:loop=0, setpts=N/(FRAME_RATE*TB)" \
-thread_queue_size 512 -i "$AUDIO_SOURCE" \
-map 0:v:0 -map 1:a:0 \
-map_metadata:g 1:g \
-vf drawtext="fontsize=25: fontfile=$FONT: \
box=1: boxcolor=black@0.5: boxborderw=20: \
textfile=$NP_SOURCE: reload=1: fontcolor=white@0.8: x=50: y=50" \
-vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR \
-acodec libmp3lame -ar 44100 -threads 6 -qscale:v 3 -b:a 320000 -bufsize 512k \
-f flv "$RTMP_URL/$KEY"
我想要做的是能够即时更改 VIDEO_SOURCE,我在想是否可以将输入设为目录然后动态更改该目录中的视频,我是处理脚本的新手,所以我不不知道该怎么做
解决方案
这是一个完整的猜测,基于我对如何ffmpeg
处理交互式输入知之甚少:
while :; do
ffmpeg \
-re -f lavfi -i "movie=filename=$VIDEO_SOURCE:loop=0, setpts=N/(FRAME_RATE*TB)" \
-thread_queue_size 512 -i "$AUDIO_SOURCE" \
-map 0:v:0 -map 1:a:0 \
-map_metadata:g 1:g \
-vf drawtext="fontsize=25: fontfile=$FONT: \
box=1: boxcolor=black@0.5: boxborderw=20: \
textfile=$NP_SOURCE: reload=1: fontcolor=white@0.8: x=50: y=50" \
-vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR \
-acodec libmp3lame -ar 44100 -threads 6 -qscale:v 3 -b:a 320000 -bufsize 512k \
-f flv "$RTMP_URL/$KEY"
read -p "Next movie?" VIDEO_SOURCE
[ "$VIDEO_SOURCE" = q ] && break
done
ffmpeg
如果您发送q
到标准输入,应该(?)退出。然后,您的脚本将提示您为VIDEO_SOURCE
. 如果q
再次键入,则循环退出。否则,它将ffmpeg
使用新的视频源文件重新启动。
如果这可行,您也许可以对其进行调整以适应更接近您的需求。
推荐阅读
- python - 如何使用密码将 Superset 连接到 Redis?
- github - 在 Bitbucket 上创建存储库之前
- apache-kafka - Kafka FileStreamSinkConnector 在被我删除后重新创建了要写入的文件
- javascript - React JS 在单独的行中呈现列表数据
- jquery - jQuery 无法修改通过 src 加载的 iframe 内容的子 dom
- java - Java:Feign 客户端中的默认值
- java - 当我们有 Class 类型的对象时如何在 Java 中创建一个实例
- python - 如何修复对话(文本)时间序列数据中的类别不平衡?
- python - 遍历所有值并找到该值的键
- ruby-on-rails - 使用 activeadmin_dynamic_fields 控制多个输入