У меня есть файл 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
и a:v
вместо -vcodec
и -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
Для тех, кто сталкивается с этим во время поиска в Google , измените второе число в функциях -map
чтобы выбрать ваши треки, и обязательно включайте -scodec copy
при копировании субтитров. Отредактируйте число -crf
чтобы изменить степень сжатия. Google, чтобы узнать больше, и не забудьте посмотреть-настроиться, так как есть много разных типов, подходящих для разных видов видео.