当我像这样运行它时,它有效:
ffmpeg -re -y -i /home/video.webm -ss 2 \
-i /home/audio.ogg -map 0:0 -map 1:0 \
-c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k \
-bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -async 1 \
-f flv "rtmps://live-api-s.facebook.com:443/rtmp/xxx"
但是,当我引入一个变量时,遇到了一个问题:
STREAM=-f flv \"rtmps://live-api-s.facebook.com:443/rtmp/xxx\"
ffmpeg -re -y -i /home/video.webm -ss 2 \
-i /home/audio.ogg -map 0:0 -map 1:0 \
-c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k \
-bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -async 1 \
$STREAM
当我运行这个时,我得到:
At least one output file must be specified
我尝试过多种不同的方法来做到这一点,但都有错误。
答案1
这一行:
STREAM=-f flv \"rtmps://live-api-s.facebook.com:443/rtmp/xxx\"
flv \"rtmps://live-api-s.facebook.com:443/rtmp/xxx\"
尝试在STREAM
环境变量设置为 的情况下运行-f
。你没收到吗bash: flv: command not found
?
比较STREAM=-f env
。
该变量未针对当前 shell 设置,$STREAM
稍后将扩展为空字符串。但即使你这样做了:
# but don't
STREAM='-f flv "rtmps://live-api-s.facebook.com:443/rtmp/xxx"'
不会起作用。$STREAM
后来没有引用进行单词拆分和文件名生成并且从变量扩展中出现的引号对于扩展变量的 shell 来说并不是特殊的。
看看这个:我们如何运行存储在变量中的命令?在你的情况下,使用数组的解决方案如下:
STREAM=(-f flv "rtmps://live-api-s.facebook.com:443/rtmp/xxx")
ffmpeg … "${STREAM[@]}"
还请考虑变量名称为小写。