linux中使用ffmpeg 无损剪切/拼接视频程序 【百科全说】-凯发k8官方旗舰厅

腾讯视频/爱奇艺/优酷/外卖 充值4折起

剪切/拼接视频文件是一种常见需求。在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗。使用 downloadhelper/downthemall 这类工具下载下来的往往就是分割后的文件。能实现剪切/拼接视频文件的工具多种多样,但往往都需要进行视频重编码(transcoding),这就不可避免的带来了视频质量上的损耗,更不用提那长的令人发指的转换时间了…

其实借助 ffmpeg 我们就可以在不进行视频重编码的情况下完成此类任务:

剪切:

代码如下
ffmpeg -i input.mp4 -ss **start_time** -t **stop_time** -acodec copy -vcodec copy output.mp4

其中 start_time/stop_time 的格式可以写成两种格式:

以秒为单位计数: 80

时:分:秒: 00:01:20

拼接 :

拼接的情况稍微复杂些,我们需要将需要拼接的视频文件按以下格式保存在一个列表 list.txt 中:

代码如下
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

相应的命令为:

代码如下
ffmpeg -f concat -i **list.txt** -c copy output.mp4

由于不需要重编码,这两条命令几乎是即时完成的。

方便起见,我写了一个脚本来简化操作。放在 github 上,请自取:

代码如下

#!/bin/bash
#cut/join videos using ffmpeg without quality loss

if [ -z $1 ] || [ -z $2 ]; then
echo "usage:$0 c[ut] seconds <file>"
echo " eg. $0 c 10 80 example.mp4"
echo " eg. $0 c 00:00:10 00:01:20 example.mp4"
echo "usage:$0 j[oin] <filetype>"
echo " eg. $0 j avi"
exit
fi

