关于使用FFmpeg实现定时切割长视频、拼接短视频并批量导出独立文件的技术问询
关于使用FFmpeg实现定时切割长视频、拼接短视频并批量导出独立文件的技术问询
当然可以用FFmpeg搞定这个需求!我给你拆解一下思路,再附上可直接用的脚本方案:
首先,咱们先把需求量化清楚:
- 长视频总时长:42分35秒 = 2555秒
- 每次截取长视频的片段长度:3分50秒 = 230秒
- 需要给每个长视频片段后面拼接46秒的短视频,然后导出成单独的文件
实现方案(以Linux/macOS的Bash脚本为例)
这个方案会自动计算需要拆分的片段数量,逐个截取长视频片段,再和短视频拼接导出:
# 先定义你的视频文件路径 LONG_VIDEO="你的长视频文件.mp4" SHORT_VIDEO="你的46秒短视频.mp4" SEGMENT_DURATION=230 # 3分50秒对应的秒数 # 获取长视频总时长(取整数秒) TOTAL_DURATION=$(ffmpeg -i "$LONG_VIDEO" -show_entries format=duration -v quiet -of csv=p=0 | cut -d. -f1) # 计算需要拆分的片段数(向上取整,避免最后一段遗漏) NUM_SEGMENTS=$(( (TOTAL_DURATION + SEGMENT_DURATION - 1) / SEGMENT_DURATION )) # 循环处理每个片段 for ((i=0; i<NUM_SEGMENTS; i++)); do # 计算当前片段的起始时间 START_TIME=$((i * SEGMENT_DURATION)) # 从长视频中截取当前片段(无损拷贝,速度快) ffmpeg -ss "$START_TIME" -i "$LONG_VIDEO" -t "$SEGMENT_DURATION" -c copy temp_segment.mp4 -y # 生成拼接列表文件 echo "file 'temp_segment.mp4'" > concat_list.txt echo "file '$SHORT_VIDEO'" >> concat_list.txt # 拼接片段和短视频,导出为独立文件 ffmpeg -f concat -safe 0 -i concat_list.txt -c copy "output_$((i+1)).mp4" -y done # 清理临时文件 rm temp_segment.mp4 concat_list.txt
关键注意事项
- 编码一致性:如果长视频和短视频的编码格式、分辨率、帧率不一致,直接用
-c copy会失败,这时候去掉-c copy参数,让FFmpeg自动重新编码即可(速度会慢一些,但兼容性更好) - Windows系统适配:如果用Windows,把上面的脚本改成BAT脚本即可,变量和循环语法略有调整,比如
set SEGMENT_DURATION=230,循环用for /l %%i in (0,1,%NUM_SEGMENTS%) do ... - 最后一段处理:脚本会自动处理最后一段不足3分50秒的长视频片段,同样会拼接短视频后导出
备注:内容来源于stack exchange,提问作者Jaga G
相关产品推荐
相关产品推荐

