【问题标题】:How to set a video's duration in FFMPEG?如何在 FFMPEG 中设置视频的时长?
【发布时间】:2011-10-17 07:28:27
【问题描述】:

如何限制给定视频的视频时长?例如,如果我们要上传一个不超过 5 分钟的视频,我需要一个 FFMPEG 中的命令。

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    只是为了更详细的使用和示例进一步阐述。

    FFMpeg Docs中指定的那样


    • -t duration(输入/输出)

      • 当用作输入选项(在-i 之前)时,
        • 限制从输入文件读取数据的持续时间。
        • 例如ffmpeg -t 5 -i input.mp3 testAsInput.mp3
          • 5 秒后将自动停止写入
      • 当用作输出选项(在输出网址之前)时,
        • 在其持续时间达到持续时间后停止写入输出。
        • 例如ffmpeg -i input.mp3 -t 5 testAsOutput.mp3
          • 5 秒后将自动停止写入
      • 实际上,在此用例中,结果是相同的。请参阅下面的更多扩展用例。
    • -to position(输入/输出)

      • 停止在位置写入输出或读取输入。
      • 例如与上面相同,但使用 to 而不是 t
    • durationposition 必须是持续时间规范,如 ffmpeg-utils(1) manual. 中指定的那样

      • [-][HH:]MM:SS[.m...][-]S+[.m...][s|ms|us]
    • -to-t互斥,-t 具有优先级。


    使用多个输入作为输入选项的示例

    注意:-f pulse -i 1 是我的系统音频,-f pulse -i 2 是我的麦克风输入

    假设我想同时录制麦克风和扬声器。(直到我用 Ctrl+C 强制停止) em>

    ffmpeg \
    -f pulse -i 1 \
    -f pulse -i 2 \
    -filter_complex "amix=inputs=2" \
    testmix.mp3
    
    • 现在让我们想象一下,我只想再次录制系统音频的前 5 秒,并且始终录制麦克风,直到我 杀死 使用 Ctrl+C)。
    ffmpeg \
    -t 5 -f pulse -i 1 \
    -f pulse -i 2 \
    -filter_complex "amix=inputs=2:duration=longest" \
    testmix.mp3
    

    注意::duration=longest amix 选项无论如何都是默认选项,因此不需要明确指定

    • 现在假设我想要与上面相同的内容,但将录制时间限制为 10 秒。以下示例将满足该要求:
    ffmpeg \
    -t 5 -f pulse -i 1 \
    -t 10 -f pulse -i 2 \
    -filter_complex "amix=inputs=2:duration=longest" \
    testmix.mp3
    
    ffmpeg \
    -t 5 -f pulse -i 1 \
    -f pulse -i 2 \
    -filter_complex "amix=inputs=2:duration=longest" \
    -t 10 testmix.mp3
    

    注意:关于开始position 搜索/寻找this answer,我做了一些调查,可能也很感兴趣。

    【讨论】:

      【解决方案2】:

      一个例子;

      ffmpeg -f lavfi -i color=s=1920x1080 -loop 1 -i "input.png" -filter_complex "[1:v]scale=1920:-2[fg]; [0:v][fg]overlay=y=-'t*h*0.02'[v]" -map "[v]" -t 00:00:03 output.mp4
      

      这会将最长时间设置为 3 秒。请注意,-t 必须在输出文件之前,如果您在此命令的开头设置它,即ffmpeg -t ....,它将不起作用。

      【讨论】:

      • -t 可以是输入或输出选项,具体取决于放置位置。如果您将-t 作为输入选项(在-i 之前),那么它将仅适用于它之前的特定输入。所以你的情况只适用于-i color=s=1920x1080,除非你在-i "input.png"之前添加另一个-t。同时,你无限循环 input.png 并覆盖它。覆盖过滤器不会以最短的输入结束,除非您告诉它这样做,例如overlay=y=-'t*h*0.02':shortest=1
      【解决方案3】:

      使用 -t 选项指定时间限制:

      `-t duration'
          Restrict the transcoded/captured video sequence to the duration specified in seconds. hh:mm:ss[.xxx] syntax is also supported. 
      

      http://www.ffmpeg.org/ffmpeg.html

      【讨论】:

      • 我们如何将输出持续时间设置为与输入持续时间相同,例如 -1 的比例可能性?
      • 注意:这个需要放在命令中间的某个地方,像这样:ffmpeg -i input.mp3 -t 00:05:00 output.mp3
      • 如何根据drawtext文本宽度滚动计算持续时间?
      猜你喜欢
      • 2016-11-02
      • 2017-10-10
      • 1970-01-01
      • 2015-09-10
      • 2013-03-29
      • 2013-02-22
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多