【问题标题】:How do I set up an ffmpeg queue?如何设置 ffmpeg 队列?
【发布时间】:2012-09-23 18:17:18
【问题描述】:

我试图在我的服务器上编码许多视频,但 FFMPEG 是资源密集型的,所以我想设置某种形式的队列。我网站的其余部分使用 PHP,但我不知道是否应该使用 PHP、Python、BASH 等。我想我可能需要使用 CRON,但我不确定如何告诉 ffmpeg 启动一个新任务(从列表中)完成之前的任务后。

【问题讨论】:

    标签: bash cron ffmpeg queue batch-processing


    【解决方案1】:

    我们将在 bash 脚本中使用FIFO(先进先出)。该脚本需要在cron(或任何脚本,任何调用FIFO的终端)之前运行,以向该脚本发送ffmpeg命令:

    #!/bin/bash
    
    pipe=/tmp/ffmpeg
    
    trap "rm -f $pipe" EXIT
    
    # creating the FIFO    
    [[ -p $pipe ]] || mkfifo $pipe
    
    while true; do
        # can't just use "while read line" if we 
        # want this script to continue running.
        read line < $pipe
    
        # now implementing a bit of security,
        # feel free to improve it.
        # we ensure that the command is a ffmpeg one.
        [[ $line =~ ^ffmpeg ]] && bash <<< "$line"
    done
    

    现在(当脚本运行时),我们可以使用以下语法将任何ffmpeg 命令发送到命名管道:

    echo "ffmpeg -version" > /tmp/ffmpeg
    

    并带有错误检查:

    if [[ -p /tmp/ffmpeg ]]; then
        echo "ffmpeg -version" > /tmp/ffmpeg
    else
        echo >&2 "ffmpeg FIFO isn't open :/"
    fi
    

    他们会自动排队。

    【讨论】:

    • 是的,但我的视频将被动态添加。所以我不想手动转换它们。当在我的服务器上下载新视频时,我希望它将视频添加到队列中
    • POST 从头开始​​重写以满足您的需求。
    • 漂亮我回家试试这个
    • 我不能投票,因为我太新了。不过我还是接受了!谢谢。
    【解决方案2】:

    谢谢你。正是应用这种技术来创建一个 ffmpeg 队列。 不过我做了1个小改动。由于某种原因,此队列仅适用于 2 个项目。当第一个项目完成时,我只能发送第三个项目。

    我相应地修改了脚本:

    while true; do
    
    # added tweak to fix hang
    exec 3<> $pipe
    
    # can't just use "while read line" if we 
    # want this script to continue running.
    read line < $pipe
    

    我基于: https://stackoverflow.com/questions/15376562/cant-write-to-named-pipe

    只是想我应该分享这个以备将来使用。

    【讨论】:

    • 嗯,这是对 StardustOne 出色答案的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2011-12-27
    相关资源
    最近更新 更多