case "$1" in
c)
echo "cuttig video..."
filename=$(echo $4 | cut -f 1 -d '.')
filetype=$(echo $4 | cut -f 2 -d '.')
ffmpeg -i $4 -ss $2 -t $3 -acodec copy -vcodec copy $filename-$2-$3.$filetype
;;
j)
echo "joinning videos..."
rm temp_list.txt
for f in ./*.$2; do echo "file '$f'" >> temp_list.txt; done
printf "file '%s'\n" ./*.$2 > temp_list.txt
ffmpeg -f concat -i temp_list.txt -c copy output.$2
rm temp_list.txt
;;
*)
echo "wrong arguments"
;;
esac
exit

以上拼接操作生效的前提是,所有视频文件的格式编码相同,如果需要拼接不同格式的视频文件可以借助以下脚本

代码如下

# change this to what you need !!!
extra_options='-vcodec libx264 -crf 23 -preset medium -acodec aac -strict experimental -ac 2 -ar 44100 -ab 128k'

################################################################################
#
# no need to touch anything after this line!
#
################################################################################

# the version of the script
version=1.3

# location of temp folder
tmp=/tmp

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

echo "multimedia concat script v$version (mmcat) - a script to concatenate multiple multimedia files."
echo "based on ffmpeg - www.ffmpeg.org"
echo "don't forget to edit this script and change extra_options"
echo ""

################################################################################
# syntax check (has to have at least 3 params: infile1, infile2, outfile
################################################################################
if [ -z $3 ]; then
echo "syntax: $0 ... "
exit 1
fi

################################################################################
# get all the command line parameters, except for the last one, which is output
################################################################################
# $first - first parameter
# $last - last parameter (output file)
# $inputs - all the inputs, except the first input, because 1st input is
# handled separately
################################################################################
first=${@:1:1}
last=${@:$#:1}
len=$(($#-2))
inputs=${@:2:$len}

# remove all previous tmp fifos (if exist)
rm -f $tmp/mcs_*

################################################################################
# decode first input differently, because the video header does not have to be
# kept for each video input, only the header from the first video is needed
################################################################################
mkfifo $tmp/mcs_a1 $tmp/mcs_v1

ffmpeg -y -i $first -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 $tmp/mcs_a1 2>/dev/null ffmpeg -y -i $first -an -f yuv4mpegpipe -vcodec rawvideo $tmp/mcs_v1 2>/dev/null

# if you need to log the output of decoding processes (usually not necessary)
# then replace the "2>/dev/null" in 2 lines above with your log file names, like this:
#ffmpeg -y -i $first -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 $tmp/mcs_a1 2>$tmp/log.a.1 #ffmpeg -y -i $first -an -f yuv4mpegpipe -vcodec rawvideo $tmp/mcs_v1 2>$tmp/log.v.1

################################################################################
# decode all the other inputs, remove first line of video (header) with tail
# $all_a and $all_v are lists of all a/v fifos, to be used by "cat" later on
################################################################################
all_a=$tmp/mcs_a1
all_v=$tmp/mcs_v1
i=2
for f in $inputs
do
mkfifo $tmp/mcs_a$i $tmp/mcs_v$i

ffmpeg -y -i $f -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 $tmp/mcs_a$i 2>/dev/null { ffmpeg -y -i $f -an -f yuv4mpegpipe -vcodec rawvideo - 2>/dev/null $tmp/mcs_v$i ; } &

# if you need to log the output of decoding processes (usually not necessary)
# then replace the "2>/dev/null" in 2 lines above with your log file names, like this:
#ffmpeg -y -i $f -vn -f u16le -acodec pcm_s16le -ac 2 -ar 44100 $tmp/mcs_a$i 2>$tmp/log.a.$i #{ ffmpeg -y -i $f -an -f yuv4mpegpipe -vcodec rawvideo - 2>$tmp/log.v.$i $tmp/mcs_v$i ; } &

all_a="$all_a $tmp/mcs_a$i"
all_v="$all_v $tmp/mcs_v$i"
let i
done

################################################################################
# concatenate all raw audio/video inputs into one audio/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, encode the raw concatenated audio/video into something useful
################################################################################
ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i $tmp/mcs_a_all \
-f yuv4mpegpipe -vcodec rawvideo -i $tmp/mcs_v_all \
$extra_options \
$last

################################################################################
# remove all fifos
################################################################################
rm -f $tmp/mcs_*

03/26 23:19
手机版简拼软件被很多人使用,用来拼接视频或者照片,那么如何将视频和照片拼接在一起呢?小编就来为大家介绍一下吧.具体如下:1.  第一步,点击并打开简拼软件,接着点击页面底部箭头所指的图标.2. 第二步,来到下图所示的页面后,点击箭头所指的video(视频)选项.3. 第三步,在下图所示的页面中,点击选择想要使用的拼接模板.4. 第四步,我们可以看到如下图所示的页面,点击想要想要添加的视频,接着点击左上角的"√"图标,然后点击选择想要添加的图片.5. 第五步,完成选择后,点击下一步选项,
03/31 16:03
今天给大家介绍一下在ffmpeg软件中怎么将音频合并到视频文件中的具体操作步骤.1. 首先我们需要进入ffmpeg凯发app官网登录官网,进行下载软件,对下载文件进行解压后,将bin文件夹复制到电脑上的另一个位置,这里复制到d盘下,记住路径"d:\bin".2. 接下来,我们调出环境变量窗口,在窗口中的系统变量下找到"path"变量选中后,点击下方的"编辑".3. 如图,在弹出的编辑系统变量窗口中,在"变量值"后面,加上分号(英文格式)和&qu
08/01 16:28
今天跟大家介绍一下在pr软件中如何解决剪切的视频无法自动对齐的问题的具体解决方法.1. 首先打开电脑上的pr软件,进入凯发app官网登录主页面后,将视频导入后,拖动到右侧的时间轴上,创建序列.2.接下来,根据自己的需要对视频进行编辑,并将多余的视频素材删除掉.3. 将空白处外面的素材选中,向左侧拖动,和左边的素材对齐,如果没有显示自动对齐的三角图标,则说明还差点距离.4. 要么就是太往左了,超过了左边的素材,覆盖了结尾部分.5. 如图,在下方红框框选的磁铁图标,可以看到没有被选中,显示为白色,将其选中,和其他图标
07/16 12:34
视频拼接就是把两段以上的视频根据自己的需要,意愿拼接成一段完美的视频的过程.优酷ido的视频拼接功能简单易懂.就算是初学者,也是很容易掌握的.对于有一定视频制作经验的小伙伴就没有必要再往下看了.本经验针对的是初学者和业余人士.如果你觉得还有必要往下看的话,我将耐心的给您讲解.方法如下. 要进行视频拼接,首先我们得准备两段以上的视频,而且用于拼接的视频是事先按照我们的需要剪切好的.准备好的视频把它保存在电脑上.建议大家保存在桌面,这样对于不熟悉操作的朋友来说会方便很多. 保存好的视频,我们可以把它
08/05 22:49
视频拼接就是把两段以上的视频根据自己的需要,意愿拼接成一段完美的视频的过程.优酷ido的视频拼接功能简单易懂.就算是初学者,也是很容易掌握的.对于有一定视频制作经验的小伙伴就没有必要再往下看了.本经验针对的是初学者和业余人士.如果你觉得还有必要往下看的话,我将耐心的给您讲解.方法如下. 要进行视频拼接,首先我们得准备两段以上的视频,而且用于拼接的视频是事先按照我们的需要剪切好的.准备好的视频把它保存在电脑上.建议大家保存在桌面,这样对于不熟悉操作的朋友来说会方便很多. 保存好的视频,我们可以把它
12/28 23:47
最近,不少下载了优酷ido这款视频编辑软件的网友跟小编反映:不知道怎么拼接视频?在视频编辑过程中,拼接视频是最基本也是最常用的操作,所以,学习优酷ido的拼接视频技能非常重要,下面,小编就给大家带来优酷ido拼接视频步骤图解,还不知道的网友赶紧学起来吧! 优酷ido
01/28 14:34
抖音app中想要发不同场景拼接出来的视频,该怎么发呢?下面我们就来看看详细的教程. 1.首先在不同的场景下分别拍摄几个短视频. 2.把手机和电脑用数据线连接,把拍好的短视频上传到电脑上. 3.选择一款视频剪辑软件,把上传的视频剪辑到一起. 4.然后把剪辑好的视频传到手机上保存好. 5.把传到手机上的视频再传到抖音上,发送就可以了. 以上就是抖音app发拼接视频的教程,希望大家喜欢,请继续关注凯发app官网登录.
11/15 04:39
我们在生活和工作中有时候会需要将一些视频进行拼接,下面就给大家讲讲用手机拼接视频的方法.具体如下:1. 第一步,在手机上打开如图所示的安卓录屏大师.2. 第二步,点击如图所示箭头所指之处的扳手螺丝刀图标.3. 第三步,点击该图标后会出现如图所示的界面,点击该界面中的"视频拼接".4. 第四步,点击"视频拼接"后会出现如图所示的界面,我们将我们需要拼接的视频选中,被选中的视频右上角会变成红色的.5. 第五步,选择完需要拼接的视频后,点击如图所示右上角的"拼接
02/26 22:08
现在很多人都对视频编辑感兴趣,有些用户想知道如何在电脑上用剪辑师拼接视频,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1.首先第一步打开电脑中的[剪辑师]软件.2. 第二步进入软件后,导入需要拼接的两个视频文件.3. 第三步根据下图所示,将导入的两个视频文件分别拖动到下方同一轨道中.4. 第四步拖动完成后,根据下图箭头所指,鼠标左键按住[视频素材2]选项.5. 第五步向左拖动[视频素材2],根据下图所示,当与[视频素材1]连接并出现黄色指示线后松开鼠标.6. 第六步如果担心两个视频没有完
网站地图