3

У меня на диске куча фильмов в формате avi. Однако они не содержат метаданных, таких как заголовок и т.д.

Я нашел команду, которая сделает это для меня:

ffmpeg -i input.avi -metadata title="Moonshine" -metadata author="Moonshine" -metadata copyright="2009" -metadata comment="foo" -acodec copy -vcodec copy output.avi

Это прекрасно работает, но он будет копировать только одну звуковую дорожку. Мои файлы содержат более одной звуковой дорожки. Я хочу, чтобы ffmpeg скопировал все и дал файлу название.

Кроме того, есть ли способ дать аудиотрекам название языка? Например, файл содержит 2 звуковых дорожки. Первый - английский, второй - русский. Как правильно их назвать, чтобы при использовании видеоплеера в языковом меню отображалось, что первый - английский, а второй - русский?

3 ответа3

5

выбор потока

По умолчанию при выборе потока выбирается один тип потока для каждого входа. Например, как и на вашем входе, если он содержит два аудиопотока, будет выбран только поток с наибольшим количеством каналов.

Вы можете указать ffmpeg включить все потоки с опцией -map .

Поскольку опция -map начинает отсчет с 0 , 0 в этом примере относится к первому входу (input.avi: ваш единственный вход в этом случае). Если бы у вас были дополнительные входы, тогда -map 1 будет ссылаться на второй вход.

установить метаданные языка

Чтобы установить язык первого и второго аудиопотоков, используйте параметр -metadata с указателями потока:

ffmpeg -i input.avi -map 0 -codec copy -metadata:s:a:0 language=eng -metadata:s:a:1 language=rus output.avi

Смотрите документацию для получения дополнительной информации.

0

Используйте как это для файлов AVI

 -map 0 -acodec copy -metadata:s:a:0  title="English" -metadata:s:a:1 title="Hindi"

Ключевое слово title делает свое дело

0

Мне потребовалось довольно много времени, чтобы понять это. Я публикую это здесь, потому что даже после 3 лет эта тема является одним из первых хитов в поиске Google: AVI (более конкретно: RIFF) поддерживает имена языков, но в отличие от mkv, метаданные не сохраняются в потоке, но в заголовке используются теги IAS1-9 для до 9 различных аудиопотоков.

ffmpeg -i input.avi -map 0 -codec copy -metadata IAS1=eng -metadata IAS2=ger output.avi

VLC довольно толерантный. Если вы вводите ISO-код "ger", VLC переводит его в "Deutsch", если вместо этого вы вводите "MyLang", VLC отображает "MyLang". Для другого программного обеспечения, такого как Kodi, необходим правильный код ISO. Он будет читать только "MyL" и отображать язык как неизвестный.

Однако имейте в виду, что ffmpeg не только добавляет язык, но и изменяет другие метаданные. Например, данные чередования аудио и предварительной загрузки различаются в файле output.avi, не знаю, хорошо ли это или может привести к несинхронизации звука. Проверьте с MediaInfo или аналогичным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .