Кодировка FFmpeg для метаданных неверна - нужна в UTF8

Когда я запускаю эту команду

ffmpeg.exe -i test.mp3 -metadata title="The Title You  Want" -metadata artist="ÄÄÄßß!`n  Artist Name" -metadata album="Name Fö#'ddp+!of the Album" -c:a copy -id3v2_version 3  write_id3v1 1 out.mp3

Результирующее кодирование метаданных кажется неправильным.

Name: ÄÄÄßß!`n  Artist Name
Title: Name Fö#'ddp+!of the Album

Я использую foobar2000, чтобы проверить результат. Так есть идеи, как сделать это правильно? Я уже запустил chcp 65001, который устанавливает кодовую страницу Windows в UTF8, но без изменений.

Мне нужно, чтобы эта надежная работа работала над моим Windows 8 и любым дистрибутивом Linux.

Я мог бы использовать -i meta.txt -map_metadata 1 вместо того, чтобы записывать все данные напрямую, но проблема остается: даже когда я записываю метаданные в файл, файл выглядит правильно, а результат в файле MP3 - нет. Я автоматически генерирую файл через скрипт PHP.


Моя версия FFmpeg:

ffmpeg version N-46146-g11d695d Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 29 2012 18:10:27 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable
-bzlib --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enab
le-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroed
inger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-li
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib

2 ответа

Попробуйте просто "chcp 65001" изменить кодовую страницу на UTF-8 перед использованием ffmpeg

Я использую пакетный файл для добавления субтитров в медиафайл с помощью ffmpeg. Для французских субтитров у меня есть следующая строка:

      -metadata:s:s:%subMap0% language=fre -metadata:s:s:%subMap0% title="Français [Forced]" -disposition:s:s:%subMap0% forced

Как вы можете видеть из названия, у меня есть специальный символ «ç». Пакетный файл закодирован в UTF-8, поэтому здесь он отображается так, как я этого ожидал. Но когда я запускаю этот командный файл в cmd (windows10), символ сохраняется ложным. Заголовок дается после ffmeg, например:

Франсуэ [Вынужденно]

Когда я просто набираю команду «chcp» в командной строке, он сообщает мне, что кодовая страница cmd — 850. Это для моей страны, Бельгии, значение по умолчанию. Но он не принимает символы utf-8. Ввод команды «chcp 65001» изменит кодовую страницу команды на utf-8, и поэтому, когда ffmpeg вызывается со специальными символами в параметрах, все они будут приняты как символы utf8, что даст мне ожидаемый результат.

Поэтому в моих пакетных файлах, в которых используются специальные символы, я предваряю команду ffmpeg «chcp 65001», чтобы быть уверенным, что специальные символы (utf8) обрабатываются ffmpeg так, как я ожидаю.

Например :

      @ECHO OFF
CLS
SETLOCAL
chcp 65001
ffmpeg -hide_banner -y -i input.mp4 -i sub.srt -map 0:v -map 0:a -map 1 -c:v copy -c:a copy -c:s copy -metadata:s:s:0 language=fre -metadata:s:s:0 title="Français [Forced]" -disposition:s:s:0 forced output.mp4
ENDLOCAL

«chcp» — это команда Windows. Я не знаю, что такое эквивалент в Linux (я проверял).

Другие вопросы по тегам