我有一个带有两个音频流的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
作为标准,它将仅复制第一个视频流,第一个音频流,第一个字幕流等。>>
注意: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