Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
What causes Firefox to refuse playing one specific MP4 that plays well on other browsers, resolution being the only difference ?
3 décembre 2014, par FaroI'm a developer for a PHP powered website that allows the upload of videos which get converted to MP4 using ffmpeg. This setup worked pretty well so far, however today I came across a report of a user that couldn't play one of the files in Firefox.
I was unable to replicate the issue on my own machine at first, but using a fresh install of Windows 7 I actually got the same issue: The file will not play in Firefox, but works fine in Chrome. If called up directly, Firefox will say "Video can't be played because the file is corrupt". When downloaded, Windows will also not create a thumbnail of the video for the file and WMP will only play the audio part.
On my own machine the file works perfectly in WMP which made me wonder if it could be a codec issue (I do have the K-Lite Codec Pack installed), however I've compared the file to a working one and the only difference is the resolution, filesize and the format profile which is "High@L3.1" for a working file with a 720p resolution and "High@L4.0" for the non-working one (which is 1600x1200).
I then read through the Wikipedia article on H.264/MPEG-4 AVC and began to wonder if the level might be the issue, and the tool I used (XMedia Recode) actually did not allow me to set a height bigger than 1080 on Level 4, however when I set the level to 5 and encoded the file again, it still wouldn't play.
I did find a note on the MDN page of supported formats which reads:
Firefox/Firefox for Android/Firefox OS supports the format in some cases, but only when a third-party decoder is available, and the device hardware can handle the profile used to encode the MP4.
I'm assuming that is why the codec pack would allow Firefox to play even the 'broken' file on my machine, I still don't understand though why Firefox does play some files but not this one, especially when Chrome on the same machine plays all of them.
The line in PHP that starts the conversion is as follows:
exec("/usr/local/bin/ffmpeg '-i' '" . $file_in . "' '-qscale' '4' '-y' '-threads' '1' '-acodec' 'libvo_aacenc' '-vcodec' 'h264' '" . $file_out . "' 2>&1", $buffer, $success);
This should produce correct files, and this is indeed the first time a file has issues.
MediaInfo provides this data for the file stream:
Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : High@L4.0 Format settings, CABAC : Yes Format settings, ReFrames : 4 frames Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 12mn 26s Bit rate : 77.7 Kbps Width : 1 600 pixels Height : 1 200 pixels Display aspect ratio : 4:3 Frame rate mode : Constant Frame rate : 30.000 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.001 Stream size : 6.92 MiB (36%) Writing library : x264 core 142 r14 956c8d8 Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00 Language : English Audio ID : 2 Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : 40 Duration : 12mn 26s Duration_LastFrame : -10ms Bit rate mode : Constant Bit rate : 128 Kbps Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 44.1 KHz Compression mode : Lossy Stream size : 11.4 MiB (60%) Language : English
I've uploaded a zip with 3 versions of the file, the untouched one, the converted one with the same settings the website would use, and another converted one with level 5.
Maybe I'm missing something obvious, but I couldn't find anything wrong with it, what do I need to change in order to produce a file that will work natively in Firefox?
Also, this is my first question on SO, so if you see anything that I can improve, please let me know :-)
Edit: This is the output of calling ffmpeg (with the faststart option)
/usr/local/bin/ffmpeg '-i' '49cf594e91d0dac376aa0b2b96972ded.mp4' '-movflags' '+faststart' '-qscale' '4' '-y' '-threads' '1' '-acodec' 'libvo_aacenc' '-vcodec' 'h264' 'test.mp4' ffmpeg version 1.2.5- http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2014 the FFmpeg developers built on Jan 22 2014 20:28:02 with gcc 4.8 (Debian 4.8.2-14) configuration: --enable-gpl --enable-version3 --disable-shared --disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-libx264 --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --disable-ffserver libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '49cf594e91d0dac376aa0b2b96972ded.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf54.63.104 Duration: 00:12:26.37, start: 0.036281, bitrate: 214 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1600x1200 [SAR 1:1 DAR 4:3], 77 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc Metadata: handler_name : VideoHandler Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s Metadata: handler_name : SoundHandler Please use -q:a or -q:v, -qscale is ambiguous [libx264 @ 0x2802ac0] using SAR=1/1 [libx264 @ 0x2802ac0] using cpu capabilities: MMX2 SSE2Fast LZCNT [libx264 @ 0x2802ac0] profile High, level 4.0 [libx264 @ 0x2802ac0] 264 - core 142 r14 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf54.63.104 Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1600x1200 [SAR 1:1 DAR 4:3], q=-1--1, 15360 tbn, 30 tbc Metadata: handler_name : VideoHandler Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s Metadata: handler_name : SoundHandler Stream mapping: Stream #0:0 -> #0:0 (h264 -> libx264) Stream #0:1 -> #0:1 (aac -> libvo_aacenc) Press [q] to stop, [?] for help Starting second pass: moving header on top of the file30.77 bitrate= 202.5kbits/s dup=1 drop=0 frame=15331 fps= 13 q=29.0 Lsize= 13201kB time=00:08:31.03 bitrate= 211.6kbits/s dup=1 drop=0 video:4673kB audio:7986kB subtitle:0 global headers:0kB muxing overhead 4.286767% [libx264 @ 0x2802ac0] frame I:63 Avg QP:12.37 size: 39759 [libx264 @ 0x2802ac0] frame P:3905 Avg QP:20.36 size: 313 [libx264 @ 0x2802ac0] frame B:11363 Avg QP:33.67 size: 93 [libx264 @ 0x2802ac0] consecutive B-frames: 1.1% 0.1% 0.2% 98.6% [libx264 @ 0x2802ac0] mb I I16..4: 48.0% 41.5% 10.5% [libx264 @ 0x2802ac0] mb P I16..4: 0.1% 0.2% 0.0% P16..4: 0.5% 0.0% 0.0% 0.0% 0.0% skip:99.1% [libx264 @ 0x2802ac0] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.3% 0.0% 0.0% direct: 0.0% skip:99.7% L0:50.2% L1:48.9% BI: 0.8% [libx264 @ 0x2802ac0] 8x8 transform intra:42.4% inter:36.9% [libx264 @ 0x2802ac0] coded y,uvDC,uvAC intra: 6.9% 13.4% 9.4% inter: 0.0% 0.1% 0.0% [libx264 @ 0x2802ac0] i16 v,h,dc,p: 82% 17% 1% 0% [libx264 @ 0x2802ac0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 20% 49% 0% 0% 0% 0% 0% 0% [libx264 @ 0x2802ac0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 20% 18% 3% 4% 4% 4% 4% 3% [libx264 @ 0x2802ac0] i8c dc,h,v,p: 80% 12% 7% 1% [libx264 @ 0x2802ac0] Weighted P-Frames: Y:0.3% UV:0.3% [libx264 @ 0x2802ac0] ref P L0: 74.7% 3.8% 10.6% 10.9% 0.0% [libx264 @ 0x2802ac0] ref B L0: 70.3% 28.9% 0.8% [libx264 @ 0x2802ac0] ref B L1: 97.9% 2.1% [libx264 @ 0x2802ac0] kb/s:74.90
-
ffmpeg trying to hardcode subs using -c:s mov_text but fails
3 décembre 2014, par The All Powerfulplease bear with me; I'm still learning the intricacies of ffmpeg and have hit a problem with subtitles.
So, I am trying to change the container of a video from mkv to mp4, and simultaneously hardcode the subtitles onto the video so that my Playstation will accept them.
The mkv is structured as follows:
ffmpeg version git-2013-09-23-34b429d Copyright (c) 2000-2013 the FFmpeg developers built on Sep 23 2013 18:16:42 with gcc 4.7 (Ubuntu/Linaro 4.7.3-1ubuntu1) configuration: --prefix=/home/seb/ffmpeg_build --extra-cflags=-I/home/seb/ffmpeg_build/include --extra-ldflags=-L/home/seb/ffmpeg_build/lib --bindir=/home/seb/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab libavutil 52. 46.100 / 52. 46.100 libavcodec 55. 33.100 / 55. 33.100 libavformat 55. 18.102 / 55. 18.102 libavdevice 55. 3.100 / 55. 3.100 libavfilter 3. 87.100 / 3. 87.100 libswscale 2. 5.100 / 2. 5.100 libswresample 0. 17.103 / 0. 17.103 libpostproc 52. 3.100 / 52. 3.100 [matroska,webm @ 0xa52ce60] Could not find codec parameters for stream 2 (Subtitle: hdmv_pgs_subtitle): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options Input #0, matroska,webm, from 'entirely-innocent-video.mkv': Metadata: creation_time : 2014-11-15 09:27:00 Duration: 02:10:24.29, start: 0.000000, bitrate: 3838 kb/s <--BLAH BLAH BLAH CHAPTERS --> Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709), 1280x690 [SAR 1:1 DAR 128:69], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default) Metadata: BPS : 3196139 BPS-eng : 3196139 DURATION : 02:10:24.233000000 DURATION-eng : 02:10:24.233000000 NUMBER_OF_FRAMES: 187594 NUMBER_OF_FRAMES-eng: 187594 NUMBER_OF_BYTES : 3125917529 NUMBER_OF_BYTES-eng: 3125917529 _STATISTICS_WRITING_APP: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_APP-eng: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_DATE_UTC: 2014-11-15 09:27:00 _STATISTICS_WRITING_DATE_UTC-eng: 2014-11-15 09:27:00 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES Stream #0:1(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s (default) Metadata: BPS : 640000 BPS-eng : 640000 DURATION : 02:10:24.288000000 DURATION-eng : 02:10:24.288000000 NUMBER_OF_FRAMES: 244509 NUMBER_OF_FRAMES-eng: 244509 NUMBER_OF_BYTES : 625943040 NUMBER_OF_BYTES-eng: 625943040 _STATISTICS_WRITING_APP: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_APP-eng: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_DATE_UTC: 2014-11-15 09:27:00 _STATISTICS_WRITING_DATE_UTC-eng: 2014-11-15 09:27:00 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES Stream #0:2(eng): Subtitle: hdmv_pgs_subtitle (default) (forced) Metadata: BPS : 840 BPS-eng : 840 DURATION : 01:40:03.622000000 DURATION-eng : 01:40:03.622000000 NUMBER_OF_FRAMES: 252 NUMBER_OF_FRAMES-eng: 252 NUMBER_OF_BYTES : 630808 NUMBER_OF_BYTES-eng: 630808 _STATISTICS_WRITING_APP: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_APP-eng: mkvmerge v7.3.0 ('Nouages') 32bit built on Oct 22 2014 18:44:01 _STATISTICS_WRITING_DATE_UTC: 2014-11-15 09:27:00 _STATISTICS_WRITING_DATE_UTC-eng: 2014-11-15 09:27:00 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
I then use the following command:
ffmpeg -i entirely-innocent-video -c:v copy -c:a copy -c:s mov_text entirely-innocent-video.mp4
Which as far as I can see should re-code the video, leaving the audio and video untouched, but hardcode in the subtitles... But it doesn't... It fails with the following message:
Error while opening encoder for output stream #0:2 - maybe incorrect parameters such as bit_rate, rate, width or height
And I just can't work out why! I've tried all sorts of permutations on the -c:s mov_text command but just keep getting error messages!
At a guess I'd say it has something to do with this message:
[matroska,webm @ 0xa52ce60] Could not find codec parameters for stream 2 (Subtitle: hdmv_pgs_subtitle): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options
But I'm just not experienced enough with ffmpeg to know where to start doing anything about it...
Can any of you clever experienced people help me unravel what's going on? :)
Thanks!
Seb
-
combine image and audio ffmpeg xampp php
3 décembre 2014, par user3080392I have ffmpeg installed in my xampp. I'm trying combine one image file with one audio file to produce one video file using a php script. However, no file is produced. I've tried:
<?php $ffmpegcmd = "ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"; shell_exec($ffmpegcmd); ?>
and
<?php shell_exec("ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"); ?>
and
<?php shell_exec("C:\xampp\php\ext\ffmpeg -loop 1 -i C:\xampp\htdocs\testingffmpeg\dog.png -i C:\xampp\htdocs\testingffmpeg\dog.wav -c:v libx264 -tune stillimage \ -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest C:\xampp\htdocs\testingffmpeg\dog.mp4"); ?>
-
How to compare the difference between 2 videos color in ffmpeg ?
3 décembre 2014, par nico_labI have read How to compare/show the difference between 2 videos in ffmpeg? , but "blend=all_mode=difference" is green. How do I get more colorful diffrence using blend filter?
sample command is
ffplay -f lavfi "movie=left.mp4,split[a1][a2]; movie=right.mp4,split[b1][b2]; [a1][b1]blend=all_mode=difference[blend];[a2]pad=2*iw:2*ih[left];[left][b2]overlay=w[tmp];[tmp][blend]overlay=0:h"
using "hue=s=0", color is chenge monochrome.
ffplay -f lavfi "movie=left.mp4,split[a1][a2]; movie=right.mp4,split[b1][b2]; [a1][b1]blend=all_mode=difference,hue=s=0[blend];[a2]pad=2*iw:2*ih[left];[left][b2]overlay=w[tmp];[tmp][blend]overlay=0:h"
The goal is this video. if you have a niconico account. http://www.nicovideo.jp/watch/sm24864058
if you don't have a niconico account, embed page is http://www.nicozon.net/watch/sm24864058
-
Fastest way to encode a frame twice (duplicate, h264 format) using JavaCV ffmpeg ?
3 décembre 2014, par user1592546I want to join-encode several videos with different frame rates in the same output video with constant frame rate using FFmpegFrameRecorder, as fast as possible. I am thinking to duplicate frames in case I want to increase frame rate, and skip frames when I need to decrease frame rate. I am using JavaCV.
Is there any better way of duplicating frames except for calling record(image) twice? (the output is always h264 stored in mp4 file format) Something like a flag in h264 stream indicating that current frame is a duplicate of last one, or something else to skip the redundant encoding.