Newest 'ffmpeg' Questions - Stack Overflow

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

Les articles publiés sur le site

  • ffmpeg force format when I using tcp protocol as output

    22 janvier 2019, par Moein Mohammadian

    I want to cut a video and start a tcp server with ffmpeg and a tcp client reads the cut video's content but I have to force a format.

    ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -f mpeg2video tcp://127.0.0.1:8010?listen=1
    

    If I don't specify a format I get an error

    Unable to find a suitable output format for 'tcp://127.0.0.1:8010?listen=1'
    

    but if I save cut video to a file I don't have to enter a format

    ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 output.mp4
    

    The problem is when I specify a format it takes more time to create cut video. Is there any way I don't specify format when I create a tcp server.

    Basically I want to cut a video and send the cut video over tcp/ip as fast as I could.

  • muxing overhead when convert .wav to .ogg using ffmpeg

    22 janvier 2019, par TwenteMaster

    I want to convert .wav file to .ogg file using ffmpeg, the command line order as follow:

    ffmpeg.exe -acodec pcm_s16le -i audio.wav -acodec libvorbis audio.ogg
    

    then it tells muxing overhead and the duration of the output .ogg is not right as well output infomation

    Is anyone know the reason, thanks!

    you can download the audio file that I used from here: audio.wav

  • Trying to change extension of filename on an ffmpeg script

    22 janvier 2019, par prat67

    (first time posting a question here)

    So I'm looking to write a ffmmpeg script to automate encoding my files to VP9. The problem I'm having is when I try to strip the extension and add a new one.

    For example Demo.mp4

    Should change to Demo.webm

    I'm running this on a Ubuntu-16.04 (Server Non-GI Version) I've tried a few different ways to accomplish this (using google and other posts on StackOverflow) but I can't seem to make it work

    This is the error I keep getting..

    line 31: Demo.mp4+.vp9: syntax error: invalid arithmetic operator (error token is ".mp4+.vp9")

    I've also commented (in the code below) where the syntax error is pointing to..

    #!/bin/bash
    
    # Welcome Message
    
    clear
    printf "====================================\n"
    printf "FFMPEG Encoder\n"
    printf "(Using HDR-4k Profile)\n"
    printf "====================================\n\n"
    printf " Loading Files in Current Directory...\n\n"
    sleep 3s
    
    
    # Variables
    
    i=1
    ext=".webm"
    vadd=4000000
    vsub=2000000
    
    
    # Iterate through files in current directory
    
    for j in *.{mp4,mkv};
    do
    echo "$i.$j"
    file[i]=$j
    i=$(( i + 1 ))
    done
    
    
    # Select File & Bitrate
    
    printf "Enter file number\n"
    read fselect
    printf "${file[$fselect]}: Selected for encoding\n\n"
    
    printf "Enter Average Bitrate (Eg: 8000000)\n\n"
    read bselect
    
    
    # ***THIS IS WHERE THE PROBLEM IS***
    # Prepare output file, strip trailing extension (eg .mkv) and add .webm
    
    ftemp1="${file[$fselect]}"
    ftemp2="${ftemp1::-4}"
    fout="$(($ftemp2+$ext))"
    printf "Output file will be: $fout"
    printf "Preparing to encode..."
    sleep 5s
    
    
    # Encode with User-Defined Parameters
    
    ffmpeg -y -report -i ${file[$fselect]} -b:v $bselect -speed 4 -pass 1 \
      -pix_fmt yuv420p10le \
      -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
      -maxrate "$(($bselect+$vadd))" -minrate "$(($bselect-$vsub))" \
      -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
    ffmpeg -y -report -i ${file[$fselect]} -b:v $bselect -pass 2 \
      -pix_fmt yuv420p10le \
      -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
      -maxrate "$(($bselect+$vadd))" -minrate "$(($bselect-$vsub))" \
      -profile:v 2 -vcodec libvpx-vp9 \
    $fout
    

    I'm certain there is a much cleaner way to do this - but I'm not expecting help with that :P

    My suspicion is that I'm trying to add two different types of variables? But I thought I defined them as strings..I could be wrong

    Please Help... lol

  • FFMPEG intermittent failures reading live RTMP stream

    22 janvier 2019, par stevendesu

    The Command

    I'm attempting to read a live RTMP stream and save the result to a file with the following command:

    ffmpeg -re -rtmp_live live -y -i "rtmp:////" -c copy -f flv /tmp/dump.flv
    

    I run this command then after 10-15 seconds I kill the process and check /tmp/dump.flv. I'm trying to do this for stream diagnostic purposes (determine the encoding, bitrate, resolution, pixel format, and key frame interval of the live stream)

    This command works about 25-50% of the time. When it works FFMPEG takes about 5 seconds to connect to the stream, then it begins dumping data to disk. After I kill the process, I can find a couple of megabytes of video data in /tmp/dump.flv which can be probed using ffprobe.

    When the command fails, it goes into one of two failure states:

    Failure State 1

    stderr is flooded with a series of messages about "missing picture in access unit with size X", and the output file /tmp/dump.flv is created but contains 0 bytes

    ffmpeg version 3.4.4-1~16.04.york0 Copyright (c) 2000-2018 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
      configuration: --prefix=/usr --extra-version='1~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
      libavutil      55. 78.100 / 55. 78.100
      libavcodec     57.107.100 / 57.107.100
      libavformat    57. 83.100 / 57. 83.100
      libavdevice    57. 10.100 / 57. 10.100
      libavfilter     6.107.100 /  6.107.100
      libavresample   3.  7.  0 /  3.  7.  0
      libswscale      4.  8.100 /  4.  8.100
      libswresample   2.  9.100 /  2.  9.100
      libpostproc    54.  7.100 / 54.  7.100
    [NULL @ 0x55b72d568920] pps_id 381 out of range
    [AVBSFContext @ 0x55b72d5692c0] Invalid NAL unit 0, skipping.
        Last message repeated 1 times
    [h264 @ 0x55b72d568920] Invalid NAL unit 0, skipping.
        Last message repeated 1 times
    [h264 @ 0x55b72d568920] no frame!
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2200
    [AVBSFContext @ 0x55b72d5692c0] Invalid NAL unit 0, skipping.
        Last message repeated 2 times
    [h264 @ 0x55b72d568920] Invalid NAL unit 0, skipping.
        Last message repeated 2 times
    [h264 @ 0x55b72d568920] no frame!
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3171
    [AVBSFContext @ 0x55b72d5692c0] Invalid NAL unit 0, skipping.
    [h264 @ 0x55b72d568920] Invalid NAL unit 0, skipping.
    [h264 @ 0x55b72d568920] no frame!
    [NULL @ 0x55b72d568920] missing picture in access unit with size 80572
    [h264 @ 0x55b72d568920] missing picture in access unit with size 1560
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2608
    [h264 @ 0x55b72d568920] non-existing PPS 0 referenced
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2734
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2885
    [h264 @ 0x55b72d568920] missing picture in access unit with size 77739
    [h264 @ 0x55b72d568920] non-existing PPS 254 referenced
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3360
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2804
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3051
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3067
    [h264 @ 0x55b72d568920] missing picture in access unit with size 77693
    [h264 @ 0x55b72d568920] non-existing PPS 0 referenced
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2421
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2779
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2442
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2678
    [h264 @ 0x55b72d568920] missing picture in access unit with size 76877
    [h264 @ 0x55b72d568920] sps_id 15 out of range
    [h264 @ 0x55b72d568920] missing picture in access unit with size 1342
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2412
    [h264 @ 0x55b72d568920] missing picture in access unit with size 2238
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3550
    [h264 @ 0x55b72d568920] missing picture in access unit with size 3075
    ...
    (after hitting Ctrl+C:)
    Input #0, flv, from 'rtmp:////':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.83.100
      Duration: 00:00:00.00, start: 5285.919000, bitrate: N/A
        Stream #0:0: Video: h264 (Constrained Baseline), yuv420p, 1920x1080, 2543 kb/s, 24 fps, 24 tbr, 1k tbn, 48 tbc
    Output #0, flv, to '/tmp/dump.flv':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.83.100
        Stream #0:0: Video: h264 (Constrained Baseline) ([7][0][0][0] / 0x0007), yuv420p, 1920x1080, q=2-31, 2543 kb/s, 24 fps, 24 tbr, 1k tbn, 1k tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=-1.0 Lsize=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
    video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    Exiting normally, received signal 2.
    

    Failure State 2

    The message "No start code is found." is displayed and FFMPEG immediately terminates after less than a half-second. When this happens the file /tmp/dump.flv is not created.

    ffmpeg version 3.4.4-1~16.04.york0 Copyright (c) 2000-2018 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
      configuration: --prefix=/usr --extra-version='1~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
      libavutil      55. 78.100 / 55. 78.100
      libavcodec     57.107.100 / 57.107.100
      libavformat    57. 83.100 / 57. 83.100
      libavdevice    57. 10.100 / 57. 10.100
      libavfilter     6.107.100 /  6.107.100
      libavresample   3.  7.  0 /  3.  7.  0
      libswscale      4.  8.100 /  4.  8.100
      libswresample   2.  9.100 /  2.  9.100
      libpostproc    54.  7.100 / 54.  7.100
    [NULL @ 0x56274b0be920] missing picture in access unit with size 3710
    [AVBSFContext @ 0x56274b0bf2c0] No start code is found.
    rtmp:////: could not find codec parameters
    Input #0, flv, from 'rtmp:////':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.83.100
      Duration: 00:00:00.00, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: h264, none, 2543 kb/s, 24 fps, 1k tbn
    Output #0, flv, to '/tmp/dump.flv':
    Output file #0 does not contain any stream
    

    What I've tried

    • Adding or removing -re to try and limit the input frame rate to the source frame rate
    • Adding or removing -rtmp_live live
    • Adding or removing -timeout 5 (or any other timeout value)
    • Using RTMP URL parameters (e.g. -i "rtmp://// live=1 timeout=5")

    Does anyone know why this command's success is so intermittent or how I can get more consistent results?

    Alternate Acceptable Solution

    The only reason I'm using ffmpeg to dump the stream to a temporary file at all is because I plan to perform multiple tests on the file (at least two at the moment -- one to get the encoding, and another to get the key frame interval). By downloading the stream I reduce bandwidth usage and reduce runtime. However it's perfectly acceptable to forego ffmpeg and just use ffprobe directly on the RTMP URL if this would help.

    Note that I did try this and I get the same two failure states with ffprobe

  • Add current localtime timestamp to ffmpeg video screen capture [duplicate]

    22 janvier 2019, par Mikael Ellingsen

    This question already has an answer here:

    These are the command line paramters I use at the moment:

    ffmpeg.exe -f gdigrab -framerate 8 -offset_x %X% -offset_y %Y% -video_size %Width%x%Height% -i desktop -f segment -segment_time 30 -segment_wrap 3 -reset_timestamps 1 "Profile\#\Video capture\Screen %A_Index%%PrimaryMonitor% `%03d".mp4
    

    Is it possible to add current local computer time overlay on the video?