ffmpeg 裁剪视频
前言
之前写过一篇用 shell 脚本与 ffmpeg 结合,批量把视频切割成指定时长的多个视频片断,当时写的那个脚本只支持这一个小功能,写的粗糙,原视频的总时长也没有获取到,还需要手动填写。
这次在那个的基础上添加了自动获取视频分辨率、时长,并且按指定的宽高裁剪视频的中间部分的画面(在这个 demo 中是这样设置,可以根据需要改为指定部分的画面,原理就是计算指定画面在原视频中的比例)的功能。
正文
首先要先获取文件夹中的文件,并且判断哪些文件是视频文件
# 获取该脚本文件所在的文件夹中的所有文件名 path=$1 files=$(ls $path)
# 根据文件的格式判断文件是否是视频文件,这里是直接写死的,如果有其他的格式,这里就要手动更换,其实也可以自动获取,与获取视频时宽高是类似的,这里就不写了。 type=".mp4" if [[ $filename =~ $type ]]
这里开始使用 ffmpeg ,把视频文件的信息以 json 的格式提取出来,在这个 demo 中把视频的信息保存到了 videoinfo 文件中
ffprobe -print_format json -show_streams $filename > videoinfo
接下来就是从 videoinfo 文件的 json 字符串中把我们要的宽高以及时长提取出来
# 这一段执行之后,videowidth 的值就是视频的宽 while read line do#statementsif [[ $line =~ 'width' ]]; then#statements# 这里用了 awk 的方法提取字符串的一部分videowidth=`echo $line | awk -F: '{print $2}' | awk -F, '{print $1}'`echo $lineecho 'width' + $videowidthbreakfidone < videoinfo
用下面的这种循环方法也可以得到视频的宽,但是这样的话,videowidth 的值只能在这个循环里有用,在循环外面这个值是获取不到的,而上面的那种写法叫重定向,就可以解决这个问题。
cat videoinfo | while read line do#statementsif [[ $line =~ 'width' ]]; then#statementsvideowidth=`echo $line | awk -F: '{print $2}' | awk -F, '{print $1}'`echo $lineecho 'width' + $videowidth# echo "$videowidth"breakfi done
类似的视频的高和时长也是用同样的方法可以获取到。就不贴详细代码了。
我们需要的信息都获取到之后,就开始对视频进行处理了,这里我们的需求是把裁剪视频中间的画面,并切割成指定的时长。这里我们分成两步:
第一步:把视频先进行裁剪
# 这个是 ffmpeg 的命令,裁剪的功能主要是 crop 这个命令,它的参数分别代表的是:输出视频的宽:输入出视频的高:裁剪的起始点的 x 的位置:裁剪起始点的 y 的位置。 # 这四个值可以根据需要去计算 ffmpeg -i $filename -strict -2 -vf crop=$($w:$h:$x:0) $filename+out.mp4
第二步:把裁剪后的视频切割成指定的时长
while [ $endTime -le $duration ]; do#statementsi=$[$i+1]endTime=$[$startTime+4]# 切割视频的时长ffmpeg -i /Users/limiao/Desktop/video/$filename+out.mp4 -ss $startTime -to $endTime -acodec copy -vcodec copy outvideo/$filename+$i.mp4 startTime=$[endTime]done
总结
到此,想要实现的功能就都实现了。在实现的过程中有几个问题纠缠了挺久的。
拿到 json 字符串后,如何从这里拿到我们需要的视频的宽高和时长?
百度了一些,最后确定的文案是使用 awk,把 json 字符串根据一定的规则切分,最终留下我们要的值。
用完之后,我觉得 awk 是一个挺有意思的东西,还是值得研究一下的。
循环的重定向
刚开始的写的时候,只写了一个小例子测试的时候是没问题的,但一放到正式的文件中要用的时候,那个值就获取不到了,也是查了很多,才找到原因。这两种方式的区别也还有待研究。
在设置 ffmpeg 中的 crop 参数时,刚开始的写法是这样的
crop=$w:$h:$x:0
运行之后提示的错误是参数错误:只有三个参数,后来改为
crop=$($w:$h:$x:0)
这样就对了,参数不管是什么它都是一个整体,要使用一个整体去引用。
代码虽少,但包含的东西挺多的,也弄了好多天,找了很多资料,这些东西基本都是现学现卖,根据需要有目的的学习,效率还挺不错的。
查看全部文件
ffmpeg 裁剪视频相关推荐
- FFmpeg裁剪视频
FFmpeg裁剪视频 ffmpeg -ss 00:00:00 -i video.mp4 -vcodec copy -acodec copy -t 00:00:31 output1.mp4 00:00: ...
- 【Linux-Windows】使用ffmpeg裁剪视频
[Linux-Windows]使用ffmpeg裁剪视频 1.背景 2.裁剪视频画面宽高 3.裁剪指定时长的视频 1.背景 本博客涉及ffmpeg视频裁剪. ffmpeg是一个开源的强大的音视频工具. ...
- 【ffmpeg裁剪视频faster rcnn自动检测 via】全自动实现ffmpeg将视频切割为图片帧,再使用faster rcnn将图片中的人检测出来,最后将检测结果转化为via可识别的csv格式
目录 前言 一,ffmpeg 自动裁剪 1.1 目录结构 1.2 cutVideoToImage.sh 1.2 myVideo 1.3 myVideo15mins 1.5 myFrames 1.6 运 ...
- ffmpeg裁剪视频长度
裁剪视频长度:从视频开始到第39分钟的长度 ffmpeg -i test.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:39:00 test_cu ...
- FFMPEG裁剪 视频比例至 4:3 3gp h263 aac(结果比例任改)
批处理 裁剪 视频比例至 4:3 3gp h263 aac.bat @echo off&setlocal enabledelayedexpansion REM ### 找到上级目录下的所有支持 ...
- ffmpeg裁剪视频画面
crop的参数格式为w:h:x:y, w.h为输出视频的宽和高, x.y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频.如果x y不写的话,默认居中剪切 例子 ffmpeg -i ...
- ffmpeg裁剪视频尺寸
ffmpeg -i h264.mp4 -s hd1080 1920*1080.mp4
- FFmpeg —— 裁剪视频(含音视频),不需编解码(附源码)
说明 附上指令方式:ffmpeg -i in.mp4 -ss 00:00:10 -to 00:00:39 out.mp4 完整源码 #include <iostream>
- FFmpeg基础: 视频裁剪
基本概念 在对视频进行裁剪之前,我们先讲几个基本概念. 第一个概念是PTS(Presentation Time Stamp) 显示时间戳,用来定位帧的显示时间. 第二个概念是DTS(Decode Ti ...
- FFMPEG针对视频操作的基本命令
1.FFMPEG裁剪视频 命令:ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT 其中各参数的说明如下: S ...
最新文章
- OpenCV在ARM上的移植
- SpringBoot 修改banner信息
- wordcloud库
- orcle10忘记密码
- 51CTO 新人报道
- 文件转为十六进制文本
- 图像的上采样、下采样
- html华文行楷的英文,字体英文代码.htm
- BUUCTF刷题-RAR 压缩包暴力破解密码
- 王者荣耀入门技能树-解答
- 【调试】你是一名优秀的侦探吗?
- 人工智能AI工程师学习路线心路历程和总结分享
- 防止用户调整微信浏览器字体大小导致的显示异常
- Juniper设备审计
- Weblogic错误总结
- html中输入框中“请输入关键字”的设置
- 勇者斗恶龙———算法题
- MD5加密js-md5
- DC48V电源2KV防雷滤波电路EMC方案
- 『HTTP知识点』什么是HTTP协议?(HTTP协议详解)
热门文章
- php 压缩gif 不动,PHP怎么进行GIF动图压缩
- ddos应急处理_DDOS攻击应急响应预案
- GHD官宣全新中国区焕发大使乔欣
- 【学习笔记】seckill-秒杀项目--(9)接口优化
- 抓取中央气象台-台风报文数据
- 怎么用计算机进行气象预报,中央气象台进行天气预报,先用计算机解出描述天气演变的方程组,“算”出来未来天 - 问答库...
- 《程序员》2012年7期精彩内容:智能算法
- 股票python量化交易026-数据回测的概念以及现有框架
- 用scrapy爬虫无数据
- 4回溯法、空间状态树