ffmpeg -i input.3gp -someoptions output.flv
默认情况下,无论源文件的帧速率是多少,总是使用 30 的帧速率进行输出。
我知道如何设置给定的帧速率,例如“-r 15”表示 15fps,但如何将帧速率设置为“与源相同”?
这是 ffmpeg 的输出:
$ ffmpeg -i video7741.3gp -ar 22050 video7741.flv
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:37:58 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video7741.3gp':
Metadata:
major_brand : 3gp5
minor_version : 768
compatible_brands: 3gp53gp43g2aisom
creation_time : 2011-07-13 19:45:38
Duration: 00:00:08.96, start: 0.000000, bitrate: 78 kb/s
Stream #0.0(eng): Video: h263, yuv420p, 128x96 [PAR 12:11 DAR 16:11], 64 kb/s, 7.46 fps, 29.97 tbr, 15750 tbn, 29.97 tbc
Metadata:
creation_time : 2011-07-13 19:45:38
Stream #0.1(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2011-07-13 19:45:38
File 'video7741.flv' already exists. Overwrite ? [y/N] y
[buffer @ 0x91db320] w:128 h:96 pixfmt:yuv420p
Incompatible sample format 'flt' for codec 'adpcm_swf', auto-selecting format 's16'
Output #0, flv, to 'video7741.flv':
Metadata:
major_brand : 3gp5
minor_version : 768
compatible_brands: 3gp53gp43g2aisom
creation_time : 2011-07-13 19:45:38
encoder : Lavf53.21.0
Stream #0.0(eng): Video: flv, yuv420p, 128x96 [PAR 12:11 DAR 16:11], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
Metadata:
creation_time : 2011-07-13 19:45:38
Stream #0.1(eng): Audio: adpcm_swf, 22050 Hz, 1 channels, s16, 88 kb/s
Metadata:
creation_time : 2011-07-13 19:45:38
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
Warning, using s16 intermediate sample format for resampling
Multiple frames in a packet from stream 1
frame= 66 fps= 0 q=5.0 Lsize= 194kB time=8.74 bitrate= 181.4kbits/s
video:92kB audio:97kB global headers:0kB muxing overhead 2.364636%
答案1
通常,ffmpeg
会自动将帧速率设置为“与源相同”。只要您不指定任何-r
选项,就会设置特定的固定帧速率。
一个值得注意的例外是 (1) 源格式使用可变帧速率,并且 (2)ffmpeg
输出格式默认为固定帧速率(例如 MP4)。要获得“与源相同”的帧速率,那在这种情况下,你会(根据这个答案):
ffmpeg -i input.3gp -vsync vfr output.flv
如果没有此选项,ffmpeg
将使用与源文件的容器帧速率相同的默认帧速率。容器帧速率是源文件的可变帧速率可能具有的最大值。为了补偿可变帧速率较低的情况,ffmpeg
然后在输出文件中复制一些输入帧。这会导致输出文件更大(在我进行的一次测试中为 7%)。
要知道你的源文件是否使用可变帧速率,请查看输出ffprobe [ ̲v̲i̲d̲e̲o̲f̲i̲l̲e̲ ]
:如果它同时包含fps
和tbr
值,那么它做使用可变帧率。即tbr
是容器帧率,fps
是平均帧率。
答案2
我相信这个是默认行为是保持输入的帧速率。也许 ffmpeg 根本无法检测到它,因此坚持使用默认值。看看您是否可以将 ffmpeg 升级到较新的版本。
答案3
-re
虽然迟了很多年,但我通过谷歌找到了这里,所以我还是会回答。例如,在输入之前输入ffmpeg -re -i input.3gp -someoptions output.flv
来自 ffmpeg 文档:https://www.ffmpeg.org/ffmpeg-all.html#toc-Advanced-options