FFmpeg/Avconv 由于编解码器不受支持,无法复制字幕?
FFmpeg/Avconv unable to copy subtitles due to unsupported codec?
我有一个包含这些流的 mp4 文件(avconv -i file.mp4
或 ffmpeg -i file.mp4
):
Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, fltp, 384 kb/s
Stream #0.2(eng): Video: h264 (Main), yuv420p, 1280x568, 4027 kb/s, PAR 1:1 DAR 160:71, 23.98 fps, 2997 tbn, 50 tbc (default)
Stream #0.3(eng): Subtitle: c608 / 0x38303663, 0 kb/s
Stream #0.4(und): Subtitle: text / 0x74786574
Stream #0.5: Video: mjpeg, yuvj420p, 667x1000 [PAR 72:72 DAR 667:1000], 90k tbn
我正在尝试从文件中删除第一个音频流,如下所示:
avconv -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
# OR #
ffmpeg -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
问题是,我得到这个错误:
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
所以,我检查了 mp4 文件本身是否有问题:
avprobe file.mp4
# OR #
ffprobe file.mp4
输出显示:
Unsupported codec with id 0 for input stream 3
Unsupported codec with id 94213 for input stream 4
我不知道那是什么意思。 (显然字幕有问题,但我从 iTunes 获得了视频。)
怎么了?
我能否简单地强制 avconv/ffmpeg 执行我要求的操作(即剥离音频流并按原样复制其余部分)?如果是,怎么做?
显然我在最终错误消息之前错过了控制台输出中的另一个 errors/warnings,就像@aergistal 建议的那样:
[mp4 @ 0x2645420] Codec for stream 0 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 1 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 2 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 3 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 4 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] track 2: could not find tag, codec not currently supported in container
对于 ffmpeg
,首先确保您有最新版本(尝试 git snapshot)。
您可以尝试使用 -copy_unknown
选项,但我认为这对这种情况没有帮助。
我的直觉是它不允许 mp4
中的某些编解码器。查看在最终错误消息之前的控制台输出中是否没有其他 errors/warnings,例如 codec not currently supported in container
.
如果是这种情况,请尝试将它们写入 mov
文件。
我有一个包含这些流的 mp4 文件(avconv -i file.mp4
或 ffmpeg -i file.mp4
):
Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, fltp, 384 kb/s
Stream #0.2(eng): Video: h264 (Main), yuv420p, 1280x568, 4027 kb/s, PAR 1:1 DAR 160:71, 23.98 fps, 2997 tbn, 50 tbc (default)
Stream #0.3(eng): Subtitle: c608 / 0x38303663, 0 kb/s
Stream #0.4(und): Subtitle: text / 0x74786574
Stream #0.5: Video: mjpeg, yuvj420p, 667x1000 [PAR 72:72 DAR 667:1000], 90k tbn
我正在尝试从文件中删除第一个音频流,如下所示:
avconv -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
# OR #
ffmpeg -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
问题是,我得到这个错误:
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
所以,我检查了 mp4 文件本身是否有问题:
avprobe file.mp4
# OR #
ffprobe file.mp4
输出显示:
Unsupported codec with id 0 for input stream 3
Unsupported codec with id 94213 for input stream 4
我不知道那是什么意思。 (显然字幕有问题,但我从 iTunes 获得了视频。)
怎么了?
我能否简单地强制 avconv/ffmpeg 执行我要求的操作(即剥离音频流并按原样复制其余部分)?如果是,怎么做?
显然我在最终错误消息之前错过了控制台输出中的另一个 errors/warnings,就像@aergistal 建议的那样:
[mp4 @ 0x2645420] Codec for stream 0 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 1 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 2 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 3 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 4 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] track 2: could not find tag, codec not currently supported in container
对于 ffmpeg
,首先确保您有最新版本(尝试 git snapshot)。
您可以尝试使用 -copy_unknown
选项,但我认为这对这种情况没有帮助。
我的直觉是它不允许 mp4
中的某些编解码器。查看在最终错误消息之前的控制台输出中是否没有其他 errors/warnings,例如 codec not currently supported in container
.
如果是这种情况,请尝试将它们写入 mov
文件。