我正在尝试使用 Ubuntu 的 ffmpeg 将文件转换为 MKV,同时复制所有视频和字幕流,但将所有音频流转换为 AC3。
使用此命令:
ffmpeg -i input.mkv -map 0 -vcodec copy -scodec copy -acodec ac3 -ab 256k output.mkv
失败
Number of stream maps must match number of output streams
删除-map 0
可解决问题,但并非所有的字幕流都在输出文件中。
编辑
以下是完整的控制台输出:
user@laptop:~/$ ffmpeg -i input.mkv -map 0 -vcodec copy -scodec copy -acodec ac3 -ab 256k output.mkv
ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Jan 24 2013 14:49:20 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[matroska,webm @ 0xa0cb20] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'input.mkv':
Duration: 00:10:56.88, start: 0.000000, bitrate: 1536 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, PAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0.1(eng): Audio: dca (DTS), 48000 Hz, 5.1, s16, 1536 kb/s (default)
Stream #0.2(eng): Subtitle: pgssub (default)
Stream #0.3(fre): Subtitle: pgssub
Stream #0.4(spa): Subtitle: pgssub
Number of stream maps must match number of output streams
答案1
你看到的行为实际上没有任何意义,但考虑到你正在使用ffmpeg
来自 Libav 的损坏的“假”程序,并且不是真的,这可能是一个早已修复的错误。只需使用最新版本即可正常运行。
下载最近的静态构建来自 FFmpeg 主页或者自己编译。
您可以将命令缩短为:
ffmpeg -i in.mkv -c copy -c:a ac3 -map 0 out.mkv
FFmpeg 现在将自动复制所有流并将它们全部映射到输出,例如像这样:
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (aac -> ac3)
Stream #0:2 -> #0:2 (copy)
Stream #0:3 -> #0:3 (copy)
Stream #0:4 -> #0:4 (copy)