我有一个 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:v
anda:v
而不是-vcodec
and -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,因为有许多不同类型的适合不同类型的视频。