Skip to content

A flutter package for editing video written in pure Dart with fully customizable UI. Supports crop, trim, rotation and cover selection.

License

Notifications You must be signed in to change notification settings

LeGoffMael/video_editor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

video_editor


Goal of this fork

  • new trimmer style when the length of the video is greater than maxDuration
    • inside gesture scroll horizontally to change the maxDuration trim position in the video length
    • inside gesture update progress position and video seek position
    • see previous and next thumbnails out of the padding area
  • video timeline along the trimmer
  • new style of trimmer
  • add possibility to select a frame of the video as the cover
    • choose between x frames exported from the trim selection
    • default select first frame by default and when trim values changed
    • display the selected frame when cover tab is opened
    • export cover as a file

Fix bugs

  • avoid maxTrim to be smaller than minTrim
  • avoid minTrim to be bigger than maxTrim
  • synch transformation data with video or coverViever

New Features

  • New supported actions
    • New trim (if video length > maxDuration param)
    • New widget to select a cover between x exported thumbnails from the trimmed period
New Trimmer New Cover selection




Features

  • Super flexible UI Design.
  • Support actions:
    • Crop
    • Trim
    • Scale
    • Rotate



Installation (More info on Flutter FFMPEG)

Android

Add on android/build.gradle file and define package name in ext.flutterFFmpegPackage variable.

ext.flutterFFmpegPackage = "min-gpl-lts"

iOS

(Flutter >= 1.20.x)

  • Edit ios/Podfile, add the following block before target 'Runner do and specify the package name in min-gpl-lts section:

      # "fork" of method flutter_install_ios_plugin_pods (in fluttertools podhelpers.rb) to get lts version of ffmpeg
      def flutter_install_ios_plugin_pods(ios_application_path = nil)
       # defined_in_file is set by CocoaPods and is a Pathname to the Podfile.
        ios_application_path ||= File.dirname(defined_in_file.realpath) if self.respond_to?(:defined_in_file)
        raise 'Could not find iOS application path' unless ios_application_path
    
        # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
        # referring to absolute paths on developers' machines.
    
        symlink_dir = File.expand_path('.symlinks', ios_application_path)
        system('rm', '-rf', symlink_dir) # Avoid the complication of dependencies like FileUtils.
    
        symlink_plugins_dir = File.expand_path('plugins', symlink_dir)
        system('mkdir', '-p', symlink_plugins_dir)
    
        plugins_file = File.join(ios_application_path, '..', '.flutter-plugins-dependencies')
        plugin_pods = flutter_parse_plugins_file(plugins_file)
        plugin_pods.each do |plugin_hash|
          plugin_name = plugin_hash['name']
          plugin_path = plugin_hash['path']
    
          if (plugin_name && plugin_path)
              symlink = File.join(symlink_plugins_dir, plugin_name)
              File.symlink(plugin_path, symlink)
    
              if plugin_name == 'flutter_ffmpeg'
                  pod plugin_name + '/min-gpl-lts', :path => File.join('.symlinks', 'plugins', plugin_name, 'ios')
              else
                  pod plugin_name, :path => File.join('.symlinks', 'plugins', plugin_name, 'ios')
              end
          end
        end
      end
  • Ensure that flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) function is called within target 'Runner' do block. In that case, it is mandatory that the added function is named flutter_install_ios_plugin_pods and that you do not make an explicit call within that block.

(Flutter < 1.20.x)

  • Edit ios/Podfile file and modify the default # Plugin Pods block as follows. Do not forget to specify the package name in min-gpl-lts section.

      # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
      # referring to absolute paths on developers' machines.
      system('rm -rf .symlinks')
      system('mkdir -p .symlinks/plugins')
      plugin_pods = parse_KV_file('../.flutter-plugins')
      plugin_pods.each do |name, path|
          symlink = File.join('.symlinks', 'plugins', name)
          File.symlink(path, symlink)
          if name == 'flutter_ffmpeg'
              pod name+'/min-gpl-lts', :path => File.join(symlink, 'ios')
          else
              pod name, :path => File.join(symlink, 'ios')
          end
      end



Example (The UI Design is fully customizable on the example)


Crop Video Rotate Video

Trim Video Export Video

About

A flutter package for editing video written in pure Dart with fully customizable UI. Supports crop, trim, rotation and cover selection.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages