最近需要把一个视频文件容器从 MKV 转为 MP4。以前的话就直接重编码了,反正看不出来。由于近期录屏用过 OBS,知道它有一个一键转封装的功能,而且又快又好,所以想用它的。试了一下,不行。(后面通过 FFmpeg 命令行输出推测应该就是部分流无法识别。)
那就直接用 FFmpeg 吧。我对它的命令行不熟,只用过几次,需求也不大。所以这里就做个记录。
源 MKV 有9条数据流,其中流0为视频流0,流1为音频流0,流2为字幕流0,其他分别是附件流0到5。我只需要在目标 MP4 中保留视频流和音频流。命令行如下:
1 | ffmpeg -find_stream_info -i input.mkv -map 0:v:0 -map 0:a:0 -map -0:s -codec copy output.mp4 |
-find_stream_info
测试流格式。-codec copy
复制编解码信息。(因为源视频流是 H.264、音频流是 AAC-LC,MP4 也支持这些格式。)-map
指定流映射。其中可以指定负映射来删除流。上面删除字幕流等效于-sn
。
这样在输出文件中就只有一条视频流和一条音频流了。