流映射的数量必须与运行 ffmpeg 的输出流的数量相匹配

流映射的数量必须与运行 ffmpeg 的输出流的数量相匹配

尝试从 MKV 视频中剪切片段,但出现错误。

有什么原因呢?

V:\VIDEO>ffmpeg -ss 00:42:35 -t 00:43:05 -i smenia.mkv -map 0:0 -map 0:1 -vcodec copy -acodec copy clientalwaysright.mkv
FFmpeg version SVN-r21566-xuggle-3.4.843, Copyright (c) 2000-2010 Fabrice Bellard, et al.
  built on Jan 31 2010 09:45:05 with gcc 4.2.4 (TDM-1 for MinGW)
  configuration: --prefix=/usr/local --extra-version=xuggle-3.4.843 --extra-cflags=-I/c/hudson/slave/workspace/xuggle_xu
bel/WindowsXP_i386/build/native/i686-pc-mingw32/captive/usr/local/include --extra-ldflags=-L/c/hudson/slave/workspace/xu
JDK5/label/WindowsXP_i386/build/native/i686-pc-mingw32/captive/usr/local/lib --enable-shared --enable-gpl --enable-nonfr
libx264 --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libfaac --enable-libopencor
mrwb --extra-cflags=-mno-cygwin --extra-cflags=-fno-common --extra-ldflags=-mno-cygwin --extra-ldflags=--out-implib --en
ign-hack
  libavutil     50. 8. 0 / 50. 8. 0
  libavcodec    52.49. 0 / 52.49. 0
  libavformat   52.48. 0 / 52.48. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 9. 0 /  0. 9. 0
[matroska @ 0x1f17270]max_analyze_duration reached
[matroska @ 0x1f17270]Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 47.95 (66893/1395) -> 23.98 (24000/1001)
Input #0, matroska, from 'smenia.mkv':
  Duration: 01:52:36.41, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: h264, yuv420p, 1280x544, PAR 1:1 DAR 40:17, 24.39 fps, 23.98 tbr, 1k tbn, 47.95 tbc
    Stream #0.1(rus): Audio: aac, 48000 Hz, stereo, s16
    Metadata:
      description     : rus MVO
    Stream #0.2(rus): Audio: aac, 48000 Hz, stereo, s16
    Metadata:
      description     : rus OVO
    Stream #0.3(eng): Audio: aac, 48000 Hz, stereo, s16
    Stream #0.4(rus): Subtitle: 0x0000
    Stream #0.5(eng): Subtitle: 0x0000
File 'clientalwaysright.mkv' already exists. Overwrite ? [y/N] y
Number of stream maps must match number of output streams

答案1

下载最新版本的 FFmpeg。您使用的版本已有三年多了,我相当肯定它应该只适用于最新版本——从那时起,很多东西都发生了变化。

然后您可以简单地执行以下操作:

ffmpeg -ss 00:42:35 -i smenia.mkv -map 0 -c copy -t 00:43:05 clientalwaysright.mkv

-map 0指定告诉 FFmpeg 映射来自输入的所有流(包括字幕)就足够了。该-c copy选项将告诉它对视频、音频和字幕流进行比特流复制。不再需要copy为每个流明确指定编解码器。

如果您只想映射特定的音频和字幕通道(例如,第一个音频和第一个字幕流),那么这样做应该可以正常工作:

ffmpeg -ss 00:42:35 -i smenia.mkv -map 0:v -map 0:a:0 -map 0:s:0 -c copy -t 00:43:05 clientalwaysright.mkv

我把-t选项移到了输入之后,因为它不是输入选项,应该位于-i和输出文件名之间。如果你想要更准确的剪切,可以考虑移到-ss后面-i。请参阅文档了解更多信息。

相关内容