流式传输时更改 ffmpeg 输入

时间:2021-07-14 17:17:02

标签: bash

有没有办法在流式传输到 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,我在想是否可以将输入设为目录然后动态更改该目录中的视频,我是处理脚本的新手所以我不知道该怎么做

1 个答案:

答案 0 :(得分:0)

这是一个完整的猜测,基于我对 while guess != fruits: if fruit.index(guess) < fruit.index(fruits): print("-You've guessed low, try again") guess = input("Guess a fruit: blueberry, grape, apple, mango, or watermellon: \n") elif fruit.index(guess) > fruit.index(fruits): print("-You've guessed high, try again") guess = input("Guess a fruit: blueberry, grape, apple, mango, or watermellon: \n") #the loop breaks when guess==fruits and enters the else block else: print("You guessed the right number!") 如何处理交互式输入的了解很少:

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

如果这可行,您或许可以将其调整为更接近您的需求。