嗯,所以我尝试使用 ffmpeg 将我的 mp4 视频转换为较小的格式,如 mov 或 flv,因为 mp4 太大了,而视频只是备份。
我尝试在 Windows 运行命令中使用它来将我的容器交换为 mov(这是我认为应该做的事情,虽然我有点猜测,但我读过的教程都没有真正提到这一点):
ffmpeg -i Sekiro 3.mp4 -c copy Sekiro 3.mkv
但什么都没发生。我觉得我做错了什么,但我甚至不知道那是什么。我确实按照步骤安装了它,但我很确定我不知道如何让 ffmpeg 找到视频文件。
它是否有弹出窗口或类似的东西,以便我查看它是否正常工作?我对此感到困惑。
答案1
您的问题中有一些错误的假设:
请先阅读编解码器和容器之间的区别。
你说你想通过重新编码视频来节省空间,但你的命令只将视频比特流复制到另一个容器(FFmpeg 术语中的“格式”),因为它使用了
-c copy
。为了获得更小的文件,你必须重新编码视频(也许还有音频)流。要重新编码视频流,请更改
-c copy
为-c:v libx264
,这将使用 H.264 编码器重新编码您的视频。要控制大小和质量,请使用选项-crf 23
。默认情况下,其值为 23;值越低,质量越高,反之亦然。有用的范围是 18–28,具体取决于您想要节省多少。您可以阅读更多关于 CRF 编码的信息请点击此处。CRF 为 ±6 会使文件大小大约减少一半或两倍。输出容器其实并不重要;它不会显著改变文件大小。Matroska (MKV) 是一种现代容器,基本上支持任何编解码器类型。如果您不知道该使用什么,请选择它。
从 Windows 运行 ffmpeg 命令时,首先必须打开命令提示符。然后从那里运行命令。在 Windows 下运行 FFmpeg 的优秀教程与上面的 Gyan 有链接。
当使用名称中带有空格的文件时,必须用引号引起来。例如,名为 的文件
foo bar.mp4
将被解释为两个文件,一个文件名为foo
,另一个文件名为bar.mp4
。这显然不是您想要的。
总而言之,你的命令变成:
ffmpeg -i "Sekiro 3.mp4" -c:v libx264 -crf 23 -c:a copy "Sekiro 3.mkv"
该-c:a copy
部分说:复制音频流。如果这导致文件太大,您可以将 CRF 增加到 28。
答案2
在命令行中使用空格时要小心。空格用于分隔解释器的参数(此过程称为“解析”)。
如果您的文件名称中有空格,您应该使用
\
(反斜杠)将其“转义”,因此您的命令应如下所示:ffmpeg -i Sekiro\ 3.mp4 -c copy Sekiro\ 3.mkv
根据 ffmpeg 的手册页
codec 是解码器/编码器的名称或特殊值“copy”(仅输出),表示该流不会被重新编码。
因此,据我所知,它不会对您的文件进行任何更改,除非您添加
-c
手册中所述的其他选项:-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
为一个或多个流选择一个编码器(在输出文件之前使用时)或一个解码器(在输入文件之前使用时)。编解码器是解码器/编码器的名称或特殊值“copy”(仅输出),表示该流不会被重新编码。
例如
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
使用 libx264 对所有视频流进行编码并复制所有音频流。
对于每个流,将应用最后一个匹配的“c”选项,因此
ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
将复制除第二个视频(将使用 libx264 编码)和第 138 个音频(将使用 libvorbis 编码)之外的所有流。
ffmpeg -codecs
您可以使用或获取可用编解码器、编码器等的列表ffmpeg -encoders
。然后您应该考虑切换copy
到所需的编解码器输出。正如解释的那样这邮政:
MP4 和 MOV 只是包含音频和视频流的容器。
您必须实际更改编码器才能看到文件大小的变化。更有经验的人可以告诉您使用哪一个。