我怎么知道 ffmpeg 正在转换我的视频?

我怎么知道 ffmpeg 正在转换我的视频?

嗯,所以我尝试使用 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

  1. 在命令行中使用空格时要小心。空格用于分隔解释器的参数(此过程称为“解析”)。

    如果您的文件名称中有空格,您应该使用\(反斜杠)将其“转义”,因此您的命令应如下所示:

    ffmpeg -i Sekiro\ 3.mp4 -c copy Sekiro\ 3.mkv
    
  2. 根据 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 只是包含音频和视频流的容器。

    您必须实际更改编码器才能看到文件大小的变化。更有经验的人可以告诉您使用哪一个。

相关内容