使用 ffmpeg python 为图像设置相等的持续时间

set equal duration to images with ffmpeg python

嗨,我想用图片制作视频。可以说我有一个 60 秒的音频和 6 张图片,我希望我的视频以相同的持续时间显示图像,即每张图片 10 秒 但我不知道该怎么做 这是我的代码

import ffmpeg
input_audio = ffmpeg.input('./SARS/SARS.mp3')
input_still = ffmpeg.input('./SARS/*.jpg',t=20, pattern_type='glob', framerate=24)
(
    ffmpeg
    .concat(input_still, input_audio, v=1, a=1)
    .filter('scale', size='hd1080', force_original_aspect_ratio='increase')
    .output('./SARS/output.mp4')
    .run(overwrite_output=True)
)

任何帮助都适用

我相信您可以使用 ffmpeg-python 实现此目的,但您可以尝试以下方法之一:

普通 CLI

ffmpeg \
  -y \
  -i './SARS/SARS.mp3' \
  -pattern_type glob -framerate 0.1 -i './SARS/*.jpg' \
  -vf scale=size=hd1080:force_original_aspect_ratio=increase \
  './SARS/output.mp4'

您可以 运行 在 Python 中使用 subprocess.run(['ffmpeg','-y',...])

ffmpegio 套餐

对于 one-time 纯粹的转码需求,ffmpegio 实际上是一种矫枉过正,通过 subprocess 直接调用 ffmpeg 已经绰绰有余而且速度更快,但是如果你这样做这种操作经常可以试试

pip install ffmpegio-core
from ffmpegio.ffmpegprocess import run

run({'inputs': [
      ('./SARS/SARS.mp3', None)
      ('./SARS/*.jpg', {'pattern_type':'glob','framerate': 0.1})],
     'outputs': [
      ('./SARS/output.mp4', {'vf':'scale=size=hd1080:force_original_aspect_ratio=increase'})], 
    overwrite=True)

本质上,它类似于 subprocess 对应物,但采用参数字典。