ffmpeg 命令将视频文件的一部分转换为音频文件

ffmpeg 命令将视频文件的一部分转换为音频文件

我有一个视频文件(时长 1 小时)。我需要将视频文件的任何部分(30 分钟)转换为音频文件

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vcodec copy -acodec copy /opt/b.mp4

然后我用

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -acodec copy /opt/b.mp4

但我仍然可以同时观看视频和音频。我只需要音频文件

答案1

如果你只需要音频(我希望我理解正确),那么你根本不需要第一步。如果你使用:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec copy /opt/b.mp3

它会做到的假如原始音频编解码器是 mp3。如果不是,您可以强制重新编码:

ffmpeg -ss 00:30:00 -t 01:00:00 -i /opt/a.mp4 -vn -acodec libmp3lame ...other_parameters.. /opt/b.mp3

other_parameters有比特率等。

答案2

有两种主要方法可以从包含视频或音频的文件中仅获取视频或音频。默认情况下流选择ffmpeg 中的行为将为每个流类型选择一个流。请注意,输入可以包含多种流类型:视频、音频、字幕和数据。某些输入甚至可以包含每种流类型的多个流;例如两个视频流。


-vn或者-an

这些选项告诉 ffmpeg 省略视频(-vn)或音频(-an)。

要省略视频并复制音频:

ffmpeg -i input -vn -codec:a copy output.mka

要省略音频并复制视频:

ffmpeg -i input -an -codec:v copy output.mkv
  • 这些例子将流复制所需的流。这意味着 ffmpeg 将简单地重新复用它,而不是重新编码。这非常快,而且由于它本质上是“复制和粘贴”,因此不会影响质量。

  • 使用-vn-an不会忽略可能存在的其他流,例如字幕或数据流,但仅音频格式无论如何都会忽略这些流。


-map

-map选项可能看起来更复杂,但更灵活和有用。例如,-vn告诉 ffmpeg 仅忽略视频流,但通过使用流说明符 -map可以告诉 ffmpeg 省略除所需流之外的所有内容。

仅复制视频:

ffmpeg -i input -map 0:v -codec copy output.mkv

仅复制音频:

ffmpeg -i input -map 0:a -codec copy output.mka
  • 0:v一个流说明符,告诉 ffmpeg 仅包含来自第一个输入的0视频流v。这可以进一步扩展。如果您的输入包含多个视频流并且您只想要第一个,则使用0:v:0meansfirst input:video:first video stream和 将很有用。请参阅 ffmpeg 控制台输出以找出输入中流的顺序。

  • 您还可以使用负映射。使用-map 0 -map -0:a:1将映射除第二个音频流之外的所有流。-map 0告诉 ffmpeg 包含来自输​​入0(第一个输入)的所有流,然后-map -0:a:1告诉 ffmpeg 忽略来自第一个输入的第一个音频流。

答案3

第一部分是正确的。第二部分只提取 b.mp4 文件的音频。

ffmpeg -i b.mp4 -vn -acodec copy audio_b.mp3

相关内容