gpt4 book ai didi

batch-file - 使用限制 CPU 使用优化脚本命令 FFMPEG

转载 作者:行者123 更新时间:2023-12-04 23:24:56 25 4
gpt4 key购买 nike

我正在从事音频/视频上传和流媒体项目。

流程:

我有 2 个音频文件和一个正在使用 FFMPEG 处理的视频文件。我需要以下面提到的方式处理这些音频和视频文件:

  • 从视频文件生成缩略图。
  • 相互合并音频文件。
  • 然后,将混合的音频文件与视频文件合并。
  • 之后,在视频文件上添加水印。
  • 最后,将视频文件分割成小块以进行流式传输

  • 问题:

    一切正常,但问题是所有这些过程都消耗非常高的 CPU 和时间来完成。无论如何优化FFMPEG命令以快速运行。现在,它非常缓慢!

    代码:

    我创建了一个 bat 文件来完成上述过程。下面是在 nodejs 服务器上执行的批处理文件的源代码。
    @echo off

    echo "########################################### Uploading Video #############################################"

    :GETOPTS
    if /I %~1 == --app-path set APP_PATH=%2& shift
    if /I %~1 == --video-name set VIDEO_NAME=%2& shift
    if /I %~1 == --do-merge set IS_DO_MERGE=%2& shift
    if /I %~1 == --audio-name set AUDIO_NAME=%2& shift
    if /I %~1 == --bg-beat-name set BEAT_NAME=%2& shift
    shift
    if not (%1)==() goto GETOPTS

    set USER_DIR=%APP_PATH%data\content\userContent\
    set BEAT_FILE_URI=%APP_PATH%data\content\beats\%BEAT_NAME%
    set FFMPEG=%APP_PATH%data\cmd\ffmpeg\bin\ffmpeg.exe
    set VIDEO_PATH=%USER_DIR%%VIDEO_NAME%
    set MERGED_AUDIO_PATH=%VIDEO_PATH%_mix_audio.aac
    set RESULTANT_PATH=%VIDEO_PATH%_finalized.mp4
    set WATER_MARKED_PATH=%VIDEO_PATH%_finalized_watermark.mp4

    echo "Taking screenshot - %VIDEO_PATH%"
    %FFMPEG% -threads 3 -loglevel panic -y -ss 00:00:01 -i %VIDEO_PATH% -vframes 1 -filter:v scale="500:-1" %VIDEO_PATH%_screenshot.jpg
    if "%IS_DO_MERGE%" == "true" (

    echo "Combining audio with music file"
    echo "OUTPUT: %MERGED_AUDIO_PATH%"
    %FFMPEG% -threads 3 -loglevel panic -y -i %USER_DIR%%AUDIO_NAME% -i %BEAT_FILE_URI% -filter_complex amix=inputs=2:duration=shortest:dropout_transition=3 -shortest %MERGED_AUDIO_PATH%

    echo "Merging Audio & video"
    %FFMPEG% -threads 3 -loglevel panic -y -i %VIDEO_PATH% -i %MERGED_AUDIO_PATH% -c:v libx264 -preset ultrafast -crf 22 -tune zerolatency -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 -shortest %RESULTANT_PATH%

    echo "Adding watermark"
    %FFMPEG% -threads 3 -loglevel panic -y -i %RESULTANT_PATH% -i %APP_PATH%data\assets\watermark.png -filter_complex "overlay=x=(main_w-overlay_w)/2:y=30" -movflags +faststart %WATER_MARKED_PATH%

    #ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

    #%FFMPEG% -threads 3 -loglevel panic -y -i %WATER_MARKED_PATH% -i %APP_PATH%data\assets\watermark.png -filter_complex "overlay=x=(main_w-overlay_w)/2:y=30" %WATER_MARKED_PATH%

    echo "--------------------------------- process completed with no errors ----------------------------------"

    ) else (
    echo "No need to merge as --do-merge is false"

    echo "Adding watermark"
    %FFMPEG% -threads 3 -loglevel panic -y -i %VIDEO_PATH% -i %APP_PATH%data\assets\watermark.png -filter_complex "overlay=x=(main_w-overlay_w)/2:y=30" %WATER_MARKED_PATH%
    )
    echo "###################################### Uploading Video Ended ##########################################"

    最佳答案

  • 编码视频需要大量处理。在多用途服务器上,将转换配置为不影响服务器性能非常重要,即使这意味着在后台运行转换的时间更长。
  • 您可以设置-threads参数降为 1:如果你有 4 个核心,配置 -threads 1应将 FFMPEG 进程限制为 25% 左右的 CPU,这也将限制磁盘使用。使用 3/4 核心很多。
    最新的 CPU 每个内核有 2 个线程,因此 4 个内核上有 8 个线程。
    在多核计算机上,threads 命令控制 FFmpeg 消耗的线程数。
    关于threads参数的更多细节和实验,见https://streaminglearningcenter.com/blogs/ffmpeg-command-threads-how-it-affects-quality-and-performance.html .
  • 转换应排队(仅在先前完成后运行另一个)。
    同时运行多个转换会极大地影响磁盘性能,并可能成为整体性能瓶颈。
  • 您可以在单个进程中执行多项操作(一次读取输入 - 音频、视频、水印并同时生成多个输出)以减少整体处理时间(但这涉及更高的内存要求)。
  • 免费下载开源Video Share VOD turnkey site plugin其中包括管理转换的代码,包括在单个或不同进程中排队和生成多个输出、添加水印、生成 HLS 段的多个选项。
  • 关于batch-file - 使用限制 CPU 使用优化脚本命令 FFMPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323116/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com