FFmpeg 元数据编码错误 – 需要 UTF8 格式

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

答案1

在使用 ffmpeg 之前,请尝试使用“chcp 65001”将代码页更改为 UTF-8

答案2

我正在使用批处理文件通过 ffmpeg 向媒体文件添加字幕。对于法语强制字幕,我有以下几行:

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

正如您在标题中看到的,我有一个特殊字符“ç”。批处理文件采用 UTF-8 编码,因此这里显示的字符与我预期的一样。但是当我在 cmd(windows10)中运行此批处理文件时,该字符存储为 false。标题在 ffmeg 之后给出,如下所示:

Fran═ ...

当我在命令行中输入命令“chcp”时,它告诉我 cmd 的代码页是 850。这是我的国家比利时的默认代码页。但它不接受 utf-8 字符。输入命令“chcp 65001”将把命令的代码页更改为 utf-8,因此当使用参数中的特殊字符调用 ffmpeg 时,它们都将被接受为 utf8 字符,从而得到我期望的结果。

因此,在使用特殊字符的批处理文件中,我在 ffmpeg 命令前面加上了“chcp 65001”,以确保 ffmpeg 能够按照我期望的方式处理特殊(utf8)字符。

例如 :

@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 中对应的命令是什么(我查过了)。

相关内容