我有一个 ~400GB 的 .mkv 文件,想上传到 YouTube,但不幸的是 YouTube 限制我上传 256GB。所以我在 Google 上搜索是否可以使用 FFMPEG 分割文件,并找到了以下文章 (FFMPEG 分割相同质量的 MP4),总而言之我运行了以下命令(我在 Windows 上):
%UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -i largefile.mp4 -t 02:30:23 -c copy smallfile1.mkv -ss 02:30:23 -c copy smallfile2.mkv
阅读上一篇文章中的文本,似乎两个时间戳都需要相同,对于第 1 部分,它应该是结束时间,对于第 2 部分,它应该是开始时间。
这花了很长时间,它首先开始工作smallfile1.mkv
,大约每 20 分钟就会得到 1 GB,同时我的 CPU 使用率达到 100%。我粗略计算了一下,如果第一个文件完成。没人有时间做这个!
于是我接下来找到了这篇文章(https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg),最终生成了 2 个命令:
%UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -ss 00:00:00 -to 02:30:23 -i largefile.mp4 -c copy smallfile1.mkv
和
%UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -ss 02:30:20 -to 05:04:31 -i largefile.mp4 -c copy smallfile2.mkv
但这个速度要快得多,它占用了我的硬盘空间,但没有占用我的 CPU(我有 2 个驱动器,所以在运行时我的电脑是可用的),我知道它马上就起作用了,因为我只用了几秒钟就得到了 1 GB。每个文件大约需要 30 分钟的转换时间,然后我就可以开始上传了。
第一个步骤我做错了什么?为什么效率这么低,而且耗时这么长?我本来可以用一个命令将它们拼接起来,只需运行
%UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -ss 00:00:00 -to 02:30:23 -i largefile.mp4 -c copy smallfile1.mkv && %UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -ss 02:30:20 -to 05:04:31 -i largefile.mp4 -c copy smallfile2.mkv
(注意两个命令之间的空格&&
)但我可以在处理其他事情的同时关注进度。
我在解释中跳过了这一点,但在排除故障时,我尝试将其转换为 .mp4(希望保持相同的质量),这似乎有效,文件大小非常相似,质量也差不多。这是链接(https://askubuntu.com/questions/50433/how-to-convert-mkv-file-into-mp4-file-losslessly) 和以下命令:
%UserProfile%\Downloads\ffmpeg-5.1.1-full_build\bin\ffmpeg.exe -i input.mkv -codec copy output.mp4
我还将最终的分割文件转换为 .mp4,但在测试时,将输出文件指定为 .mkv 的速度大致相同,甚至更快。尝试将完整文件转换为 .mp4 并将 .mkv 转换为 .mp4 的原始命令也会导致同样的高 CPU 缓慢进度。
我对未来有自己的解决方案,但我真的很好奇为什么另一个解决方案不起作用,这样我就可以让我将来的生活更轻松。
编辑:格式化。
答案1
你应该读一下这个:https://trac.ffmpeg.org/wiki/Seeking
-ss
如果是在之前或之后,行为会有很大不同-i