FFmpeg 转封装

最近需要把一个视频文件容器从 MKV 转为 MP4。以前的话就直接重编码了,反正看不出来。由于近期录屏用过 OBS,知道它有一个一键转封装的功能,而且又快又好,所以想用它的。试了一下,不行。(后面通过 FFmpeg 命令行输出推测应该就是部分流无法识别。)

那就直接用 FFmpeg 吧。我对它的命令行不熟,只用过几次,需求也不大。所以这里就做个记录。

源 MKV 有9条数据流,其中流0为视频流0,流1为音频流0,流2为字幕流0,其他分别是附件流0到5。我只需要在目标 MP4 中保留视频流和音频流。命令行如下:

1
2
3
ffmpeg -find_stream_info -i input.mkv -map 0:v:0 -map 0:a:0 -map -0:s -codec copy output.mp4
# 在上述文件流结构的条件下,等价于:
ffmpeg -find_stream_info -i input.mkv -map 0 -map -0:s -map -0:t -codec copy output.mp4
  • -find_stream_info 测试流格式。
  • -codec copy 复制编解码信息。(因为源视频流是 H.264、音频流是 AAC-LC,MP4 也支持这些格式。)
  • -map 指定流映射。其中可以指定负映射来删除流。上面删除字幕流等效于 -sn

这样在输出文件中就只有一条视频流和一条音频流了。

分享到 评论