Вопрос или проблема
[Поток] index=0 codec_name=h264
[Поток] index=1 codec_name=aac
[Поток] index=2 codec_name=mp3
ffmpeg.exe -y -i “C:\Temp\MultiAudio\Test0V1A2A.mkv” -map 0:v:0 -map 0:a:2 -map_metadata -1 -metadata title=”Test0V1A2A” -sn -dn -f MP4 -preset veryslow -crf 18 libx264 -profile:v baseline -level 3.0 -maxrate 500k -minrate 450 -bufsize 1000k -vf scale=960:540 -pix_fmt yuv420p -codec:a:2 AAC -b:a 128k “C:\Temp\MultiAudio\Test0V1A2A.MP4” -loglevel error
Поток карты ” не соответствует ни одному потоку.
Чтобы игнорировать это, добавьте вопросительный знак ‘?’ в конец карты.
Не удалось установить значение ‘0:a:2’ для параметра ‘map’: Неверный аргумент
Я в недоумении, почему я не могу выбрать второй аудиопоток с помощью вышеуказанной команды. Кто-то видит явную ошибку?
Если я исключаю раздел карты, я получаю поток 1 нормально, но когда он включен, он указывает, что нет 2 потока. Я даже загрузил последнюю стабильную 64-битную версию Windows без разрешения.
P.S.: при использовании карты скорость конверсии снижается с примерно 3x до 0.5x, что ужасно.
Ответ или решение
Когда вы сталкиваетесь с ошибкой выбора аудиопотока в FFMPEG, это может вызывать чувство недоумения, особенно при использовании командной строки для обработки медиафайлов. Рассмотрим ваш случай более подробно.
Проблема и её диагностика
При выполнении команды:
ffmpeg.exe -y -i "C:\Temp\MultiAudio\Test0V1A2A.mkv" -map 0:v:0 -map 0:a:2 -map_metadata -1 -metadata title="Test0V1A2A" -sn -dn -f MP4 -preset veryslow -crf 18 libx264 -profile:v baseline -level 3.0 -maxrate 500k -minrate 450 -bufsize 1000k -vf scale=960:540 -pix_fmt yuv420p -codec:a:2 AAC -b:a 128k "C:\Temp\MultiAudio\Test0V1A2A.MP4" -loglevel error
Вы получаете сообщение об ошибке:
Stream map '' matches no streams.
To ignore this, add a trailing '?' to the map.
Failed to set value '0:a:2' for option 'map': Invalid argument
Это сообщение означает, что FFMPEG не может найти указанный аудиопоток с индексом 2
. Давайте рассмотрим детально, почему это происходит.
Структура потоков
Из приведенной вами информации о потоках:
[STREAM] index=0 codec_name=h264
[STREAM] index=1 codec_name=aac
[STREAM] index=2 codec_name=mp3
У вас есть три потока:
- Поток 0: Видео (h264)
- Поток 1: Аудио (aac)
- Поток 2: Аудио (mp3)
Ошибка возникает из-за того, что вы используете -map 0:a:2
, что указывает на третий аудиопоток (в нумерации с нуля). Однако, в вашем случае, допустимые индексы для аудиопотоков начинаются с 0 и заканчиваются на 1. Следовательно, поток с индексом 2
не существует, и вы получаете ошибку.
Решение проблемы
Чтобы исправить ошибку, вам нужно использовать правильный индекс аудиопотока. Если вы хотите выбрать второй аудиопоток (то есть поток с кодеком mp3
), вы должны заменить 0:a:2
на 0:a:1
.
Обновлённая команда будет выглядеть так:
ffmpeg.exe -y -i "C:\Temp\MultiAudio\Test0V1A2A.mkv" -map 0:v:0 -map 0:a:1 -map_metadata -1 -metadata title="Test0V1A2A" -sn -dn -f MP4 -preset veryslow -crf 18 libx264 -profile:v baseline -level 3.0 -maxrate 500k -minrate 450 -bufsize 1000k -vf scale=960:540 -pix_fmt yuv420p -codec:a:0 AAC -b:a 128k "C:\Temp\MultiAudio\Test0V1A2A.MP4" -loglevel error
Замечание о производительности
Что касается замедления скорости конверсии с использованием карты потоков (от 3x до 0.5x), это может произойти по нескольким причинам:
-
Параметры кодирования: Вы используете
-preset veryslow
, что фокусируется на максимальном качестве и минимальной компрессии, но требует больше ресурсов и времени. -
Качество: Использование параметров, таких как
-crf 18
, также может замедлить процесс, так как стремится к более высокому качеству. -
Выбор потока: Возможное изменение параметров потока может также повлиять на производительность.
Попробуйте использовать более быстрые предустановки -preset
(например, medium
или fast
), чтобы улучшить производительность.
Заключение
Проблема с выбором аудиопотока в FFMPEG часто может быть быстро решена правильной настройкой индексов потоков. Всегда проверяйте доступные потоки и их индексы, чтобы избежать таких ошибок. Если у вас возникнут дополнительные вопросы или ошибки, не стесняйтесь обращаться за поддержкой и уточнениями.