尝试从 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
。请参阅文档了解更多信息。