tanersener / flutter-ffmpeg

FFmpeg plugin for Flutter. Not maintained anymore. Superseded by FFmpegKit.
GNU Lesser General Public License v3.0
644 stars 132 forks source link

is there any way to use h264 encoder #126

Closed rocklee0098 closed 4 years ago

rocklee0098 commented 4 years ago

Description is there any way to use h264 encoder ?

Expected behavior I just want to get the video encoded by h264, so that it can be played by android build-in player

Current behavior

    String out = outPath;
    var command =
        '-i $video1 -i $video2 -y -filter_complex vstack  $out';

    await executeFFmpeg(command);

    return out;
  }

above is my code, I just want to mix 2 videos recorded by my cellphone, after the 'mixVideo1' function executed, I can get the output video. the output video can be played well on my pc or some 3rd party players like Kodi, but it can not be played by the build-in player in Gallery,

I have checked the format of the video using ffprobe, it's "MPEG-4 part 2". I also have googled the problem, it said I should get the video encoded with h264, so I tried to specify the encoder in the command like below

var command = '-i $video1 -i $video2 -y -filter_complex vstack -c:v libx264 $out';

it returned the error 'E/mobile-ffmpeg(18031): Unknown encoder 'libx264''

I also tried the command on my pc, it worked well, the video format is 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10,'

so what command can I use to get the video with the h264 format that I really need?

thanks

Logs

Info of the video generated by ffmpeg on pc:

ffprobe -v quiet -show_format -show_streams -print_format json ./mixedout.mp4
{
    "streams": [
        {
            "index": 0,
            "codec_name": "h264",
            "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
            "profile": "High",
            "codec_type": "video",
            "codec_time_base": "1/60",
            "codec_tag_string": "avc1",
            "codec_tag": "0x31637661",
            "width": 1920,
            "height": 2160,
            "coded_width": 1920,
            "coded_height": 2160,
            "has_b_frames": 2,
            "sample_aspect_ratio": "1:1",
            "display_aspect_ratio": "8:9",
            "pix_fmt": "yuvj420p",
            "level": 50,
            "color_range": "pc",
            "chroma_location": "left",
            "refs": 1,
            "is_avc": "true",
            "nal_length_size": "4",
            "r_frame_rate": "30/1",
            "avg_frame_rate": "30/1",
            "time_base": "1/15360",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 272384,
            "duration": "17.733333",
            "bit_rate": "9758492",
            "bits_per_raw_sample": "8",
            "nb_frames": "532",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "VideoHandler"
            }
        },
        {
            "index": 1,
            "codec_name": "aac",
            "codec_long_name": "AAC (Advanced Audio Coding)",
            "profile": "LC",
            "codec_type": "audio",
            "codec_time_base": "1/48000",
            "codec_tag_string": "mp4a",
            "codec_tag": "0x6134706d",
            "sample_fmt": "fltp",
            "sample_rate": "48000",
            "channels": 2,
            "channel_layout": "stereo",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/48000",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 807936,
            "duration": "16.832000",
            "bit_rate": "130796",
            "max_bit_rate": "130796",
            "nb_frames": "790",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "SoundHandler"
            }
        }
    ],
    "format": {
        "filename": "./mixedout.mp4",
        "nb_streams": 2,
        "nb_programs": 0,
        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
        "format_long_name": "QuickTime / MOV",
        "start_time": "0.000000",
        "duration": "17.734000",
        "size": "21927215",
        "bit_rate": "9891604",
        "probe_score": 100,
        "tags": {
            "major_brand": "isom",
            "minor_version": "512",
            "compatible_brands": "isomiso2avc1mp41",
            "encoder": "Lavf58.29.100",
            "location-eng": "+14.5786+121.0603/",
            "location": "+14.5786+121.0603/"
        }
    }
}

Info of the video generated by flutter-ffmpeg

