3

我正在尝试使用 ffmpeg 剪切掉 avi 文件的一部分。我知道以前有人问过类似的问题,但是我浏览了很多其他帖子,但我看不出我哪里出错了。

我用来测试 7 秒视频的命令行参数是:

-ss 00:00:01 -t 00:00:01 -i "C:\recordings\2013-09-11\Camera 1\Camera 1_2013-09-11_22-23-43.avi" -vcodec 复制 -acodec 复制“我:\clip2.avi”

输出是:

ffmpeg 版本 N-56254-gb7bd688 版权所有 (c) 2000-2013 FFmpeg 开发人员于 2013 年 9 月 12 日 21:00:14 使用 gcc 4.7.3 (GCC) 配置构建:--enable-gpl --enable-version3 --disable -w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable -libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable- librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 43.100 / 52. 43.100 libavcodec 55. 31.101 / 55. 31.101 libavformat 55. 16.102 / 55. 16.102 libavdevice 55. 3.100 / 55. 3.100 libavfilter 3. 84.100 / 3. 84.100 libswscale 2. 5.100 / 2. 5.100 libswresample 0 . 17.103 / 0. 17.103 libpostproc 52. 3.100 / 52. 3.100

Guessed Channel Layout for  Input Stream #0.1 : mono

Input #0, avi, from 'C:\recordings\2013-09-11\Camera 1\Camera 1_2013-09-11_22-23-43.avi':
  Duration: 00:00:07.03, start: 0.000000, bitrate: 787 kb/s
    Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, 800x448, 30 fps, 30 tbr, 30 tbn, 30 tbc
    Stream #0:1: Audio: adpcm_ms ([2][0][0][0] / 0x0002), 44100 Hz, mono, s16, 176 kb/s
Output #0, avi, to 'I:\clip2.avi':
  Metadata:
    ISFT            : Lavf55.16.102
    Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, 800x448, q=2-31, 30 fps, 30 tbn, 30 tbc
    Stream #0:1: Audio: adpcm_ms ([2][0][0][0] / 0x0002), 44100 Hz, mono, 176 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=   88 fps=0.0 q=-1.0 Lsize=     226kB time=00:00:02.03 bitrate= 908.7kbits/s    

video:146kB audio:66kB subtitle:0 global headers:0kB muxing overhead 6.345259%

我最终得到一个 3 秒长的剪辑!!!??在输出中,我可以看到 -ss 标志被完全忽略。

谁能看到我哪里出错了?

谢谢

4

3 回答 3

0

-i 是持续时间。例如,如果你想要 5 秒的视频,应该写

-ss 00:00:01 -t 00:00:05 -i "C:\recordings\2013-09-11\Camera 1\Camera 1_2013-09-11_22-23-43.avi" -vcodec 复制 -acodec 复制“我:\clip2.avi”

-ss 是当你写 -ss 00:00:01 时的偏移量,当你写 -t 00:00:01 时会留下 6 秒的时间,这是用 1 秒而不是 3 秒制作视频。

于 2014-09-15T18:00:50.283 回答
0

这里的一些提示:https ://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg

请参阅“快速搜索”与“准确搜索”。为了准确寻找:

  • -ss 必须在-i之后

我怀疑您的输入帧超出了任何关键帧,因此“快速搜索”(-i 之前的-ss)失败。

通常也-t将许多帧作为其输入,我不确定它是否接受时间码。考虑使用-t 1替代或-to 00:00:02替代(注意:-to,而不是 -t)。 编辑: slhck 关于-tvs是正确的-vframes,请参阅评论。

于 2013-09-13T03:29:15.343 回答
0

只是不要使用编解码器复制命令。删除“-vcodec copy -acodec copy”并尝试您将获得准确的复制时间

于 2021-04-29T17:51:51.440 回答