ffmpeg -i input.3gp -someoptions output.flv
デフォルトでは、ソースファイルのフレームレートに関係なく、出力に常に30のフレームレートを使用します。
特定のフレームレートを設定する方法を知っています。 15fpsの場合は「-r15」ですが、フレームレートを「ソースと同じ」に設定するにはどうすればよいですか?
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%
私はそれを信じていますis入力のフレームレートを維持するためのデフォルトの動作。おそらくffmpegはそれを検出できず、デフォルト値に固執します。 ffmpegを新しいバージョンにアップグレードできるかどうかを確認してください。
何年も遅れましたが、グーグルでここに来たので、とにかく答えます。あなたが置く -re
入力の前、たとえばffmpeg -re -i input.3gp -someoptions output.flv
Ffmpegドキュメントから: https://www.ffmpeg.org/ffmpeg-all.html#toc-Advanced-options
通常、ffmpeg
はフレームレートを「ソースと同じ」に自動的に設定します。その動作を取得するために-r
オプションを指定しないでください。
注目すべき例外の1つは、(1)ソース形式が可変フレームレートを使用し、(2)ffmpeg
がデフォルトで出力形式の固定フレームレートに設定されている場合です(たとえば、MP4の場合)。その場合、「ソースと同じ」フレームレートを取得するには、次のようにします( この回答 による):
ffmpeg -i input.3gp -vsync vfr output.flv
このオプションがない場合、ffmpeg
はソースファイルのコンテナフレームレートと同じデフォルトのフレームレートを使用します。コンテナのフレームレートは、ソースファイルの可変フレームレートが持つ可能性のある最大値です。可変フレームレートが低い場合を補うために、ffmpeg
は出力ファイル内のいくつかの入力フレームを複製します。これにより、出力ファイルが大きくなります(私が行った1つのテストで7%)。
ソースファイルが可変フレームレートを使用しているかどうかを知るには、ffprobe input.ext
の出力を確認します。fps
とtbr
の両方の値が含まれている場合は、doesは可変フレームレートを使用します。つまり、tbr
はコンテナのフレームレートであり、fps
は平均フレームレートです。