ffmpeg如何去掉片头片尾

Totem,mplayer,sopcast,realplayer,bmp
回复
yubinalice
帖子: 130
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

ffmpeg如何去掉片头片尾

#1

帖子 yubinalice » 2020-02-23 0:09

如题,事实上就是片尾不知道如何去处。
使用安卓的开发板用来看4K的电视剧,
然而,他不具备跳过片头片尾的功能,
因此需要使用ffmpeg手工切割,
然而,
ffmpeg -i input -ss start
这个容易,然而
-t这个就不好说了,
有些电视每集都不一样长,
如何才能删除片尾?
多谢!
头像
astolia
论坛版主
帖子: 4629
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 775 次

Re: ffmpeg如何去掉片头片尾

#2

帖子 astolia » 2020-02-23 12:35

如果片尾长度是固定的,那么获取整片长度后,减一下不就知道了?
乳酸菌
帖子: 28
注册时间: 2020-02-03 8:53
系统: linux mint
送出感谢: 1 次
接收感谢: 0

Re: ffmpeg如何去掉片头片尾

#3

帖子 乳酸菌 » 2020-02-23 22:31

成功了么?具体怎么实现的啊
yubinalice
帖子: 130
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

Re: ffmpeg如何去掉片头片尾

#4

帖子 yubinalice » 2020-02-28 13:38

astolia 写了:
2020-02-23 12:35
如果片尾长度是固定的,那么获取整片长度后,减一下不就知道了?
我正则表达式学的不好,不知道怎么写这个减去的脚本。多谢谢帮助!
头像
astolia
论坛版主
帖子: 4629
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 775 次

Re: ffmpeg如何去掉片头片尾

#5

帖子 astolia » 2020-02-28 18:00

不需要用正则表达式,直接在脚本里用cut就行了,差不多就像下面这样

代码: 全选

A="11:22:33"
h=$(echo $A | cut -f1 -d:)
m=$(echo $A | cut -f2 -d:)
s=$(echo $A | cut -f3 -d:)
echo $(( $h * 3600 + $m * 60 + $s - 120 ))
yubinalice
帖子: 130
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

Re: ffmpeg如何去掉片头片尾

#6

帖子 yubinalice » 2020-04-18 18:45

astolia 写了:
2020-02-28 18:00
不需要用正则表达式,直接在脚本里用cut就行了,差不多就像下面这样

代码: 全选

A="11:22:33"
h=$(echo $A | cut -f1 -d:)
m=$(echo $A | cut -f2 -d:)
s=$(echo $A | cut -f3 -d:)
echo $(( $h * 3600 + $m * 60 + $s - 120 ))
我刚刚折腾了半天,总算写出来了,然而,您这个 -120 是咋回事?
为啥减去120?
yubinalice
帖子: 130
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

Re: ffmpeg如何去掉片头片尾

#7

帖子 yubinalice » 2020-04-18 18:45

astolia 写了:
2020-02-28 18:00
不需要用正则表达式,直接在脚本里用cut就行了,差不多就像下面这样

代码: 全选

A="11:22:33"
h=$(echo $A | cut -f1 -d:)
m=$(echo $A | cut -f2 -d:)
s=$(echo $A | cut -f3 -d:)
echo $(( $h * 3600 + $m * 60 + $s - 120 ))
刚刚写出来的。

#!/bin/bash
ss=00:01:00
minus=00:02:00
h1=$(echo $minus | cut -f1 -d:)
m1=$(echo $minus | cut -f2 -d:)
s1=$(echo $minus | cut -f3 -d:)
t1=$(( $h1 * 3600 + $m1 * 60 + $s1 ))

for i in *mp4
do
duration=$(ffmpeg -i "$i" 2>&1|grep Duration|cut -d ' ' -f 4 |sed s/,//)
h2=$(echo $duration |cut -f1 -d:)
m2=$(echo $duration |cut -f2 -d:)
s2=$(echo $duration |cut -f3 -d:)
t2=$(( $h2 * 3600 + $m2 * 60 + ${s2%.*} ))
to=$(( $t2 - $t1 ))
ffmpeg -i "$i" -ss $ss -to $to -c copy ~/"$i"
done
头像
astolia
论坛版主
帖子: 4629
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 775 次

Re: ffmpeg如何去掉片头片尾

#8

帖子 astolia » 2020-04-19 0:18

yubinalice 写了:
2020-04-18 18:45
astolia 写了:
2020-02-28 18:00
不需要用正则表达式,直接在脚本里用cut就行了,差不多就像下面这样

代码: 全选

A="11:22:33"
h=$(echo $A | cut -f1 -d:)
m=$(echo $A | cut -f2 -d:)
s=$(echo $A | cut -f3 -d:)
echo $(( $h * 3600 + $m * 60 + $s - 120 ))
我刚刚折腾了半天,总算写出来了,然而,您这个 -120 是咋回事?
为啥减去120?
因为你是要去掉一部分长度,我就随手写了个120秒作为例子,这也想不通?
你后面的脚本还在傻乎乎地算00:02:00是多少秒,我直接写出来120,明白了吗?
yubinalice
帖子: 130
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

Re: ffmpeg如何去掉片头片尾

#9

帖子 yubinalice » 2020-04-19 15:36

astolia 写了:
2020-04-19 0:18
yubinalice 写了:
2020-04-18 18:45
astolia 写了:
2020-02-28 18:00
不需要用正则表达式,直接在脚本里用cut就行了,差不多就像下面这样

代码: 全选

A="11:22:33"
h=$(echo $A | cut -f1 -d:)
m=$(echo $A | cut -f2 -d:)
s=$(echo $A | cut -f3 -d:)
echo $(( $h * 3600 + $m * 60 + $s - 120 ))
我刚刚折腾了半天,总算写出来了,然而,您这个 -120 是咋回事?
为啥减去120?
因为你是要去掉一部分长度,我就随手写了个120秒作为例子,这也想不通?
你后面的脚本还在傻乎乎地算00:02:00是多少秒,我直接写出来120,明白了吗?
OK,我反应过来了,你那个脚本是自己计算出结尾是多少秒,我是让他机器计算,没差多少,脚本反正也没复杂更多。
头像
bzimage
帖子: 707
注册时间: 2006-03-14 10:25
送出感谢: 1 次
接收感谢: 5 次

Re: ffmpeg如何去掉片头片尾

#10

帖子 bzimage » 2020-04-20 1:49

mark
回复

回到 “影音多媒体”