使用 ffmpeg 生成精确时间段的更快方法

问题描述 投票:0回答:1

我需要创建视频的精确秒段

目前我正在使用此命令(Javascript 字符串),我从文件夹中读取多个视频

segmentLenght
通常是通过计算得到的,所以它的值是浮点数,如
1.66666
1.5
秒,甚至是整数,如
2

ffmpeg -hide_banner  -err_detect ignore_err -i "${inputFolder + '/' + video}" -r 24 -codec:v libx264  -vsync 1  -codec:a aac  -ac 2  -ar 48k  -f segment   -preset fast  -segment_format mpegts  -segment_time ${segmentLenght} -force_key_frames  "expr: gte(t, n_forced * ${segmentLenght})" "${outputFolder + '/' + video.split('.')[0] + '_%d.' + ext}"

这个命令几乎按预期工作,它生成的段与我给它的segmentLenght完全一致(有几毫秒的错误,我从浮点秒数猜测)

问题是处理这些片段需要很长时间。您知道获得相同结果的更快方法吗?

ffmpeg fluent-ffmpeg
1个回答
0
投票

这将输出视频的帧号。

ffmpeg -i your_file.mp4 -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1

像这样:

该视频为400帧。

这是如何将其合并到脚本中的示例。

  for file in "${file_list2[@]}"; do
    frame_count=$(ffmpeg -i $file -map 0:v:0 -c copy -f null -y /dev/null 2>&1 | grep -Eo 'frame= *[0-9]+ *' | grep -Eo '[0-9]+' | tail -1)
      frame_start=$((frame_count - 30))
      ffmpeg -i "$file" -y -vf fade=out:"$frame_start":30 -hide_banner -preset ultrafast "to_mux_$file"
  done

这是一个脚本的摘录,它合并了目录中的所有视频并具有淡入/淡出效果。我必须使用框架才能使其正常工作,随后,我从哪里获取代码。

© www.soinside.com 2019 - 2024. All rights reserved.