linux视频拼接工具,linux中使用ffmpeg 无损剪切/拼接视频程序
剪切/拼接视频文件是一种常见需求。在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗。使用 DownloadHelper/DownThemAll 这类工具下载下来的往往就是分割后的文件。能实现剪切/拼接视频文件的工具多种多样,但往往都需要进行视频重编码(trans
剪切/拼接视频文件是一种常见需求。在线视频网站现在往往将一个视频文件分割成 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 - "
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_*
linux视频拼接工具,linux中使用ffmpeg 无损剪切/拼接视频程序相关推荐
- android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...
## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...
- 通过 ffmpeg 无损剪切/拼接视频
剪切/拼接视频文件是一种常见需求.在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗.使用 DownloadHelper/DownThemAll 这类工具下载下来的往往就是分割后的文件. ...
- ffmpeg 拼接mp4_通过 ffmpeg 无损剪切/拼接视频
剪切/拼接视频文件是一种常见需求.在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗.使用 DownloadHelper/DownThemAll 这类工具下载下来的往往就是分割后的文件. ...
- ffmpeg 无损 剪切 分割 视频
ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT 例如: ffmpeg -ss 0:0:21 -t 0:0: ...
- Linux漏洞建议工具Linux Exploit Suggester
Linux漏洞建议工具Linux Exploit Suggester 在Linux系统渗透测试中,通常使用Nessus.OpenVAS对目标主机进行扫描,获取目标主机可能存在的漏洞.如果无法进行漏洞 ...
- python中使用ffmpeg合并音频与视频_ffmpeg 在windows 下的安装和使用(python, 合并音频和视频)...
参考: windows下ffmpeg的安装与python调用 https://blog.csdn.net/chunjiekid/article/details/88205824 1. 下载 ffm ...
- 流媒体服务器开发——SRS 4.0与WebRTC音视频通话丨音视频开发丨嵌入式开发丨FFmpeg丨iOS音视频开发
SRS 4.0与WebRTC音视频通话 1. 音视频高薪岗位都需要什么技能点 2. WebRTC的技术点分析 3. SRS 4.0如何使用WebRTC 视频讲解如下,点击观看: 流媒体服务器开发--S ...
- 怎么把图片上的字去掉_视频片头怎么减掉,电脑如何剪切掉视频的开头「视频批量剪辑」...
视频片头怎么减掉,电脑如何剪切掉视频的开头[视频批量剪辑] 怎么去掉视频片头,批量快速剪掉片头[视频剪辑教程] 视频怎么剪掉前面部分,批量剪切视频前面或者后面部分 怎样批量剪掉视频片尾和片头,什么软件 ...
- linux迅雷替代工具_Linux中查找工具的友好替代品
linux迅雷替代工具 fd是基于Rust的超快速替代品,可替代Unix / Linux find命令. 它不能反映find的所有强大功能: 但是,它确实提供了足够的功能来覆盖您可能遇到的80%用例. ...
最新文章
- 中兴今年的毕业生面试题,给大家参考参考
- 如何确定Windows服务器上是否打开了端口? [关闭]
- linux内核自旋锁API
- linux 公钥登录
- python 打包文件
- mfc怎么显示jpg png图像
- 计算机重装系统后黑屏,电脑重装系统后开机黑屏怎么办
- 【转】10个推荐的 PACS/DICOM Server开源项目
- 在Linux下开发多语言软件: Hello GetText!
- DQN 中的梯度 clip
- 计算机普通话培训开班简报,普通话培训第四期简报.doc
- 谷歌pixel3axl开发者模式_谷歌推出新一代安卓系统“Android 10”
- 关于使用xftp上传可读文件夹权限不足的问题
- 图片云存储服务商在阿里云和又拍云之间如何选择?
- 五千图文,详解SI信号完整性工程师工作流程
- MOOC《Python语言程序设计》(第15次)Python计算生态概览(第九周)
- python indexerror out of bound_用Pyinstaller打包时出现IndexError怎么回事?
- linux下利用dnw烧写文件,dnw安装与配置
- 人脸识别 年龄 matlab,基于年龄变化的人脸识别
- 微信小程序多点定位marker标点polyline连线
热门文章
- Windows10系统中断、系统设置打不开的解决办法
- 计算机网络——计算机网络中的安全
- Matplotlib--palette调色板
- DaaS架构及落地 (一)
- 一、ElasticSearch5.6.3下载安装步骤 说明:ElasticSearch的运行不能用root执行,自己用useradd命令新建一个用户如下所示: sueradd chen passw
- SEO关键词(关键词策略连载1,2022更新)
- python socket通信 心跳_python socket 编程之三:长连接、短连接以及心跳(转药师Aric的文章)...
- sap 为什么创建的利润中心组不能使用_定义利润中心(Profit Center)
- 员工公寓楼建设项目电力监控系统的研究与应用
- MFC应用模态对话框和非模态对话框