我在 Windows 上使用 ffmpeg 0.8(无法使用更高版本,因为我的服务提供商在服务器上只安装了这个版本,实际上甚至是 0.7.8)
尝试剪切媒体文件(10 秒长)
ffmpeg -ss 00:00:05.00 -i i.ogg o.ogg
结果文件实际上不是想要的,得到的输出:
ffmpeg version 0.8, Copyright (c) 2000-2011 the FFmpeg developers
built on Jun 23 2011 14:21:12 with gcc 4.5.3
configuration: --enable-gpl --enable-version3 --enable-memalign-hack --enable-
runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libo
pencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --
enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger
--enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enabl
e-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 51. 9. 1 / 51. 9. 1
libavcodec 53. 7. 0 / 53. 7. 0
libavformat 53. 4. 0 / 53. 4. 0
libavdevice 53. 1. 1 / 53. 1. 1
libavfilter 2. 23. 0 / 2. 23. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
i.ogg: could not seek to position 5.000
Input #0, ogg, from 'i.ogg':
Duration: 00:00:10.02, start: 0.000000, bitrate: 57 kb/s
Stream #0.0: Video: theora, yuv420p, 505x404 [PAR 1:1 DAR 5:4], 25 tbr, 25 t
bn, 25 tbc
Stream #0.1: Audio: vorbis, 44100 Hz, stereo, s16, 64 kb/s
Metadata:
ENCODER : Lavf53.4.0
File 'o.ogg' already exists. Overwrite ? [y/N] y
[buffer @ 0000000000329060] w:505 h:404 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_
param:
Output #0, ogg, to 'o.ogg':
Metadata:
encoder : Lavf53.4.0
Stream #0.0: Video: libtheora, yuv420p, 505x404 [PAR 1:1 DAR 5:4], q=2-31, 2
00 kb/s, 25 tbn, 25 tbc
Stream #0.1: Audio: flac, 44100 Hz, stereo, s16, 64 kb/s
Metadata:
ENCODER : Lavf53.4.0
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop, [?] for help
frame= 0 fps= 0 q=0.0 Lsize= 84kB time=00:00:00.00 bitrate= 0.0kbits/
s
video:0kB audio:80kB global headers:3kB muxing overhead 0.673916%
它与最新版本的 ffmpeg 配合良好。可能存在什么问题?
答案1
这看起来像是 ffmpeg 的一个错误或功能缺失。我会尝试通过以不同方式指定 -ss 选项来解决这个问题。最明显的做法是尝试使用“-ss 5”而不是 HH:MM:SS 语法。
从 0.11 版的手册页来看,这个功能也看起来很有希望。可能在旧版本中可用,也可能不可用。
-ss 位置(输入/输出)
当用作输入选项(在“-i”之前)时,在此输入文件中搜索位置。当用作输出选项(在输出文件名之前)时,解码但丢弃输入,直到时间戳到达位置。这较慢,但更准确。
位置可以以秒为单位,也可以采用“hh:mm:ss[.xxx]”格式。
假设您确实只想剪切,而不是重新编码,您还应该添加编解码器选项来复制(-acodec copy
,-vcodec copy
)。 -copyts
也很有用(复制时间戳)。 因此,尝试以下操作:
ffmpeg -i foo.ogg -acodec copy -vcodec copy -copyts -ss 5 foominus5.ogg