文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

写一个shell脚本实现视频处理

2022-07-08 11:00

关注
目录

需求

去年同事准备做个公司内部的大讲堂网站,将一些内部培训的视频汇总,提供给公司同事观看,网站搭建相对来说比较简单,直接用Ant.design Pro+Eggjs实现。但是为了体验更好一些,我们准备将视频,根据内容进行切割,方便用户快速找到自己感兴趣的内容,同时转成m3u8上传cdn,优化视频播放和缓冲的速度。

这就涉及到了视频切割和格式转换,传统的做法是通过视频剪辑软件来处理即可,但是作为开发,还是想用一些自动化的方法来完成这个工作,毕竟时间最宝贵了,因此就想到了直接使用shell脚本一键完成切割、转换和上传。

第一次写shell脚本,也是边学边写,所以肯定还有很多可以优化的地方,和大家一起学习啊...

视频处理 ffmpeg

想要用shell处理视频,首先要有处理视频的命令行工具,这个不难找,百度一下就发现了ffmpeg,一个神级视频处理库。

FFmpeg 是视频处理最常用的开源软件。FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它的命令行工具。本文介绍 FFmpeg 命令行如何处理视频,比桌面视频处理软件更简洁高效。[借用一下阮一峰老师对ffmpeg的介绍]

关于ffmpeg以及视频编解码的介绍,可以去阮老师这边看。

我们的需求是裁剪和格式转换,这里也针对性介绍一下这两个场景的命令。

裁剪

# 起始时间+时长
ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
# 起始时间+结束时间
ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

格式转换

ffmpeg -i demo.mp4 -profile:v baseline -level 3.0 
-start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8

配置参数

sed命令

为了后面方便处理不同的视频,我希望将一些配置参数提取出来,配置文件config如下:

File=source.mp4 # 待处理文件地址
Cut_config=videos.csv # 时间戳数据
Output_path=./output/ # 裁剪、转格式后视频文件输出路径
Qiniu_prefix=videos/source/ # 上传七牛的路径

读取脚本如下

file=`sed '/^File=/!d;s/.*=//' config`  
cutConfig=`sed '/^Cut_config=/!d;s/.*=//' config`  
outputPath=`sed '/^Output_path=/!d;s/.*=//' config`  
qiniuPrefix=`sed '/^Qiniu_prefix=/!d;s/.*=//' config` 

这里用到sed命令,sed 可依照脚本的指令来处理、编辑文本文件。在这里,我们主要是读取配置文件中的键值对类型数据。

sed '/^File=/!d;s/.*=//' config: 找到File=开头的行,然后!d删除这一行之外的行,将==之前的字符替换为空字符串,然后返回的就是=后面的字符串。

读取时间切片csv

视频切片需要知道起止时间,以及切割完之后视频的名字,这个数据组织方式比较适合csv,所以我们放到了csv中来管理,每一行代表一个视频片段。

00:00:45,00:12:10,car-mainmaterial-from-commercial-vehicle
00:12:05,00:15:25,car-mainmaterial-from-nameplate
00:15:25,00:29:00,car-mainmaterial-from-certificate-registry
00:29:00,00:33:00,car-mainmaterial-from-driving-license
00:33:00,00:36:40,car-mainmaterial-from-cargo-import-permission
00:36:40,00:48:33,car-mainmaterial-from-practice-case

接下来就是解析csv文件。

# 变量声明
count=0 # 计数
videos=() # 视频列表

# 遍历
for line in $(cat $cutConfig)
do 
    OLD_IFS="$IFS"
    IFS="," # 用,切割字符串
    arr=($line) # 切割完,得到三个字符串的数组
    IFS="$OLD_IFS" # 恢复IFS
    videos[$count]="$outputPath${arr[2]}" # 存储裁剪后的视频片段文件名
    count=$(($count+1))
    # ffmpeg裁剪文件
    ffmpeg -ss ${arr[0]} -t ${arr[1]} -i $file -vcodec copy -acodec copy $outputPath${arr[2]}.mp4 -loglevel quiet 
done

转换视频格式

# 转换视频格式
for video in ${videos[@]}
do
    ffmpeg -i $video.mp4 -profile:v baseline -level 3.0  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls $video.m3u8
done

上传七牛

# 上传视频
qshell qupload2 --src-dir=$outputPath --bucket=assets --key-prefix=$qiniuPrefix --skip-suffixes=mp4 --overwrite=true --rescan-local=true

end

获取视频的时间切换,简单用video标签写了一个界面,通过拖拽快速或去起止时间,然后导出一个制定格式的CSV文件。

写一个shell脚本实现视频处理

 

到此这篇关于shell脚本实现视频处理的文章就介绍到这了,更多相关shell脚本视频处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