video - How to convert 1080@50i -> 720@50p using ffmpeg?
2013-08
I really like 50fps video, but I cannot make ffmpeg convert it to 50fps for me.
720p resolution is absolutely fine with me, just need more FPS.
50i just looks much smoother in proper players (for example GOM Player deinterlaces video and plays it at 50Hz. Very big difference to 25Hz video.)...
My current command line is:
ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi
Here are more video details. Source video is from Cannon HF10 AVCHD camcoder.
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
"For most practical cases it is not possible to retrieve a complete progressive video from interlaced content."
Also if you could upload a small sample of the video, it would help your cause tremedously.
Just like interlacing progressive content divides each frame into 2 fields, thus doubling the frame rate, the common method of deinterlacing is to combine each 2 fields into 1 frame, which reduces the rate by 2, thus taking 50 into 25fps. You can of course double each final frame, but that does not provide any benefit.
First, we can read not to use -deinterlace, and yadif instead (which you already do):
- deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif.
You'll probably find the the yadif section of the FFMPEG documentation pretty interesting:
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.
Notice how the default MODE is 0, which instructs FFMPEG to ouput 1 frame for each 2 fields, thus halving the fps. I think what you're looking for is MODE 1: one frame per field. I'm not too sure how to use these optional parameters but perhaps something like
-filter:v yadif 1:-1:0 -s "1280x720" -r 50
According to the documentation, the -r
option sets the output file frames per second. For example, this sets the output to 50 frames per second:
ffmpeg -i input.avi -r 50 output.avi
ffmpeg -i input.avi -deinterlace -filter:v yadif -s "1280x720" output.avi
I'm trying to convert a bunch of movies into h.264 mp4's using FFMPEG. These movies are sourced from various portable camcorders such as the Flip Mino HD and the Kodak ZI8. One issue I'm having with video from the ZI8 is it seems to be causing FFMPEG to segfault.
Here is my command:
ffmpeg -i 'XmasSailor720p60fps.MOV' -threads 2 -acodec libfaac -ab 96kb -vcodec libx264 -vpre hq -b 500kb -s 484x272 XmasSailor.mp4
Here is the output:
FFmpeg version SVN-r20668, Copyright (c) 2000-2009 Fabrice Bellard, et al.
built on Dec 2 2009 18:37:34 with gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
configuration: --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared
libavutil 50. 5. 1 / 50. 5. 1
libavcodec 52.42. 0 / 52.42. 0
libavformat 52.39. 2 / 52.39. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0. 7. 2 / 0. 7. 2
libpostproc 51. 2. 0 / 51. 2. 0
Seems stream 0 codec frame rate differs from container frame rate: 59.94 (60000/1001) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'XmasSailor720p60fps.MOV':
Duration: 00:00:05.37, start: 0.000000, bitrate: 12021 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 11994 kb/s, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 128 kb/s
Metadata
major_brand : qt
minor_version : 0
compatible_brands: qt
comment : KODAK Zi8 Pocket Video Camera
comment-eng : KODAK Zi8 Pocket Video Camera
[libx264 @ 0x99e1020]using SAR=1/1
[libx264 @ 0x99e1020]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
[libx264 @ 0x99e1020]profile High, level 2.1
Output #0, mp4, to 'XmasSailor.mp4':
Stream #0.0(eng): Video: libx264, yuv420p, 484x272 [PAR 1:1 DAR 121:68], q=10-51, 500 kb/s, 30k tbn, 29.97 tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 96 kb/s
Metadata
comment : Encoded with the Statusfirm Video Transcoder
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
[h264 @ 0x99de950]B picture before any references, skipping
[h264 @ 0x99de950]decode_slice_header error
[h264 @ 0x99de950]no frame!
Error while decoding stream #0.0
[h264 @ 0x99de950]B picture before any references, skipping
[h264 @ 0x99de950]decode_slice_header error
[h264 @ 0x99de950]no frame!
Error while decoding stream #0.0
frame= 20 fps= 0 q=13797729.0 size= 0kB time=0.66 bitrate= 0.6kbits/s
frame= 39 fps= 37 q=13797729.0 size= 0kB time=1.30 bitrate= 0.3kbits/s
frame= 48 fps= 30 q=33.0 size= 11kB time=0.10 bitrate= 903.0kbits/s
frame= 58 fps= 27 q=31.0 size= 22kB time=0.43 bitrate= 421.0kbits/s
frame= 67 fps= 25 q=29.0 size= 41kB time=0.73 bitrate= 462.6kbits/s
frame= 75 fps= 23 q=29.0 size= 59kB time=1.00 bitrate= 486.7kbits/s
frame= 83 fps= 22 q=29.0 size= 81kB time=1.27 bitrate= 521.9kbits/s
frame= 90 fps= 21 q=29.0 size= 97kB time=1.50 bitrate= 530.1kbits/s
frame= 98 fps= 20 q=29.0 size= 114kB time=1.77 bitrate= 526.9kbits/s
frame= 106 fps= 20 q=29.0 size= 134kB time=2.04 bitrate= 537.7kbits/s
frame= 114 fps= 19 q=29.0 size= 150kB time=2.30 bitrate= 533.7kbits/s
frame= 122 fps= 19 q=29.0 size= 172kB time=2.57 bitrate= 547.8kbits/s
frame= 130 fps= 19 q=29.0 size= 193kB time=2.84 bitrate= 557.5kbits/s
frame= 136 fps= 18 q=29.0 size= 211kB time=3.04 bitrate= 570.0kbits/s
frame= 144 fps= 18 q=29.0 size= 242kB time=3.30 bitrate= 599.5kbits/s
frame= 152 fps= 17 q=30.0 size= 261kB time=3.57 bitrate= 598.6kbits/s
frame= 157 fps= 15 q=-1.0 Lsize= 368kB time=5.21 bitrate= 579.3kbits/s
video:302kB audio:61kB global headers:0kB muxing overhead 1.416371%
[libx264 @ 0x99e1020]frame I:1 Avg QP:27.22 size: 8720
[libx264 @ 0x99e1020]frame P:48 Avg QP:25.15 size: 3759
[libx264 @ 0x99e1020]frame B:108 Avg QP:30.10 size: 1105
[libx264 @ 0x99e1020]consecutive B-frames: 0.6% 11.5% 28.8% 59.0%
[libx264 @ 0x99e1020]mb I I16..4: 28.5% 47.6% 23.9%
[libx264 @ 0x99e1020]mb P I16..4: 0.8% 1.3% 0.5% P16..4: 50.6% 17.7% 13.1% 0.0% 0.0% skip:15.9%
[libx264 @ 0x99e1020]mb B I16..4: 0.2% 0.3% 0.1% B16..8: 44.0% 1.2% 2.6% direct: 5.1% skip:46.5% L0:45.5% L1:51.0% BI: 3.5%
[libx264 @ 0x99e1020]final ratefactor: 23.51
[libx264 @ 0x99e1020]8x8 transform intra:49.9% inter:67.9%
[libx264 @ 0x99e1020]direct mvs spatial:98.1% temporal:1.9%
[libx264 @ 0x99e1020]coded y,uvDC,uvAC intra: 54.7% 76.1% 41.4% inter: 17.1% 24.4% 7.8%
[libx264 @ 0x99e1020]i16 v,h,dc,p: 18% 52% 5% 25%
[libx264 @ 0x99e1020]i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 22% 9% 7% 10% 10% 9% 8% 13%
[libx264 @ 0x99e1020]i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 18% 8% 8% 10% 13% 10% 9% 12%
[libx264 @ 0x99e1020]Weighted P-Frames: Y:10.4%
[libx264 @ 0x99e1020]ref P L0: 60.2% 15.3% 11.0% 7.6% 5.2% 0.7%
[libx264 @ 0x99e1020]ref B L0: 72.6% 15.6% 11.8%
[libx264 @ 0x99e1020]kb/s:471.17
Segmentation fault
I'm wondering if anyone else has ran into similar issues. I wasn't able to find anything helpful via Google.
Another question I have is if anyone knows of a company that offers paid support for FFMPEG.
Thank you for your time.
I just had a similar issue with libx264 encoding, and what I got from my examination of the matter were these points.
- Use gcc >= 4.2
- Make sure your ffmpeg is compiled against the same libx264 version
By your output it is obvious you have #1 down, so check #2 like so (paths may need to be modified)
ldd /usr/bin/ffmpeg | grep x264
and then...
cat /usr/include/x264.h | grep X264_BUILD
(Source)
For me, this checked out and I just had to not do 2-pass encoding. Try also not using the thread option, that will probably fix it. I had troubles on old Red Hat boxes, my Gentoo desktop had no trouble at all, I call that a win for from-source package managers!