gpt4 book ai didi

linux - ffmpeg 与动态 block 连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:09 32 4
gpt4 key购买 nike

concat 的 ffmpeg 文档列出了以下方式
ffmpeg -f concat -i mylist.txt -c 复制输出

mylist.txt 文件包含如下文件
文件 '/path/to/file1'
文件 '/path/to/file2'
文件 '/path/to/file3'

我正在寻找一种以持久的方式执行此连接的方法,其中文件的数量可以不断增加,例如在直播中
我将向我的服务器发送每个 10 秒的视频 block (mp4 文件),并希望将它们连接/拼接在一起以输出到 RTMP 流(用于直播)

如果 concat 不是执行此操作的正确方法,请提出替代方案。

真的很想知道人们如何使用上述概念(我希望它是如何工作的)从移动设备发送视频 block 进行直播

最佳答案

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"

关于linux - ffmpeg 与动态 block 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260368/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com