用于concat的ffmpeg文档列出了以下方法
ffmpeg -f concat -i mylist.txt -c copy output
mylist.txt文件包含的文件如下
file '/path/to/file1' file '/path/to/file2' file '/path/to/file3' 我所要寻找的是一种持久的方式来实现这种连接,在这种情况下,文件的数量可以不断增加,例如,在livestreaming中。
我将向我的服务器发送10秒的视频(mp4文件),并希望将它们连接在一起,输出到RTMP流(用于livestreaming)。
如果这不是正确的方法,请提出替代方案。
非常想知道人们是如何使用上面的概念(我希望它是如何工作的)从移动设备上发送视频块进行直播的。
发布于 2017-12-22 19:11:19
ffmpeg文档中有一个完全按照您的要求执行的示例:https://trac.ffmpeg.org/wiki/Concatenate
这就是他们的例子:
#!/bin/bash
fn_concat_init() {
echo "fn_concat_init"
concat_pls=`mktemp -u -p . concat.XXXXXXXXXX.txt`
concat_pls="${concat_pls#./}"
echo "concat_pls=${concat_pls:?}"
mkfifo "${concat_pls:?}"
echo
}
fn_concat_feed() {
echo "fn_concat_feed ${1:?}"
{
>&2 echo "removing ${concat_pls:?}"
rm "${concat_pls:?}"
concat_pls=
>&2 fn_concat_init
echo 'ffconcat version 1.0'
echo "file '${1:?}'"
echo "file '${concat_pls:?}'"
} >"${concat_pls:?}"
echo
}
fn_concat_end() {
echo "fn_concat_end"
{
>&2 echo "removing ${concat_pls:?}"
rm "${concat_pls:?}"
# not writing header.
} >"${concat_pls:?}"
echo
}
fn_concat_init
echo "launching ffmpeg ... all.mkv"
timeout 60s ffmpeg -y -re -loglevel warning -i "${concat_pls:?}" -pix_fmt yuv422p all.mkv &
ffplaypid=$!
echo "generating some test data..."
i=0; for c in red yellow green blue; do
ffmpeg -loglevel warning -y -f lavfi -i testsrc=s=720x576:r=12:d=4 -pix_fmt yuv422p -vf "drawbox=w=50:h=w:t=w:c=${c:?}" test$i.mkv
fn_concat_feed test$i.mkv
((i++));
echo
done
echo "done"
fn_concat_end
wait "${ffplaypid:?}"
echo "done encoding all.mkv"发布于 2015-10-28 17:05:10
我尝试用下面的命令连接几个webm文件,它可以工作(在我的例子中)
ffmpeg -i chunk.1.webm -i chunk.2.webm -i chunk.3.webm -i chunk.4.webm -filter_complex "[0:0] [1:0] [2:0] [3:0] concat=n=4:v=1:a=0 [v]" -map "[v]" filter.webm -yhttps://stackoverflow.com/questions/32260368
复制相似问题