audio - ffmpeg hangs when creating a video
2013-08
I am trying to insert an audio channel with a video:
first of all I extract the audio from the original video for processing:
ffmpeg -i lotr.mp4 lotr.wav
I then extract all frames for later processing too:
ffmpeg -i lotr.mp4 -f image2 %d.jpg
When done processing audio and video streams, I try to create the video
ffmpeg -f image2 -r 15 -i %d.jpg new.mp4
then merge with the audio:
ffmpeg -i new.mp4 -i lotr.wav -map 0:0 -map 1:0 new_w_audio.mp4
Result: CPU activity = 100%, the process hangs and never returns. PS: I even tried it without modifying the images or the audio (so just trying to unpack then repack the video) but still the same output
FFmpeg version SVN-r26400, Copyright (c) 2000-2011 the FFmpeg developers
built on Jan 18 2011 04:07:05 with gcc 4.4.2
configuration: --enable-gpl --enable-version3 --enable-libgsm --enable-libvorb
is --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg
--enable-libschroedinger --enable-libopencore_amrwb --enable-libopencore_amrnb
--enable-libvpx --disable-decoder=libvpx --arch=x86 --enable-runtime-cpudetect -
-enable-libxvid --enable-libx264 --enable-librtmp --extra-libs='-lrtmp -lpolarss
l -lws2_32 -lwinmm' --target-os=mingw32 --enable-avisynth --enable-w32threads --
cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'new.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:00:29.66, start: 0.000000, bitrate: 193 kb/s
Stream #0.0(und): Video: mpeg4, yuv420p, 200x134 [PAR 1:1 DAR 100:67], 192 k
b/s, 15 fps, 15 tbr, 15 tbn, 15 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
[wav @ 01fed010] max_analyze_duration reached
Input #1, wav, from 'lotr.wav':
Duration: 00:00:29.90, bitrate: 176 kb/s
Stream #1.0: Audio: pcm_s16le, 11025 Hz, 1 channels, s16, 176 kb/s
File 'new_w_audio.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 01b03820] w:200 h:134 pixfmt:yuv420p
Output #0, mp4, to 'new_w_audio.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Stream #0.0(und): Video: mpeg4, yuv420p, 200x134 [PAR 1:1 DAR 100:67], q=2-3
1, 200 kb/s, 15 tbn, 15 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1: Audio: aac, 11025 Hz, 1 channels, s16, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #1.0 -> #0.1
Press [q] to stop encoding
Could be several things. A hang in general with video editing happens a lot when dealing with uncompressed video codecs. Not sure if I read up there that original video is in yuv420p codec. It maybe gets hanged trying to handle a lot of memory or when compressing directly the images to mp4. One thing I can think of is converting first to avi, ie, outputting to an avi but forcing a lossless codec like camtasia / camstudio (I think ffmpeg supports it) , so it is not so "heavy", and then do a second operation to convert to mp4. Other matter is... -r15 ? You surely know better which fps is having the original video, but it uses to be 24fps or so, isn't it?
Also... You might force as well the output codec, not just the format. MP4 works pretty well with .h264 codec, which gives a lot of quality and incredible small size. If I remember well ffmpeg also supports it. (you might want to try this first of all...)
Edit: Remember -codecs gives you the list of codecs, in command line. You can of course, for example in Win console, ffmpeg -codecs > codecs.txt for easier reading, searching etc. Healthy to do also with -formats, etc.
Try updating to the latest version of ffmpeg.
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!