首页 > 解决方案 > (ffmpeg) 未设置 VBV 缓冲区大小 - MPG 到 MPG

问题描述

我有一个带有两个音频流的 MPG 文件 (mpeg2)。

我只想在不重新编码或质量损失的情况下删除其中一个音频流。

这是我的命令(我不映射要删除的音频):

ffmpeg -i input.MPG
-map 0:v:0 -map 0:a:1
-vcodec mpeg2video
-c:a mp2
-y
output.MPG

它有效但我有这个错误/警告:

[mpeg @ 0000020268f9a300] VBV buffer size not set, using default size of 230KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size

当然,输出视频的质量非常糟糕!

我怎样才能解决这个问题 ?

非常感谢你的回答 ;)

标签: ffmpegmpeg

解决方案


如果要删除媒体中的一个流,请复制除要删除的流之外的所有内容。

查找媒体内的所有流

您可以通过以下方式获得媒体中的所有流:

ffprobe mediafile.mpg 2>&1 | grep -i stream

例子

这是我的媒体之一的示例输出:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 171 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 55 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Stream #0:2(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Stream #0:3(deu): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s
Stream #0:4(fra): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s

它有两个视频流(来自两个摄像头)和三个音频流(不同语言)。

如何复制(无损)

现在,如果你想复制一个流,你需要这个词copy作为编解码器。例子:

ffmpeg -i media.mpg -c copy output.mkv

或更明确(视频和音频编解码器)

ffmpeg -i media.mpg -c:v copy -c:a copy output.mkv

作为标准,这将仅复制第一个视频流、第一个音频流、第一个字幕流等。

复制所有流:

ffmpeg -i media.mpg -map 0 -c copy output.mkv

注意:mkv是一个现代媒体容器(avi并且mpg相当陈旧和过时,mp4也较新,但mkv更灵活)。但是你也可以使用mpg容器作为输出。

删除流

现在,我将向您展示如何使用上面的示例媒体文件选择要复制的流。其他流将被省略(= 删除):

ffmpeg -i media.mkv -c copy -map 0:0 -map 0:2 -map 0:3 output.mkv

正如您在上面看到的,我有两个视频流(0:0 和 0:1)和三个音频流(0:2、0:3、0:4)。在我的命令中,我省略了流 0:1 和 0:4(我删除了它们)。

你的情况

对于您的情况,您应该有 0:0(视频)和 0:1(音频)和 0:2(音频):

ffmpeg input.mpg -c copy -map 0:0 -map 0:1 output.mpg

推荐阅读