使用 ffmpeg 进行转换时覆盖文件的问题
Issue with overwriting file while using ffmpeg for converting
我正在使用 ffpmeg 将我所有的视频转换为 mp4:
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 OutputFile.mp4
问题是,如果我覆盖输入文件,即输出文件和输入文件相同:
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 InpuFile.mp4 -y
或
ffmpeg -i InpuFile -y -vcodec h264 -acodec aac -strict -2 InpuFile.mp4
新文件不好。他持续一秒,体型极小
有什么想法吗?
我想在我的服务器中使用它作为脚本,所以覆盖对我来说是最方便的方式,我更喜欢这种方式而不是创建临时文件然后用原始文件替换临时文件。
我遇到了同样的(令人沮丧的)问题,您可能已经注意到发生这种情况是因为 ffmpeg 正在覆盖它正在读取的文件,您在进程完成之前破坏了源...ffmpeg 没有将一些缓冲区中的文件,所以你不能这样做,你将不得不使用一个临时文件。
编码时不能覆盖输入文件。您必须编码为不同的输出文件。
之后,您可以将原始文件替换为新的编码文件。
使用 tmp 文件也不是很烦人。在一行中:
input="InpuFile"; ffmpeg -i "$input" -y -vcodec h264 -acodec aac -strict -2 "/tmp/$input";rm "$input"; mv "/tmp/$input" .;
正如其他人所提到的,如果不创建临时文件就无法执行此操作。你提到你想压缩你所有的视频,为了方便。这是我用来压缩目录中所有 MP4 和 MOV 的 bash 一行代码:
find * -type f \( -iname \*.mp4 -o -iname \*.mov \) -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;
-crf
参数控制视频比特率。取值范围为18-24,取值越小码率越高。
如果您只想压缩 .mp4
,那么您可以将命令更改为:
find * -type f -iname "*.mp4" -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;
希望这对 OP 或任何想做类似事情的人有所帮助。
我正在使用 ffpmeg 将我所有的视频转换为 mp4:
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 OutputFile.mp4
问题是,如果我覆盖输入文件,即输出文件和输入文件相同:
ffmpeg -i InpuFile -vcodec h264 -acodec aac -strict -2 InpuFile.mp4 -y
或
ffmpeg -i InpuFile -y -vcodec h264 -acodec aac -strict -2 InpuFile.mp4
新文件不好。他持续一秒,体型极小
有什么想法吗?
我想在我的服务器中使用它作为脚本,所以覆盖对我来说是最方便的方式,我更喜欢这种方式而不是创建临时文件然后用原始文件替换临时文件。
我遇到了同样的(令人沮丧的)问题,您可能已经注意到发生这种情况是因为 ffmpeg 正在覆盖它正在读取的文件,您在进程完成之前破坏了源...ffmpeg 没有将一些缓冲区中的文件,所以你不能这样做,你将不得不使用一个临时文件。
编码时不能覆盖输入文件。您必须编码为不同的输出文件。
之后,您可以将原始文件替换为新的编码文件。
使用 tmp 文件也不是很烦人。在一行中:
input="InpuFile"; ffmpeg -i "$input" -y -vcodec h264 -acodec aac -strict -2 "/tmp/$input";rm "$input"; mv "/tmp/$input" .;
正如其他人所提到的,如果不创建临时文件就无法执行此操作。你提到你想压缩你所有的视频,为了方便。这是我用来压缩目录中所有 MP4 和 MOV 的 bash 一行代码:
find * -type f \( -iname \*.mp4 -o -iname \*.mov \) -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;
-crf
参数控制视频比特率。取值范围为18-24,取值越小码率越高。
如果您只想压缩 .mp4
,那么您可以将命令更改为:
find * -type f -iname "*.mp4" -execdir ffmpeg -i {} -vcodec libx265 -crf 24 temp_{} \; -execdir mv temp_{} {} \;
希望这对 OP 或任何想做类似事情的人有所帮助。