(ffmpeg) 未设置 VBV 缓冲区大小 - MPG 到 MPG

(ffmpeg) VBV buffer size not set - MPG to 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

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

我该如何解决这个问题?

非常感谢您的回答 ;)

如果您想删除媒体中的一个流,复制所有内容但要删除的流。

查找媒体内的所有流

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

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 是一个现代媒体容器(avimpg 相当陈旧和过时,mp4 也较新,但是 mkv更灵活)。但您也可以使用 mpg 容器作为输出。

删除流

现在我将向您展示如何 select 流与我上面的示例媒体文件一起复制。其他流将被省略(=删除):

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