Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

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 Faro

    I'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 Powerful

    please 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 user3080392

    I 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_lab

    I 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 user1592546

    I 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.