如何在FFMPEG中设置视频的持续时间?

use*_*387 17 ffmpeg

如何限制给定视频的视频持续时间.例如,如果我们上传一个不超过5分钟的视频,我需要FFMPEG中的元数据.你能找到答案.

小智 40

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

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

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

  • 注意:这需要放置在命令的中间,例如:ffmpeg -i input.mp3 -t 00:05:00 output.mp3` (3认同)
  • 我们如何将输出持续时间设置为与输入持续时间相同,例如比例为 -1 的可能性? (2认同)

Pau*_*rez 11

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

正如FFMpeg 文档中所指定的


  • -t duration (输入输出)

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

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

    • [-][HH:]MM:SS[.m...]或者[-]S+[.m...][s|ms|us]
  • -to-t互斥的,并且 -t 具有优先权。


用作具有多个输入的输入选项的示例

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

让我们想象一下我想无限期地同时录制我的麦克风和扬声器。(直到我用+强行停止)CtrlC

ffmpeg \
-f pulse -i 1 \
-f pulse -i 2 \
-filter_complex "amix=inputs=2" \
testmix.mp3
Run Code Online (Sandbox Code Playgroud)
  • 现在让我们想象一下,我只想记录系统音频的前 5 秒,并且始终记录我的麦克风,直到我使用+终止进程。CtrlC
ffmpeg \
-t 5 -f pulse -i 1 \
-f pulse -i 2 \
-filter_complex "amix=inputs=2:duration=longest" \
testmix.mp3
Run Code Online (Sandbox Code Playgroud)

注意::duration=longestamix 选项无论如何都是默认选项,因此不需要显式指定

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

注意:关于开始position搜索/寻求这个答案,我做了一些调查,可能也很有趣。


Roe*_*aar 5

一个例子;

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
Run Code Online (Sandbox Code Playgroud)

这会将最长时间设置为 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”。 (4认同)