ffprobe -v quiet -show_format -show_streams -print_format json ./android/out.mp4
{
    "streams": [
        {
            "index": 0,
            "codec_name": "mpeg4",
            "codec_long_name": "MPEG-4 part 2",
            "profile": "Simple Profile",
            "codec_type": "video",
            "codec_time_base": "1/30",
            "codec_tag_string": "mp4v",
            "codec_tag": "0x7634706d",
            "width": 1920,
            "height": 2160,
            "coded_width": 1920,
            "coded_height": 2160,
            "has_b_frames": 0,
            "sample_aspect_ratio": "1:1",
            "display_aspect_ratio": "8:9",
            "pix_fmt": "yuv420p",
            "level": 1,
            "chroma_location": "left",
            "refs": 1,
            "quarter_sample": "false",
            "divx_packed": "false",
            "r_frame_rate": "30/1",
            "avg_frame_rate": "30/1",
            "time_base": "1/15360",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 272384,
            "duration": "17.733333",
            "bit_rate": "3612464",
            "max_bit_rate": "3612464",
            "nb_frames": "532",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "VideoHandler"
            }
        },
        {
            "index": 1,
            "codec_name": "aac",
            "codec_long_name": "AAC (Advanced Audio Coding)",
            "profile": "LC",
            "codec_type": "audio",
            "codec_time_base": "1/48000",
            "codec_tag_string": "mp4a",
            "codec_tag": "0x6134706d",
            "sample_fmt": "fltp",
            "sample_rate": "48000",
            "channels": 2,
            "channel_layout": "stereo",
            "bits_per_sample": 0,
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/48000",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 807936,
            "duration": "16.832000",
            "bit_rate": "130828",
##
            "max_bit_rate": "130828",
            "nb_frames": "790",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "und",
                "handler_name": "SoundHandler"
            }
        }
    ],
    "format": {
        "filename": "./android/out.mp4",
        "nb_streams": 2,
        "nb_programs": 0,
        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
        "format_long_name": "QuickTime / MOV",
        "start_time": "0.000000",
        "duration": "17.734000",
        "size": "8299515",
        "bit_rate": "3744001",
        "probe_score": 100,
        "tags": {
            "major_brand": "isom",
            "minor_version": "512",
            "compatible_brands": "isomiso2mp41",
            "encoder": "Lavf58.35.101",
            "location-eng": "+14.5786+121.0603/",
            "location": "+14.5786+121.0603/"
        }
    }
}

Environment ➜ mixer git:(master) ✗ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel master, v1.18.0-6.0.pre.4, on Mac OS X 10.15.4 19E266, locale en-US) [!] Android toolchain - develop for Android devices (Android SDK version 29.0.3) ✗ Android license status unknown. Try re-installing or updating your Android SDK Manager. See https://developer.android.com/studio/#downloads or visit visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions. [✓] Xcode - develop for iOS and macOS (Xcode 11.4) [✓] Chrome - develop for the web [!] Android Studio (version 3.6) ✗ Flutter plugin not installed; this adds Flutter specific functionality. ✗ Dart plugin not installed; this adds Dart specific functionality. [✓] VS Code (version 1.44.1) [✓] Connected device (3 available)

! Doctor found issues in 2 categories.

rocklee0098 commented 4 years ago

BTW:

I also checked 'ffmpeg -formats' in flutter-ffmpeg, indeed there is 'h264' in the format list

the log is like below

