【问题标题】:ffmpeg output to multiple files simultaneouslyffmpeg 同时输出到多个文件
【发布时间】:2012-08-20 15:59:08
【问题描述】:

ffmpeg 需要什么格式/语法才能将相同的输入输出到几个不同的“输出”文件?例如不同的格式/不同的比特率?它是否支持输出的并行性?

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    ffmpeg 文档已更新,包含更多关于此的信息,选项取决于您使用的 ffmpeg 版本:http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs

    【讨论】:

    • 多流输入当然还有多输出呢?
    • 对于多个输入,我认为您需要使用 -map :trac.ffmpeg.org/wiki/Map
    【解决方案2】:

    FFMpeg documentation,FFmpeg 写入任意数量的输出“文件”

    只需确保每个输出文件(或流)前面都有正确的输出选项。

    【讨论】:

    • 多流输入当然还有多输出呢?
    【解决方案3】:

    我用

    ffmpeg -f lavfi -re -i 'life=s=300x200:mold=10:r=25:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16' \
    -f lavfi -re -i sine=frequency=1000:sample_rate=44100 -pix_fmt yuv420p \
    -c:v libx264 -b:v 1000k -g 30 -keyint_min 60 -profile:v baseline -preset veryfast -c:a aac -b:a 96k  \
    -f flv "rtmp://yourname.com:1935/live/stream1" \
    -f flv "rtmp://yourname.com:1935/live/stream2" \
    -f flv "rtmp://yourname.com:1935/live/stream3" \
    

    【讨论】:

    • 使用tee muxer,这样您只需编码一次,而不是三次。
    【解决方案4】:

    您有什么理由不能只运行多个ffmpeg 实例?我有很好的结果......

    通常我所做的是在 source 文件上运行一次ffmpeg 以使其符合基本标准(比如更高质量的 h.264 mp4 文件),这将确保如果您的 source 文件有任何问题,您的其他作业将运行得更快,因为它们将在第一遍中被清理

    然后使用新的 source/input 文件运行 x 个 ffmpeg 作业,例如在 bash ...

    你看到“...”的地方就是你放置所有编码选项的地方。

    # create 'base' file
    
    ffmpeg -loglevel error -er 4 -i $INPUT_FILE ... INPUT.mp4 >> $LOG_FILE 2>&1
    
    # the command above will run and then move to start 3 background jobs
    # text output will be sent to a log file
    
    echo "base file done!"
    
    # note & at the end to send job to the background
    
    ffmpeg ... -i INPUT.mp4 ... FILENAME1.mp4 ... >/dev/null 2>&1 &
    ffmpeg ... -i INPUT.mp4 ... FILENAME2.mp4 ... >/dev/null 2>&1 &
    ffmpeg ... -i INPUT.mp4 ... FILENAME3.mp4 ... >/dev/null 2>&1 &
    
    # wait until you have no more background jobs running
    
    wait > 0
    echo "done!"
    

    每个后台作业都将并行运行,并且(基本上)在您的 CPU 上保持平衡,因此您可以最大化每个内核。

    【讨论】:

    • 是的,你可以,尽管如果你使用一个输入进程 (ffmpeg-users.933282.n4.nabble.com/…) 据说可以“节省 cpu”,有时它是不可能的,例如在直播中......
    • 我正在乱读/dev/video0,第二个ffmpeg 抱怨设备正忙。
    【解决方案5】:

    基于http://sonnati.wordpress.com/2011/08/30/ffmpeg---the-swiss-army-knife-of-internet-streaming---part-iv/ 和http://ffmpeg-users.933282.n4.nabble.com/Multiple-output-files-td2076623.html

    ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k
    

    或者您可以将输出通过管道传输到“tee”并将其发送到“X”其他进程以实际进行编码,例如

    ffmpeg -i 输入 - |三通...

    这可能会节省 cpu,因为它可能会启用更多的输出并行性,这显然是不可用的

    http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputshere

    【讨论】:

    【解决方案6】:

    我就是这样做的

    ffmpeg -re -i nameoffile.mp4 -vcodec libx264 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv  \
    -f flv rtmp://rtmp.1.com/code \
    -f flv rtmp://rtmp.2.com/code \
    -f flv rtmp://rtmp.3.com/code \
    -f flv rtmp://rtmp.4.com/code \
    -f flv rtmp://rtmp.5.com/code \
    

    但没有像我预期的那样完全正常工作,并且使用 nginx 进行重新流式处理

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2019-10-07
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多