使用 ffmpeg 剪切 mkv 视频

使用 ffmpeg 剪切 mkv 视频

我对 ffmpeg 完全迷茫了,我得到了一个时长为 4:33 的 mkv,我想从 4:20 开始剪掉结尾

我尝试了不同的方法:

1)完全不切割

~ > ffmpeg -t 00:04:20 -acodec copy -vcodec copy -i output3.mkv output3-cut.mkv
FFmpeg version SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --extra-version=4:0.5.9-0ubuntu0.10.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jun 12 2012 16:27:34, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 15.00 (15/1)
Input #0, matroska, from 'output3.mkv':
  Duration: 00:04:34.00, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: msmpeg4v2, yuv420p, 1808x944, PAR 1:1 DAR 113:59, 15 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 22050 Hz, mono, s16
File 'output3-cut.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'output3-cut.mkv':
    Stream #0.0: Video: msmpeg4v2, yuv420p, 1808x944 [PAR 1:1 DAR 113:59], q=2-31, 90k tbn, 1k tbc
    Stream #0.1: Audio: libmp3lame, 22050 Hz, mono, s16
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 4109 fps=3864 q=-1.0 Lsize=   36017kB time=272.48 bitrate=1082.8kbits/s    
video:33503kB audio:2344kB global headers:0kB muxing overhead 0.477241%

2) 如果我指定 4 分 15 秒 4 分 05 秒 4 分钟,则剪辑到 4 分 25 秒,4 分钟后的其他秒数相同,生成的文件大小相同。如果我指定 3 分 50 秒或 30 分钟,则无论秒数是多少,剪辑到 3 分 25 秒一些价值s

~ > ffmpeg -t 4m20s -acodec copy -vcodec copy -i output3.mkv oFFmpeg version SVN-r0.5.9-4:0.5.9-0ubuntu0.10.04.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --extra-version=4:0.5.9-0ubuntu0.10.04.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jun 12 2012 16:27:34, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 15.00 (15/1)
Input #0, matroska, from 'output3.mkv':
  Duration: 00:04:34.00, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: msmpeg4v2, yuv420p, 1808x944, PAR 1:1 DAR 113:59, 15 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 22050 Hz, mono, s16
File 'output3-cut.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'output3-cut.mkv':
    Stream #0.0: Video: msmpeg4v2, yuv420p, 1808x944 [PAR 1:1 DAR 113:59], q=2-31, 90k tbn, 1k tbc
    Stream #0.1: Audio: libmp3lame, 22050 Hz, mono, s16
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 4001 fps=3570 q=-1.0 Lsize=   35240kB time=266.71 bitrate=1082.4kbits/s    
video:32781kB audio:2292kB global headers:0kB muxing overhead 0.475784%
utput3-cut.mkv

3)经过长时间的辛勤工作,最终剪辑到 4:20,但文件却变得非常大,文件大小从 35Mb 变成了 113Mb!!!

ffmpeg -i output3.mkv -ss 00:00:00 -t 00:04:20 -sameq output3-cut.mkv

剪切 mkv 文件的正确方法是什么?

附言

我也尝试过 mencoder,但它损坏了音轨

答案1

从理论上来说这就足够了:

ffmpeg -i output3.mkv -t 00:04:20 -c:v copy -c:a copy output-cut.mkv

阅读如下:输入 MKV 视频,编码 4:20 分钟,复制音频和视频比特流并保存到输出文件。

如果遇到同步问题,请尝试重新编码音频和视频:

ffmpeg -i output3.mkv -t 00:04:20 -c:v libx264 -c:a libfaac output-cut.mkv

当然,您可以使用 指定视频质量-crf 23,使用 指定音频质量-b:a 192k,并改变这些参数。阅读我们的 FFmpeg 博客文章了解更多信息。


以下是您命令的错误之处:

  • 您使用的 FFmpeg 版本太旧了。请从源代码编译它或从主页下载预编译的二进制文件。这将降低遇到错误的可能性。

  • -acodec copy -vcodec copy不能来选项-i。任何在前面的内容都会-i告诉 FFmpeg 解码输入视频。没有“复制解码器”——这没有意义。选项的顺序在这里很重要。-c:a copy然后-c:v copy输入选项和输出之前。

  • -t 4m20s是错误的语法:持续时间可能是以秒为单位的数字,或者以 为单位hh:mm:ss[.xxx]

  • -t也不能先来-i

  • -ss 00:00:00无关紧要,它只会告诉 FFmpeg 从头开始​​,它总是这样做。

相关内容