我真的很喜欢 50fps 的视频,但我无法让 ffmpeg 将其转换为 50fps。
720p 分辨率对我来说完全没问题,只是需要更多的 FPS。
50i 在合适的播放器上看起来更加流畅(例如 GOM Player 可以去隔行视频并以 50Hz 播放。与 25Hz 视频有很大区别)。...
我当前的命令行是:
ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi
以下是更多视频详情。源视频来自 Cannon HF10 AVCHD 摄像机。
ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi
ffmpeg version N-37541-g670229e Copyright (c) 2000-2012 the FFmpeg developers
built on Feb 3 2012 20:14:17 with gcc 4.6.2
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-ru
ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libope
ncore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --en
able-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwben
c --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-
libxvid --enable-zlib
libavutil 51. 37.100 / 51. 37.100
libavcodec 54. 0.102 / 54. 0.102
libavformat 54. 0.100 / 54. 0.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 61.100 / 2. 61.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 6.100 / 0. 6.100
libpostproc 52. 0.100 / 52. 0.100
[h264 @ 000000000033FA30] Increasing reorder buffer to 1
Input #0, mpegts, from '00010.MTS':
Duration: 00:03:13.92, start: 0.482156, bitrate: 16304 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1
080 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, s16,
256 kb/s
File 'output.avi' already exists. Overwrite ? [y/N] y
w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[yadif @ 0000000003CE95B0] mode:0 parity:-1 auto_enable:0
[scale @ 0000000003CE9550] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p
flags:0x4
Output #0, avi, to 'output.avi':
Metadata:
ISFT : Lavf54.0.100
Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720 [SAR 1:1 DA
R 16:9], q=2-31, 20000 kb/s, 50 tbn, 50 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16, 128 kb
/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mpeg4)
Stream #0:1 -> #0:1 (ac3 -> libmp3lame)
Press [q] to stop, [?] for help
frame= 15 fps= 0 q=2.0 size= 945kB time=00:00:00.62 bitrate=12481.3kbits/
frame= 32 fps= 32 q=2.0 size= 2132kB time=00:00:01.30 bitrate=13435.2kbits/
frame= 51 fps= 34 q=2.0 size= 3372kB time=00:00:02.06 bitrate=13409.2kbits/
frame= 70 fps= 35 q=2.0 size= 4641kB time=00:00:02.82 bitrate=13482.8kbits/
frame= 76 fps= 35 q=2.0 Lsize= 5047kB time=00:00:03.06 bitrate=13511.9kbits
答案1
“对于大多数实际情况来说,从隔行扫描内容中检索完整的逐行扫描视频是不可能的。”
此外,如果您可以上传一小段视频样本,这将对您的事业有极大的帮助。
答案2
就像隔行扫描逐行扫描内容将每帧分为 2 个场,从而使帧速率加倍一样,去隔行扫描的常用方法是将每 2 个场合并为 1 帧,这会将速率降低 2,从而将 50 降低为 25fps。当然,您可以将每个最终帧加倍,但这没有任何好处。
首先,我们可以知道不要使用 -deinterlace,而是使用 yadif(您已经这样做了):
- deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif.
你可能会发现yadif 部分FFMPEG 文档非常有趣:
Deinterlace the input video ("yadif" means "yet another deinterlacing filter").
It accepts the optional parameters: mode:parity:auto.
MODE specifies the interlacing mode to adopt, accepts one of the following values:
‘0’
output 1 frame for each frame
‘1’
output 1 frame for each field
‘2’
like 0 but skips spatial interlacing check
‘3’
like 1 but skips spatial interlacing check
Default value is 0.
PARITY default value is -1.
AUTO default value is 0.
请注意,默认模式为 0,它指示 FFMPEG 每 2 个场输出 1 帧,从而将 fps 减半。我认为你要找的是模式 1:每场一帧。我不太清楚如何使用这些可选参数,但也许像
-filter:v yadif 1:-1:0 -s "1280x720" -r 50
答案3
根据文档,该-r
选项设置输出文件每秒的帧数。例如,这将输出设置为每秒 50 帧:
ffmpeg -i input.avi -r 50 output.avi
答案4
该命令对我有用:
ffmpeg -i source_50i.MTS -aspect 1920:1080 -vf yadif=1,scale=1920:1080 -c:v libx264 -preset fast -profile:v high -crf 23 -ac 2 -strict experimental -c:a aac -b:a 96k -movflags +faststart -y result_50p.mp4
来源是索尼摄像机文件。