有没有懂 ffmpeg 的大佬, mp4分割成两个 然后 合并 是什么参数?

多个mp4合并成一个我用的是转换成TS然后合并
这步骤是网上找的,没有出错

# 将 mp4 文件封装为 ts 格式
ffmpeg -i a1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i a2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i a3.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts
ffmpeg -i a4.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts
# 拼接 ts 并导出最终 mp4 文件
ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
# 删除过程中生成的 ts 文件

现在问题是单个MP4,移除中间部分然后合并成一个mp4
mp4两次分割成mp4 再把两mp4转成ts 然后合并ts成一个mp4没有问题
我就是想优化成mp4直接分割成两个ts
这样就少了中间mp4转成ts的步骤了.

想请教下这里mp4分割指定时间的内容为ts怎么写
ffmpeg -i file.mp4 -y -vcodec copy -acodec copy -vbsf h264_mp4toannexb time1 time2 1.ts

我这样写的是
但是这样合并的时候会不停的报
Non-monotonous DTS in output stream 0:0; previous: 28321576, current: 28321576; changing to 28321577. This may result in incorrect timestamps in the output file.

虽然最终合并成功并且播放好像没问题,但是不知道是不是真没问题…
于是想求教下mp4直接分割成ts那部分的命令怎么写最好(可以避免合并时的错误?)

为以前发过的分割脚本添加了个简单的mp4合并于是成这样了…
可以合并多个mp4为一个
或者就像上面说的单个mp4去除中间的部分再合并.

不是很明白为什么要转一次 ts 呢?直接剪切前后两段 mp4 合并就可以了吧

我一开始也以为是这样的呀…
搜索了一番才发现得先转成ts

发现方向错了
工具的主要用途是分割

最开始合并是为 单个视频分割出来的多个视频 服务的
这种用途下分割出来的视频参数是一致的
简单的copy就行了,不用转来转去的
将文件名称添加到 list.txt 的文件然后这样就可以了…
ffmpeg -f concat -i list.txt -c copy merged.mp4

不过这也有个小问题,不知道为什么这样的参数不行,非得先保存到list.txt
比方说这样就不行…是参数写错了吗
ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -c copy merged.mp4

印象中ffmpeg指定开始结束时间没有上面这种写法,而是-ss 00:00:30 -to 00:20:00这类。另外,ffmpeg有很多参数是既可以针对输入又可以针对输出的,具体是指哪个就要看你把这个参数是放在输入文件名前面还是输出文件名前面。反正我很晕,几乎所有操作都要先在网上搜个样例再画瓢

的确是你那样的写法
time1 是我保存 -ss 00:00:30 的变量…

另一个我是看我附带的文章有这样的写法
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
单纯的把mpg换成mp4就不行了也不知道为什么
非得导出到list.txt

应该两种方式都可以拼接。

不过我还是喜欢用 list 文件,因为这样可以批量编辑,输入文件比较多的话直接在命令行上一个一个敲起来很不方便