Как установить выходную частоту кадров "так же, как источник" в ffmpeg
ffmpeg -i input.3gp -someoptions output.flv
по умолчанию всегда будет использовать частоту кадров 30 для вывода независимо от частоты кадров исходного файла.
Я знаю, как установить заданную частоту кадров, например, "-r 15" для 15 кадров в секунду, но как мне установить частоту кадров на "такую же, как у источника"?
Вот вывод из 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%
3 ответа
Обычно частота кадров автоматически устанавливается на «такую же, как у источника». Пока вы не укажете никаких
Одним заметным исключением является случай, когда (1) ваш исходный формат использует переменную частоту кадров и (2) по умолчанию используется фиксированная частота кадров для выходного формата (например, это происходит с MP4). Чтобы получить в этом случае частоту кадров «такую же, как у источника» , вы делаете (согласно этому ответу ):
ffmpeg -i input.3gp -vsync vfr output.flv
Без этой опции будет использоваться частота кадров по умолчанию, равная частоте кадров контейнера исходного файла. Частота кадров контейнера — это максимальное значение, которое может иметь переменная частота кадров исходного файла. Чтобы компенсировать случаи, когда переменная частота кадров ниже,
Чтобы узнать, использует ли ваш исходный файл переменную частоту кадров, посмотрите вывод
Я считаю, что это стандартное поведение, чтобы сохранить частоту кадров ввода. Возможно, ffmpeg просто не может его обнаружить и придерживается значения по умолчанию. Посмотрите, можете ли вы обновить ffmpeg до более новой версии.
Много лет спустя, но я попал сюда через Google, так что я все равно отвечу. Вы положили -re
перед вводом, например ffmpeg -re -i input.3gp -someoptions output.flv
Из документов ffmpeg: https://www.ffmpeg.org/ffmpeg-all.html