【问题标题】:How to tell ffmpeg to loop through all files in directory in order如何告诉ffmpeg按顺序遍历目录中的所有文件
【发布时间】:2014-10-08 19:42:42
【问题描述】:

ffmpeg 对此有 concat 选项,但经过一天的流式传输后,所有流都开始工作非常糟糕并且声音中断。

我尝试查看循环,但无法弄清楚如何使用 ffmpeg 命令执行循环,以便对 1 个目录中的所有文件进行转码

/lely/ffmpeg -y -re -i /home/ftp/kid1.mp4 -vcodec copy -acodec copy -dts_delta_threshold 1000 -ar 44100 -ab 32k -f flv rtmp://10.0.0.17:1935/live /孩子

在文件夹/home/ftp/ 中有文件kid1、kid2、kid3 - 所有*.mp4 文件

所以基本上我想要一个循环来每次前一个结束时将输入更改为下一个文件。

【问题讨论】:

    标签: linux bash loops ffmpeg


    【解决方案1】:

    也许您可以使用findxargs 来帮助您为ffmpeg 提供文件:

    find /home/ftp -name "*.mp4" | xargs -I $ /lely/ffmpeg -y -re -i $ -vcodec copy -acodec copy -dts_delta_threshold 1000 -ar 44100 -ab 32k -f flv rtmp://10.0.0.17:1935/live/kid
    

    这里你先让find 查找/home/ftp 中的所有mp3 文件。

    然后将结果提供给xargs。对于 xargs,你告诉它用你的 ffmpeg 字符串中的令牌 $ 替换它收到的输入。

    【讨论】:

    • 成功了,谢谢。但是由于某种原因它没有从第一个文件开始?
    • 在 find pipe 和 xargs 之后添加一个合适的 sort 命令。像这样find | sort | xargs。您可以检查sort 参数以获得所需的排序类型。如果有帮助,请投票:)
    【解决方案2】:

    您可以将视频文件连接到“命名管道”并将该管道用作 ffmpeg 的源。 例如:

        mkfifo pipeFile            # create a FIFO file (named pipe)
        cat $(find /home/ftp -name "*.mp4") > pipeFile &  # concatenate video files do the pipe (do not forget the "&" for running in background)
        /lely/ffmpeg -y -re -i pipeFile -vcodec copy -acodec copy -dts_delta_threshold 1000 -ar 44100 -ab 32k -f flv rtmp://10.0.0.17:1935/live/kid  # run ffmpeg with the pipe as the input
    

    注意事项:

    1. 输入中文件的顺序将是查找生成的。您可以在查找后添加“排序”命令,以排序方式生成文件。
    2. 我没有对此进行测试,因为我没有安装 ffmpeg。但是,它应该可以工作:-)

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多