ffmpeg 截取切割视频报错

Posted 圆滚熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg 截取切割视频报错相关的知识,希望对你有一定的参考价值。

在用ffmpeg来截取只有视频没有音频的mp4文件时,有一些视频可以切割,少部分不能分割,遇到到了bug。

截取命令:

cd D:\\ffmpeg\\bin>
ffmpeg -ss 370 -to 389 -i 01.mp4 -y -f mp4 -vcodec copy  -q:v 1  output.mp4

报错如下:

[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing

[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[mpeg @ 0000022b8218dcc0] Packet corrupt (stream = 0, dts = 37275057).
01.mp4: corrupt input packet in stream 0
[mp3float @ 0000022b8220d300] Header missing
Error while decoding stream #0:1: Invalid data found when processing input
[abuffer @ 0000022b830c9100] Value inf for parameter 'time_base' out of range [0 - 2.14748e+09]
    Last message repeated 3 times
[abuffer @ 0000022b830c9100] Error setting option time_base to value 1/0.
[graph_0_in_0_1 @ 0000022b827ab240] Error applying options to the filter.
Error reinitializing filters!
Error while filtering: Result too large
Finishing stream 0:1 without any data written to it.
[abuffer @ 0000022b830c9640] Value inf for parameter 'time_base' out of range [0 - 2.14748e+09]
    Last message repeated 3 times
[abuffer @ 0000022b830c9640] Error setting option time_base to value 1/0.
[graph_0_in_0_1 @ 0000022b827ab240] Error applying options to the filter.
Error configuring filter graph
Conversion failed!

解决方法:

增加 -an 参数。

ffmpeg -ss 370 -to 389 -i 01.mp4 -y -f mp4 -vcodec copy -acodec copy -q:v 1 -an output.mp4

附ffmpeg参数含义:

'''
-ss 指定要截取的视频的起始时间。

-to 指定要截取的视频的终止时间。

-i 输入文件,这里指的就是视频文件。

-y 表示无需询问,直接覆盖输出文件(如果有原文件的话)。

-f 指定输出视频的格式。

-acodec 指定音频编码格式。copy表示编码格式不发生改变,直接复制原来的编码格式,这样会大大提升速度。

-vcodec 指定视频编码格式。copy表示编码格式不发生改变,直接复制原来的编码格式,这样会大大提升速度。

-q:v 1 q是质量,v是视频,v的取值范围是[1, 35],取值1的时候,对应着最佳的视频质量。

-an:a代表音频,n代表no an就是无音频的意思

'''

ffmpeg Operation not permitted 报错的解决过程记录

问题重现

由于视频的录制过程出现了一些小问题,需要重新将视频文件切割和合并,找了几个视频编辑软件来做这个事情,最终的结果都不是特别满意,当时已经挺晚的了,本来打算上床睡觉第二天再去想辙,从椅子上起身的时候忽然想到了 ffmpeg 这个工具,挺久之前在工作中用它做了一个视频切割相关的功能,于是赶紧把它安装和配置好,视频切割的时候倒还顺利,在进行视频合并的时候出现了题目中的这个问题:

Operation not permitted 

我把当时的相关文件都放在这里,如下图所示:

技术图片

我需要把图中 27-end.mp4 和 27-head.mp4 两个视频文件合并成一个视频文件,ffmpeg 需要的 txt 文件也如上图所示,将需要合并文件的目录放在文件里即可,因为是在当前目录执行的 cmd 命令,所以就直接将目录设置为当前目录了。

当时执行的视频合并命令如下:

ffmpeg -f concat -i list.txt -c copy lesson-27.mp4

但是得到的结果如下:

技术图片

问题解决过程

权限问题

看到这个错误之后,我以为是文件权限的问题,于是右键“管理员取得所有权”,之后还是报这个错,后来把文件目录写成绝对路径,也依然没用,陷入僵局....

网上搜答案

自己没解决,赶紧到网上看看有没有其他人碰到这个问题,查了一圈,问题是有类似的,但是解决方案都没有,又凉了,也因此我在解决之后写了这篇文章。

换个思路

大家可以再看一眼上图中的报错,在 Operation not permitted错误上面还有一个Unsafe file name的错误,于是我看了一下 ffmpeg 的文档,最终发现可以在命令行中添加 -safe 参数来避免这个问题,赶紧就去试了一次,最终将文件合并成功,执行的命令如下:

ffmpeg -f concat -safe 0 -i list.txt -c copy lesson-27.mp4

技术图片

小总结

因为在网络上没有查到这个问题的解决方法,也看到很多朋友同样在搜这个问题,所以整理了这篇文章,有碰到类似问题的朋友可以参考一下。

以上是关于ffmpeg 截取切割视频报错的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg如何批量切割视频尾部4秒?

如何利用ffmpeg将一小段视频截取成图片

使用ffmpeg从视频文件中提取音频文件视频抽帧和切割视频

ffmpeg # 视频切割 # copy模式的一点理解

Ffmpeg 实现文件切割

FFmpeg-截取视频图片