I/mobile-ffmpeg(32325):   built with Android (5220042 based on r346389c) clang version 8.0.7 (https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf643d27dbca1bb228957008617) (https://android.googlesource.com/toolchain/llvm 3c393fe7a7e13b0fba4ac75a01aa683d7a5b11cd) (based on LLVM 8.0.7svn)
I/mobile-ffmpeg(32325):   configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android24-clang --cxx=aarch64-linux-android24-clang++ --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --disable-v4l2-m2m --disable-outdev=v4l2 --disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disa
I/mobile-ffmpeg(32325):   libavutil      56. 38.100 / 56. 38.100
I/mobile-ffmpeg(32325):   libavcodec     58. 65.102 / 58. 65.102
I/mobile-ffmpeg(32325):   libavformat    58. 35.101 / 58. 35.101
I/mobile-ffmpeg(32325):   libavdevice    58.  9.103 / 58.  9.103
I/mobile-ffmpeg(32325):   libavfilter     7. 70.101 /  7. 70.101
I/mobile-ffmpeg(32325):   libswscale      5.  6.100 /  5.  6.100
I/mobile-ffmpeg(32325):   libswresample   3.  6.100 /  3.  6.100
V/mobile-ffmpeg(32325): File formats:
V/mobile-ffmpeg(32325):  D. = Demuxing supported
V/mobile-ffmpeg(32325):  .E = Muxing supported
V/mobile-ffmpeg(32325):  --
V/mobile-ffmpeg(32325):  D  3dostr           
V/mobile-ffmpeg(32325):   E 3g2              
V/mobile-ffmpeg(32325):   E 3gp              
V/mobile-ffmpeg(32325):  D  4xm              
V/mobile-ffmpeg(32325):   E a64              
V/mobile-ffmpeg(32325):  D  aa               
V/mobile-ffmpeg(32325):  D  aac              
V/mobile-ffmpeg(32325):  DE ac3              
V/mobile-ffmpeg(32325):  D  acm              
V/mobile-ffmpeg(32325):  D  act             ACT Voice file format
V/mobile-ffmpeg(32325):  D  adf              
V/mobile-ffmpeg(32325):  D  adp              
V/mobile-ffmpeg(32325):  D  ads              
V/mobile-ffmpeg(32325):   E adts             
V/mobile-ffmpeg(32325):  DE adx              
V/mobile-ffmpeg(32325):  D  aea              
V/mobile-ffmpeg(32325):  D  afc              
V/mobile-ffmpeg(32325):  DE aiff             
V/mobile-ffmpeg(32325):  D  aix              
V/mobile-ffmpeg(32325):  DE alaw             
V/mobile-ffmpeg(32325):  D  alias_pix        
V/mobile-ffmpeg(32325):  DE amr              
V/mobile-ffmpeg(32325):  D  amrnb            
V/mobile-ffmpeg(32325):  D  amrwb            
V/mobile-ffmpeg(32325):  D  android_camera   
V/mobile-ffmpeg(32325):  D  anm              
V/mobile-ffmpeg(32325):  D  apc              
V/mobile-ffmpeg(32325):  D  ape              
V/mobile-ffmpeg(32325):  DE apng             
V/mobile-ffmpeg(32325):  DE aptx             
V/mobile-ffmpeg(32325):  DE aptx_hd          
V/mobile-ffmpeg(32325):  D  aqtitle          
V/mobile-ffmpeg(32325):  DE asf              
V/mobile-ffmpeg(32325):  D  asf_o            
V/mobile-ffmpeg(32325):   E asf_stream       
V/mobile-ffmpeg(32325):  DE ass              
V/mobile-ffmpeg(32325):  DE ast              
V/mobile-ffmpeg(32325):  DE au               
V/mobile-ffmpeg(32325):  D  av1              
V/mobile-ffmpeg(32325):  DE avi              
V/mobile-ffmpeg(32325):   E avm2             
V/mobile-ffmpeg(32325):  D  avr              
V/mobile-ffmpeg(32325):  D  avs              
V/mobile-ffmpeg(32325):  DE avs2             
V/mobile-ffmpeg(32325):  D  bethsoftvid      
V/mobile-ffmpeg(32325):  D  bfi              
V/mobile-ffmpeg(32325):  D  bfstm            
V/mobile-ffmpeg(32325):  D  bin              
V/mobile-ffmpeg(32325):  D  bink             
V/mobile-ffmpeg(32325):  DE bit              
V/mobile-ffmpeg(32325):  D  bmp_pipe         
V/mobile-ffmpeg(32325):  D  bmv              
V/mobile-ffmpeg(32325):  D  boa              
V/mobile-ffmpeg(32325):  D  brender_pix      
V/mobile-ffmpeg(32325):  D  brstm            
V/mobile-ffmpeg(32325):  D  c93              
V/mobile-ffmpeg(32325):  DE caf              
V/mobile-ffmpeg(32325):  DE cavsvideo        
V/mobile-ffmpeg(32325):  D  cdg              
V/mobile-ffmpeg(32325):  D  cdxl             
V/mobile-ffmpeg(32325):  D  cine             
V/mobile-ffmpeg(32325):  DE codec2           
V/mobile-ffmpeg(32325):  DE codec2raw        
V/mobile-ffmpeg(32325):  D  concat           
V/mobile-ffmpeg(32325):   E crc              
V/mobile-ffmpeg(32325):  DE dash             
V/mobile-ffmpeg(32325):  DE data             
V/mobile-ffmpeg(32325):  DE daud             
V/mobile-ffmpeg(32325):  D  dcstr            
V/mobile-ffmpeg(32325):  D  dds_pipe         
V/mobile-ffmpeg(32325):  D  dfa              
V/mobile-ffmpeg(32325):  D  dhav             
V/mobile-ffmpeg(32325):  DE dirac            
V/mobile-ffmpeg(32325):  DE dnxhd            
V/mobile-ffmpeg(32325):  D  dpx_pipe         
V/mobile-ffmpeg(32325):  D  dsf              
V/mobile-ffmpeg(32325):  D  dsicin           
V/mobile-ffmpeg(32325):  D  dss              
V/mobile-ffmpeg(32325):  DE dts              
V/mobile-ffmpeg(32325):  D  dtshd            
V/mobile-ffmpeg(32325):  DE dv               
V/mobile-ffmpeg(32325):  D  dvbsub           
V/mobile-ffmpeg(32325):  D  dvbtxt           
V/mobile-ffmpeg(32325):   E dvd              
V/mobile-ffmpeg(32325):  D  dxa              
V/mobile-ffmpeg(32325):  D  ea               
V/mobile-ffmpeg(32325):  D  ea_cdata         
V/mobile-ffmpeg(32325):  DE eac3             
V/mobile-ffmpeg(32325):  D  epaf             
V/mobile-ffmpeg(32325):  D  exr_pipe         
V/mobile-ffmpeg(32325):  DE f32be            
V/mobile-ffmpeg(32325):  DE f32le            
V/mobile-ffmpeg(32325):   E f4v              
V/mobile-ffmpeg(32325):  DE f64be            
V/mobile-ffmpeg(32325):  DE f64le            
V/mobile-ffmpeg(32325):  DE ffmetadata       
V/mobile-ffmpeg(32325):   E fifo             
V/mobile-ffmpeg(32325):   E fifo_test        
V/mobile-ffmpeg(32325):  DE film_cpk         
V/mobile-ffmpeg(32325):  DE filmstrip        
V/mobile-ffmpeg(32325):  DE fits             
V/mobile-ffmpeg(32325):  DE flac             
V/mobile-ffmpeg(32325):  D  flic             
V/mobile-ffmpeg(32325):  DE flv              
V/mobile-ffmpeg(32325):   E framecrc         
V/mobile-ffmpeg(32325):   E framehash        
V/mobile-ffmpeg(32325):   E framemd5         
V/mobile-ffmpeg(32325):  D  frm              
V/mobile-ffmpeg(32325):  D  fsb              
V/mobile-ffmpeg(32325):  DE g722             
V/mobile-ffmpeg(32325):  DE g723_1           
V/mobile-ffmpeg(32325):  DE g726             
V/mobile-ffmpeg(32325):  DE g726le           
V/mobile-ffmpeg(32325):  D  g729             
V/mobile-ffmpeg(32325):  D  gdv              
V/mobile-ffmpeg(32325):  D  genh             
V/mobile-ffmpeg(32325):  DE gif              
V/mobile-ffmpeg(32325):  D  gif_pipe         
V/mobile-ffmpeg(32325):  DE gsm              
V/mobile-ffmpeg(32325):  DE gxf              
V/mobile-ffmpeg(32325):  DE h261             
V/mobile-ffmpeg(32325):  DE h263             
V/mobile-ffmpeg(32325):  DE h264             
V/mobile-ffmpeg(32325):   E hash             
V/mobile-ffmpeg(32325):  D  hcom             
V/mobile-ffmpeg(32325):   E hds              
V/mobile-ffmpeg(32325):  DE hevc             
V/mobile-ffmpeg(32325):  DE hls              
V/mobile-ffmpeg(32325):  D  hnm              
V/mobile-ffmpeg(32325):  DE ico              
V/mobile-ffmpeg(32325):  D  idcin            
V/mobile-ffmpeg(32325):  D  idf              
V/mobile-ffmpeg(32325):  D  iff              
V/mobile-ffmpeg(32325):  D  ifv              
V/mobile-ffmpeg(32325):  DE ilbc             
V/mobile-ffmpeg(32325):  DE image2           
V/mobile-ffmpeg(32325):  DE image2pipe       
V/mobile-ffmpeg(32325):  D  ingenient        
V/mobile-ffmpeg(32325):  D  ipmovie          
V/mobile-ffmpeg(32325):   E ipod             
V/mobile-ffmpeg(32325):  DE ircam            
V/mobile-ffmpeg(32325):   E ismv             
V/mobile-ffmpeg(32325):  D  iss              
V/mobile-ffmpeg(32325):  D  iv8              
V/mobile-ffmpeg(32325):  DE ivf              
V/mobile-ffmpeg(32325):  D  ivr              
V/mobile-ffmpeg(32325):  D  j2k_pipe         
V/mobile-ffmpeg(32325):  DE jacosub          
V/mobile-ffmpeg(32325):  D  jpeg_pipe        
V/mobile-ffmpeg(32325):  D  jpegls_pipe      
V/mobile-ffmpeg(32325):  D  jv               
V/mobile-ffmpeg(32325):  D  kux              
V/mobile-ffmpeg(32325):   E latm             
V/mobile-ffmpeg(32325):  D  lavfi            
V/mobile-ffmpeg(32325):  D  live_flv         
V/mobile-ffmpeg(32325):  D  lmlm4            
V/mobile-ffmpeg(32325):  D  loas             
V/mobile-ffmpeg(32325):  DE lrc              
V/mobile-ffmpeg(32325):  D  lvf              
V/mobile-ffmpeg(32325):  D  lxf              
V/mobile-ffmpeg(32325):  DE m4v              
V/mobile-ffmpeg(32325):   E matroska         
V/mobile-ffmpeg(32325):  D  matroska,webm    
V/mobile-ffmpeg(32325):   E md5              
V/mobile-ffmpeg(32325):  D  mgsts            
V/mobile-ffmpeg(32325):  DE microdvd         
V/mobile-ffmpeg(32325):  DE mjpeg            
V/mobile-ffmpeg(32325):  D  mjpeg_2000       
V/mobile-ffmpeg(32325):   E mkvtimestamp_v2  
V/mobile-ffmpeg(32325):  DE mlp              
V/mobile-ffmpeg(32325):  D  mlv              
V/mobile-ffmpeg(32325):  D  mm               
V/mobile-ffmpeg(32325):  DE mmf              
V/mobile-ffmpeg(32325):   E mov              
V/mobile-ffmpeg(32325):  D  mov,mp4,m4a,3gp,3g2,mj2  
V/mobile-ffmpeg(32325):   E mp2              
V/mobile-ffmpeg(32325):  DE mp3              
V/mobile-ffmpeg(32325):   E mp4              
V/mobile-ffmpeg(32325):  D  mpc              
V/mobile-ffmpeg(32325):  D  mpc8             
V/mobile-ffmpeg(32325):  DE mpeg             
V/mobile-ffmpeg(32325):   E mpeg1video       
V/mobile-ffmpeg(32325):   E mpeg2video       
V/mobile-ffmpeg(32325):  DE mpegts           
V/mobile-ffmpeg(32325):  D  mpegtsraw        
V/mobile-ffmpeg(32325):  D  mpegvideo        
V/mobile-ffmpeg(32325):  DE mpjpeg           
V/mobile-ffmpeg(32325):  D  mpl2             
V/mobile-ffmpeg(32325):  D  mpsub            
V/mobile-ffmpeg(32325):  D  msf              
V/mobile-ffmpeg(32325):  D  msnwctcp         
V/mobile-ffmpeg(32325):  D  mtaf             
V/mobile-ffmpeg(32325):  D  mtv              
V/mobile-ffmpeg(32325):  DE mulaw            
V/mobile-ffmpeg(32325):  D  musx             
V/mobile-ffmpeg(32325):  D  mv               
V/mobile-ffmpeg(32325):  D  mvi              
V/mobile-ffmpeg(32325):  DE mxf              
V/mobile-ffmpeg(32325):   E mxf_d10          
V/mobile-ffmpeg(32325):   E mxf_opatom       
V/mobile-ffmpeg(32325):  D  mxg              
V/mobile-ffmpeg(32325):  D  nc               
V/mobile-ffmpeg(32325):  D  nistsphere       
V/mobile-ffmpeg(32325):  D  nsp              
V/mobile-ffmpeg(32325):  D  nsv              
V/mobile-ffmpeg(32325):   E null             
V/mobile-ffmpeg(32325):  DE nut              
V/mobile-ffmpeg(32325):  D  nuv              
V/mobile-ffmpeg(32325):   E oga              
V/mobile-ffmpeg(32325):  DE ogg              
V/mobile-ffmpeg(32325):   E ogv              
V/mobile-ffmpeg(32325):  DE oma              
V/mobile-ffmpeg(32325):   E opus             
V/mobile-ffmpeg(32325):  D  paf              
V/mobile-ffmpeg(32325):  D  pam_pipe         
V/mobile-ffmpeg(32325):  D  pbm_pipe         
V/mobile-ffmpeg(32325):  D  pcx_pipe         
V/mobile-ffmpeg(32325):  D  pgm_pipe         
V/mobile-ffmpeg(32325):  D  pgmyuv_pipe      
V/mobile-ffmpeg(32325):  D  pictor_pipe      
V/mobile-ffmpeg(32325):  D  pjs              
V/mobile-ffmpeg(32325):  D  pmp              
V/mobile-ffmpeg(32325):  D  png_pipe         
V/mobile-ffmpeg(32325):  D  ppm_pipe         
V/mobile-ffmpeg(32325):  D  psd_pipe         
V/mobile-ffmpeg(32325):   E psp              
V/mobile-ffmpeg(32325):  D  psxstr           
V/mobile-ffmpeg(32325):  D  pva              
V/mobile-ffmpeg(32325):  D  pvf              
V/mobile-ffmpeg(32325):  D  qcp              
V/mobile-ffmpeg(32325):  D  qdraw_pipe       
V/mobile-ffmpeg(32325):  D  r3d              
V/mobile-ffmpeg(32325):  DE rawvideo         
V/mobile-ffmpeg(32325):  D  realtext         
V/mobile-ffmpeg(32325):  D  redspark         
V/mobile-ffmpeg(32325):  D  rl2              
V/mobile-ffmpeg(32325):  DE rm               
V/mobile-ffmpeg(32325):  DE roq              
V/mobile-ffmpeg(32325):  D  rpl              
V/mobile-ffmpeg(32325):  D  rsd              
V/mobile-ffmpeg(32325):  DE rso              
V/mobile-ffmpeg(32325):  DE rtp              
V/mobile-ffmpeg(32325):   E rtp_mpegts       
V/mobile-ffmpeg(32325):  DE rtsp             
V/mobile-ffmpeg(32325):  DE s16be            
V/mobile-ffmpeg(32325):  DE s16le            
V/mobile-ffmpeg(32325):  DE s24be            
V/mobile-ffmpeg(32325):  DE s24le            
V/mobile-ffmpeg(32325):  DE s32be            
V/mobile-ffmpeg(32325):  DE s32le            
V/mobile-ffmpeg(32325):  D  s337m            
V/mobile-ffmpeg(32325):  DE s8               
V/mobile-ffmpeg(32325):  D  sami             
V/mobile-ffmpeg(32325):  DE sap              
V/mobile-ffmpeg(32325):  DE sbc              
V/mobile-ffmpeg(32325):  D  sbg              
V/mobile-ffmpeg(32325):  DE scc              
V/mobile-ffmpeg(32325):  D  sdp              
V/mobile-ffmpeg(32325):  D  sdr2             
V/mobile-ffmpeg(32325):  D  sds              
V/mobile-ffmpeg(32325):  D  sdx              
V/mobile-ffmpeg(32325):   E segment          
V/mobile-ffmpeg(32325):  D  ser              
V/mobile-ffmpeg(32325):  D  sgi_pipe         
V/mobile-ffmpeg(32325):  D  shn              
V/mobile-ffmpeg(32325):  D  siff             
V/mobile-ffmpeg(32325):   E singlejpeg       
V/mobile-ffmpeg(32325):  D  sln              
V/mobile-ffmpeg(32325):  DE smjpeg           
V/mobile-ffmpeg(32325):  D  smk              
V/mobile-ffmpeg(32325):   E smoothstreaming  
V/mobile-ffmpeg(32325):  D  smush            
V/mobile-ffmpeg(32325):  D  sol              
V/mobile-ffmpeg(32325):  DE sox              
V/mobile-ffmpeg(32325):  DE spdif            
V/mobile-ffmpeg(32325):   E spx              
V/mobile-ffmpeg(32325):  DE srt              
V/mobile-ffmpeg(32325):  D  stl              
V/mobile-ffmpeg(32325):   E stream_segment,ssegment  
V/mobile-ffmpeg(32325):   E streamhash       
V/mobile-ffmpeg(32325):  D  subviewer        
V/mobile-ffmpeg(32325):  D  subviewer1       
V/mobile-ffmpeg(32325):  D  sunrast_pipe  
tanersener commented 4 years ago

There are 8 different flutter_ffmpeg packages, each package includes a different set of external libraries enabled.

I listed them in 1. Features section of README. In 2.1 Packages section you can see how a package can be installed and what is a default package.

x264 is included in GPL licensed libraries. So, you need to install one of them.

By the way, -formats shows you only muxers & demuxers. You need to run -encoders to see if there is an h264 encoder available. On iOS, there is a built-in encoder named h264_videotoolbox that you can use, but for Android you need to use x264.

rocklee0098 commented 4 years ago

problem resolved, thank you so much!

febg11 commented 4 years ago

@tanersener I have been trying to use -vcodec h264_videotoolbox with ios devices and it doesn't seem to take -crf or -preset:v into account. I get a really pixelated video every time even if i call with crf 0 and veryslow as the preset.

The same commands work fine with regular -vcodec h264 on an android device.

Do you know why this could be?

tanersener commented 4 years ago

You are right, h264_videotoolbox does not support some of these encoding options.

Can you take a look at what videotoolbox supports by running -h encoder=h264_videotoolbox?

febg11 commented 4 years ago

Sorry to be a pain taner but i have no idea what this is telling me. Are the top ones are supported parameters? e.g. --enable-libx265 and how would i pass this in if it is?

  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      56. 42.102 / 56. 42.102
  libavcodec     58. 78.102 / 58. 78.102
  libavformat    58. 42.100 / 58. 42.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 77.101 /  7. 77.101
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Encoder h264_videotoolbox [VideoToolbox H.264 Encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: videotoolbox_vld nv12 yuv420p
h264_videotoolbox AVOptions:
  -profile           <int>        E..V...... Profile (from 0 to 5) (default 0)
     baseline        1            E..V...... Baseline Profile
     main            2            E..V...... Main Profile
     high            3            E..V...... High Profile
     extended        4            E..V...... Extend Profile
  -level             <int>        E..V...... Level (from 0 to 52) (default 0)
     1.3             13           E..V...... Level 1.3, only available with Baseline Profile
     3.0             30           E..V...... Level 3.0
     3.1             31           E..V...... Level 3.1
     3.2             32           E..V...... Level 3.2
     4.0             40           E..V...... Level 4.0
     4.1             41           E..V...... Level 4.1
     4.2             42           E..V...... Level 4.2
     5.0             50           E..V...... Level 5.0
     5.1             51           E..V...... Level 5.1
     5.2             52           E..V...... Level 5.2
  -coder             <int>        E..V...... Entropy coding (from 0 to 2) (default 0)
     cavlc           1            E..V...... CAVLC entropy coding
     vlc             1            E..V...... CAVLC entropy coding
     cabac           2            E..V...... CABAC entropy coding
     ac              2            E..V...... CABAC entropy coding
  -a53cc             <boolean>    E..V...... Use A53 Closed Captions (if available) (default true)
  -allow_sw          <boolean>    E..V...... Allow software encoding (default false)
  -require_sw        <boolean>    E..V...... Require software encoding (default false)
  -realtime          <boolean>    E..V...... Hint that encoding should happen in real-time if not faster (e.g. capturing from camera). (default false)
  -frames_before     <boolean>    E..V...... Other frames will come before the frames in this session. This helps smooth concatenation issues. (default false)
  -frames_after      <boolean>    E..V...... Other frames will come after the frames in this session. This helps smooth concatenation issues. (default false)

I have read this medium article and he says it only supports bitrate setting.

Is there anyway i can translate my crf and preset values into a bitrate value?

tanersener commented 4 years ago

-h encoder=h264_videotoolbox is the help command for h264_videotoolbox encoder. Output shows you which parameters/options you can use with h264_videotoolbox. You can also run -h encoder=libx264 too, see what libx264 supports and compare it with h264_videotoolbox.

Additionally, you need to run these commands on your iOS device not on your desktop machine.

Anyway, as far as I can see -crf is not listed in the output. This means that -crf is not supported. But there are other parameters. Why don't you play with them to increase the quality?

FFmpeg H.264 Video Encoding Guide can help you about -crf and -preset. But don't expect everything listed in that page to work with h264_videotoolbox. That page is focused on libx264 mostly.