仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 446|回复: 7
打印 上一主题 下一主题

[其他Linux] 给大家带来linux中利用ffmpeg 无损剪切/拼接视频程序

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 11:31:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学不好的话,你在linux中开发的机会就很少,或者说几乎没有,它的优势就消失了,然后随着时间的流逝,你就会全部忘记她;
  剪切/拼接视频文件是一种罕见需求。在线视频网站如今常常将一个视频文件支解成n段,以削减流量损耗。利用DownloadHelper/DownThemAll这类工具下载上去的常常就是支解后的文件。能完成剪切/拼接视频文件的工具多种多样,但常常都必要举行视频重编码(transcoding),这就不成制止的带来了视频质量上的消耗,更不必提那长的怒不可遏的转换工夫了…
  实在借助ffmpeg我们就能够在不举行视频重编码的情形下完成此类义务:
  剪切:
代码以下ffmpeg-iinput.mp4-ss**START_TIME**-t**STOP_TIME**-acodeccopy-vcodeccopyoutput.mp4  个中START_TIME/STOP_TIME的格局能够写成两种格局:
  以秒为单元计数:80
  时:分:秒:00:01:20
  拼接:
  拼接的情形略微庞大些,我们必要将必要拼接的视频文件按以下格局保留在一个列表list.txt中:
代码以下file/path/to/file1
file/path/to/file2
file/path/to/file3  响应的命令为:
代码以下ffmpeg-fconcat-i**list.txt**-ccopyoutput.mp4  因为不必要重编码,这两条命令几近是立即完成的。
  便利起见,我写了一个剧本来简化操纵。放在github上,请自取:
