首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ffmpeg进行转换时覆盖文件的问题

使用ffmpeg进行转换时覆盖文件的问题
EN

Stack Overflow用户
提问于 2015-03-05 19:39:51
回答 4查看 15.7K关注 0票数 16

我正在使用ffpmeg将我所有的视频转换成mp4格式:

代码语言:javascript
运行
复制
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 OutputFile.mp4

问题是,如果我覆盖输入文件,即输出文件和输入文件是相同的:

代码语言:javascript
运行
复制
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 InpuFile.mp4 -y

或者

代码语言:javascript
运行
复制
ffmpeg -i InpuFile -y -vcodec h264 -acodec aac -strict -2 InpuFile.mp4

新文件不好。他只持续一秒钟,而且他的体型非常小。

有什么想法吗?

我想在我的服务器中使用这个脚本,所以覆盖对我来说是最方便的方式,我更喜欢这种方式,而不是创建临时文件,然后用原始文件替换临时文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-05 20:03:14

我也有同样的(令人沮丧的)问题,你可能已经注意到了,这是因为ffmpeg正在覆盖它正在读取的文件,你在进程结束之前就破坏了源文件……ffmpeg不会将文件放在某个缓冲区中,所以你不能这样做,你必须使用临时文件。

以防万一

票数 18
EN

Stack Overflow用户

发布于 2015-05-31 00:02:31

编码时不能覆盖输入文件。您必须编码到不同的输出文件。

然后,您可以用新的编码文件替换原始文件。

票数 2
EN

Stack Overflow用户

发布于 2020-03-03 19:28:13

正如其他人所提到的,如果不创建临时文件,就无法做到这一点。你提到你想要压缩你所有的视频,并且为了方便。下面是我用来将所有MP4 & MOV压缩到一个目录中的bash一行代码:

代码语言:javascript
运行
复制
find * -type f \( -iname \*.mp4 -o -iname \*.mov \) -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;

The -crfparam控制视频码率。取值范围为18-24,取值越小码率越高。

如果你只是想压缩.mp4例如,将命令更改为:

代码语言:javascript
运行
复制
find * -type f -iname "*.mp4" -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;

希望这对OP或任何想要做类似事情的人有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28877049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档