编写Bash脚本实现使用FFmpeg批量合并视频

前言

使用FFmpeg能够很方便的合并同分辨率的视频。很多时候我们可能需要批量化合并视频,此时可以通过编写Bash脚本来实现。
在这里插入图片描述

实现

批量合并视频

合并三个文件夹中的视频结果:

result_path1=task1
result_path2=task2
result_path3=task3
concat_path=concat-videos

if [ ! -d "./$concat_path" ]; then
  mkdir ./$concat_path
fi


for i in {0..20}
do
  echo "process: $i"
  ffmpeg -i ./$result_path1/$i/*.mp4 -i ./$result_path2/$i/*.mp4  -i ./$result_path3/$i/*.mp4 -lavfi hstack=3 -y ./$concat_path/concat-video$i.mp4
done

注:hstack为水平合并,vstack为竖直合并。

根据宽高关系合并视频

有时视频是宽大于高,而有时是高大于宽。此时需要根据宽高关系自适应选择hstack或者vstack。

result_path1=task1
result_path2=task2
result_path3=task3

concat_path=concat-videos

if [ ! -d "./$concat_path" ]; then
  mkdir ./$concat_path
fi

function getWidth(){
    width=( $(ffprobe -v error -show_entries stream=width -of csv=p=0  $1))
    echo $width
}

function getHeight(){
    height=( $(ffprobe -v error -show_entries stream=height -of csv=p=0  $1))
    echo $height
}


for i in {0..20}
do
  echo "process: $i"
  widthInfo=$(getWidth ./$result_path1/$i/*.mp4)
  heightInfo=$(getHeight ./$result_path1/$i/*.mp4)
  if [ $widthInfo -gt $heightInfo ]
  then
    #echo $widthInfo ">" $heightInfo
    ffmpeg -i ./$result_path1/$i/*.mp4 -i ./$result_path2/$i/*.mp4 -i ./$result_path3/$i/*.mp4 -qscale 0 -lavfi vstack=3 -y ./$concat_path/concat-$i.mp4
  else
    #echo $widthInfo "<" $heightInfo
    ffmpeg -i ./$result_path1/$i/*.mp4 -i ./$result_path2/$i/*.mp4 -i ./$result_path3/$i/*.mp4 -qscale 0 -lavfi hstack=3 -y ./$concat_path/concat-$i.mp4
  fi
done

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com
在这里插入图片描述

参考资料

[1] 【持续更新】FFmpeg常用命令小结_TracelessLe的专栏-CSDN博客_ffmpeg更新命令
[2] Bash语法中的For Loop_TracelessLe的专栏-CSDN博客_bash for loop
[3] Bash语法中的if else_TracelessLe的专栏-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用FFmpeg分割视频文件可以通过编写脚本完成。以下是一些基本步骤: 1. 安装FFmpeg 首先需要安装FFmpeg。可以从FFmpeg的官方网站 https://www.ffmpeg.org/ 下载适合自己系统的安装包进行安装。 2. 编写脚本 在安装好FFmpeg之后,可以开始编写脚本。下面是一个示例脚本,用于将一个视频文件分割成多个小的视频文件。 ``` #!/bin/bash # 定义变量 INPUT_VIDEO="input.mp4" OUTPUT_DIR="output" START_TIME="00:00:00" DURATION="00:05:00" FILE_NAME_PREFIX="video_" # 创建输出目录 mkdir -p $OUTPUT_DIR # 分割视频文件 ffmpeg -i $INPUT_VIDEO -ss $START_TIME -t $DURATION -c copy -map 0 $OUTPUT_DIR/$FILE_NAME_PREFIX%03d.mp4 ``` 在这个脚本中,需要定义一些变量。其中,`INPUT_VIDEO`是需要分割的视频文件名;`OUTPUT_DIR`是分割后视频文件保存的目录;`START_TIME`是分割视频的起始时间;`DURATION`是每个小视频文件的时长;`FILE_NAME_PREFIX`是每个小视频文件名的前缀。 然后,通过`mkdir`命令创建输出目录,最后使用FFmpeg命令进行视频文件的分割。其中,`-ss`参数表示从指定的时间点开始分割视频,`-t`参数表示每个小视频文件的时长,`-c copy`表示复制原视频文件的编码方式,`-map 0`表示保留原视频文件的所有流。 3. 运行脚本编写脚本之后,可以通过命令行运行脚本。首先需要将脚本保存为一个文件,比如`split_video.sh`。然后,通过以下命令运行脚本: ``` bash split_video.sh ``` 运行脚本后,就可以看到视频文件被分割成了多个小的视频文件,并保存在指定的输出目录中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracelessLe

❀点个赞加个关注再走吧❀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值