FFmpeg:m2ts -> MKV/AVI/MP4,带三重音频和字幕

FFmpeg:m2ts -> MKV/AVI/MP4,带三重音频和字幕

我有一个 1080p m2ts 文件,包含三个音轨和一个字幕轨道。我想将其转换为 720p MKV,或者说任何格式,同时保留所有三个音轨以及字幕文件。

尽管有三个音轨,但显示为有六个和两个字幕轨。

Input #0, mpegts, from '00003.m2ts':
  Duration: 00:24:53.39, start: 4198.958300, bitrate: 29700 kb/s
  Program 1 
    Stream #0.0[0x1011]: Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Stream #0.1[0x1100]: Audio: truehd, 48000 Hz, 5.1, s32
    Stream #0.2[0x1100]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.3[0x1101]: Audio: truehd, 48000 Hz, stereo, s32
    Stream #0.4[0x1101]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.5[0x1102]: Audio: truehd, 48000 Hz, mono, s32
    Stream #0.6[0x1102]: Audio: ac3, 48000 Hz, mono, s16, 96 kb/s
    Stream #0.7[0x1200]: Subtitle: pgssub
    Stream #0.8[0x1201]: Subtitle: pgssub

运行此命令将输出具有单个音轨且无字幕的 1280x720 视频。

ffmpeg -threads 8 -i 00003.m2ts -vcodec libx264 -preset veryslow -tune film -crf 22 -vf scale=-1:720 -acodec aac -b:a 256k -strict experimental output.mp4

通过 Google 搜索,我找到了 -map 函数的线索,但只选择我想要包含的曲目会导致错误。

ffmpeg -threads 8 -i 00003.m2ts -vcodec libx264 -preset veryslow -tune film -crf 22 -vf scale=-1:720 -acodec aac -b:a 256k -strict experimental -map 0:0 -map 0:1 -map 0:3 -map 0:5 -map 0:7 -vn output.mp4
Number of stream maps must match number of output streams

由于语法的改变,我发现的任何建议似乎都完全没用。例如,许多指南使用c:vanda:v而不是-vcodecand -acodec。我认为我安装的版本不是太旧。顺便说一下,我运行的是 Debian 7。

ffmpeg version 0.8.13-6:0.8.13-1, Copyright (c) 2000-2014 the Libav developers
  built on Jun 28 2014 17:50:37 with gcc 4.7.2

任何意见,将不胜感激。


更新:切换到评论中提供的 ffmpeg 解决了我的问题。

运行以下命令成功输出所有三个音轨和字幕轨道。

ffmpeg -threads 8 -i 00003.m2ts -vcodec libx264 -crf 21 -preset veryslow -tune film -scodec copy -acodec aac -b:a 192k -strict experimental -map 0:0 -map 0:5 -map 0:3 -map 0:1 -map 0:7 output.mkv

如果您在谷歌搜索时偶然发现了这一点,请更改功能中的第二个数字-map以选择曲目,并确保-scodec copy在翻录字幕时包含该数字。编辑-crf数字以更改压缩量。谷歌搜索以了解更多信息,并确保也查找 -tune,因为有许多不同类型的适合不同类型的视频。

相关内容