AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 483359
Accepted
Joshua Walsh
Joshua Walsh
Asked: 2018-11-22 21:06:53 +0800 CST2018-11-22 21:06:53 +0800 CST 2018-11-22 21:06:53 +0800 CST

当ffmpeg到达命名管道的末尾时,如何阻止它退出?

  • 772

我正在使用一个程序,它在运行时连续将 MPEG-TS 视频数据写入文件。我希望它可以连续运行很多天。

我想使用 ffmpeg 实时转码此视频数据。为了使 .mts 文件在我用完硬盘空间之前不会持续增长,我试图让第一个程序写入命名管道并ffmpeg从该管道读取。

我试过这样做ffmpeg -i /tmp/test.mts -c:v libx264 test.mp4,但似乎 ffmpeg 一旦到达管道末端就会退出,而不是等待新数据。例如,如果我启动程序,等待 30 秒然后运行 ​​ffmpeg,我只会得到大约 50 秒的视频。(30 秒 + ffmpeg 赶上的时间)

我已经设法让它工作了,ffmpeg -i pipe:0 -c:v libx264 test.mp4 < /tmp/test.mts但这对我来说感觉有点hacky,使用标准输入来做到这一点。有没有一种方法可以直接提供命名管道作为 ffmpeg 的输入,并让它在到达当前数据末尾时等待新数据?

谢谢!

fifo ffmpeg
  • 1 1 个回答
  • 3491 Views

1 个回答

  • Voted
  1. Best Answer
    mosvy
    2018-11-23T00:06:48+08:002018-11-23T00:06:48+08:00

    只需从另一个地方打开该 fifo 以进行写入(并保持打开状态)。例子:

    在一个窗口中:

    mkfifo /tmp/test.mts
    exec 7<>/tmp/test.mts
    ffmpeg -i /tmp/test.mts out.mp4
    

    在另一个窗口中:

    cat ... >/tmp/test.mts
    cat ... >/tmp/test.mts
    

    这个想法是读者不会从管道接收到EOF,直到所有打开它以进行写入的进程都关闭它:

    $ mkfifo /tmp/fifo
    $ cat /tmp/fifo &
    [1] 26437
    $ exec 7>/tmp/fifo
    $ echo yes >/tmp/fifo
    yes
    $ echo yes >/tmp/fifo
    yes
    $ echo yes >/tmp/fifo
    yes
    $ exec 7>&-
    $
    [1]+  Done                    cat /tmp/fifo
    

    如果没有exec 7>/tmp/fifowhich 保持对 的写入结束的打开句柄/tmp/fifo, thecat将在第一个 之后终止echo。

    • 3

相关问题

  • 使用 ffmpeg 从 FLAC 到 ALAC 的无损音频转换

  • 来自 PNG 帧的 H.264/MPEG-4:如何以及如何调整压缩

  • ffmpeg 命令在脚本内静默失败,但在直接运行时有效

  • 将 MKV 内的音频转换为 AC3 或 DTS,保留 6.1 声道

  • ffmpeg:普通文件名的“找不到协议”

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve