如何告诉ffmpeg按顺序遍历目录中的所有文件

时间:2014-08-15 01:52:36

标签: linux bash loops ffmpeg

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文件

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

2 个答案:

答案 0 :(得分:5)

也许您可以使用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替换它接收的输入。

答案 1 :(得分:0)

您可以将视频文件连接到“命名管道”,并将管道用作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. 输入中的文件顺序将是find生成的顺序。您可以在find之后添加“sort”命令以按排序方式生成文件。
  2. 我没有测试过这个,因为我没有安装ffmpeg。但是,它应该工作: - )