代码以下#!/bin/bash
#cut/joinvideosusingffmpegwithoutqualityloss
if[-z$1]||[-z$2];then
echo"Usage:$0c[ut]seconds<File>"
echo"eg.$0c1080example.mp4"
echo"eg.$0c00:00:1000:01:20example.mp4"
echo"Usage:$0j[oin]<FileType>"
echo"eg.$0javi"
exit
fi
case"$1"in
c)
echo"cuttigvideo..."
fileName=$(echo$4|cut-f1-d.)
fileType=$(echo$4|cut-f2-d.)
ffmpeg-i$4-ss$2-t$3-acodeccopy-vcodeccopy$fileName-$2-$3.$fileType
;;
j)
echo"joinningvideos..."
rmtemp_list.txt
forfin./*.$2;doecho"file$f">>temp_list.txt;done
printf"file%s\n"./*.$2>temp_list.txt
ffmpeg-fconcat-itemp_list.txt-ccopyoutput.$2
rmtemp_list.txt
;;
*)
echo"wrongarguments"
;;
esac
exit
  以上拼接操纵失效的条件是,一切视频文件的格局编码不异,假如必要拼接分歧格局的视频文件能够借助以下剧本
代码以下#changethistowhatyouneed!!!
EXTRA_OPTIONS=-vcodeclibx264-crf23-presetmedium-acodecaac-strictexperimental-ac2-ar44100-ab128k

################################################################################
#
#NONEEDTOTOUCHANYTHINGAFTERTHISLINE!
#
################################################################################

#theversionofthescript
VERSION=1.3

#locationoftempfolder
TMP=/tmp

################################################################################

echo"MultiMediaConcatScriptv$VERSION(mmcat)-Ascripttoconcatenatemultiplemultimediafiles."
echo"BasedonFFmpeg-www.ffmpeg.org"
echo"DontforgettoeditthisscriptandchangeEXTRA_OPTIONS"
echo""

################################################################################
#syntaxcheck(hastohaveatleast3params:infile1,infile2,outfile
################################################################################
if[-z$3];then
echo"Syntax:$0<input1><input2><input3>...<output>"
exit1
fi

################################################################################
#getallthecommandlineparameters,exceptforthelastone,whichisoutput
################################################################################
#$first-firstparameter
#$last-lastparameter(outputfile)
#$inputs-alltheinputs,exceptthefirstinput,because1stinputis
#handledseparately
################################################################################
first=${@:1:1}
last=${@:$#:1}
len=$(($#-2))
inputs=${@:2:$len}

#removeallprevioustmpfifos(ifexist)
rm-f$TMP/mcs_*

################################################################################
#decodefirstinputdifferently,becausethevideoheaderdoesnothavetobe
#keptforeachvideoinput,onlytheheaderfromthefirstvideoisneeded
################################################################################
mkfifo$TMP/mcs_a1$TMP/mcs_v1

ffmpeg-y-i$first-vn-fu16le-acodecpcm_s16le-ac2-ar44100$TMP/mcs_a12>/dev/null</dev/null&
ffmpeg-y-i$first-an-fyuv4mpegpipe-vcodecrawvideo$TMP/mcs_v12>/dev/null</dev/null&

#ifyouneedtologtheoutputofdecodingprocesses(usuallynotnecessary)
#thenreplacethe"2>/dev/null"in2linesabovewithyourlogfilenames,likethis:
#ffmpeg-y-i$first-vn-fu16le-acodecpcm_s16le-ac2-ar44100$TMP/mcs_a12>$TMP/log.a.1</dev/null&
#ffmpeg-y-i$first-an-fyuv4mpegpipe-vcodecrawvideo$TMP/mcs_v12>$TMP/log.v.1</dev/null&

################################################################################
#decodealltheotherinputs,removefirstlineofvideo(header)withtail
#$all_aand$all_varelistsofalla/vfifos,tobeusedby"cat"lateron
################################################################################
all_a=$TMP/mcs_a1
all_v=$TMP/mcs_v1
i=2
forfin$inputs
do
mkfifo$TMP/mcs_a$i$TMP/mcs_v$i

ffmpeg-y-i$f-vn-fu16le-acodecpcm_s16le-ac2-ar44100$TMP/mcs_a$i2>/dev/null</dev/null&
{ffmpeg-y-i$f-an-fyuv4mpegpipe-vcodecrawvideo-2>/dev/null</dev/null|tail-n+2>$TMP/mcs_v$i;}&

#ifyouneedtologtheoutputofdecodingprocesses(usuallynotnecessary)
#thenreplacethe"2>/dev/null"in2linesabovewithyourlogfilenames,likethis:
#ffmpeg-y-i$f-vn-fu16le-acodecpcm_s16le-ac2-ar44100$TMP/mcs_a$i2>$TMP/log.a.$i</dev/null&
#{ffmpeg-y-i$f-an-fyuv4mpegpipe-vcodecrawvideo-2>$TMP/log.v.$i</dev/null|tail-n+2>$TMP/mcs_v$i;}&

all_a="$all_a$TMP/mcs_a$i"
all_v="$all_v$TMP/mcs_v$i"
leti++
done

################################################################################
#concatenateallrawaudio/videoinputsintooneaudio/video
################################################################################
mkfifo$TMP/mcs_a_all
mkfifo$TMP/mcs_v_all
cat$all_a>$TMP/mcs_a_all&
cat$all_v>$TMP/mcs_v_all&

################################################################################
#finally,encodetherawconcatenatedaudio/videointosomethinguseful
################################################################################
ffmpeg-fu16le-acodecpcm_s16le-ac2-ar44100-i$TMP/mcs_a_all\
-fyuv4mpegpipe-vcodecrawvideo-i$TMP/mcs_v_all\
$EXTRA_OPTIONS\
$last

################################################################################
#removeallfifos
################################################################################
rm-f$TMP/mcs_*
</p>
常用的linux命令,尤其是一些能帮你提高开发效率的命令,(eg:grep,awk,sed,split等);
不帅 该用户已被删除
沙发
发表于 2015-1-18 07:48:44 | 只看该作者
生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
深爱那片海 该用户已被删除
板凳
发表于 2015-1-24 09:45:48 | 只看该作者
通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
乐观 该用户已被删除
地板
发表于 2015-2-1 08:35:40 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
分手快乐 该用户已被删除
5#
发表于 2015-2-20 07:38:21 | 只看该作者
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
admin 该用户已被删除
6#
发表于 2015-3-6 17:02:00 | 只看该作者
请问谁有Linux的学习心得的吗?简单的说说?
小女巫 该用户已被删除
7#
发表于 2015-3-13 05:08:37 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
透明 该用户已被删除
8#
发表于 2015-3-20 13:49:32 | 只看该作者
放手去搞。尽量不要提问,运用搜索找答案,或者看wiki,从原理上理解操作系统的本质,而不是满足于使用几个技巧。尽量看英文资料。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 22:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表