{"id":18621845,"url":"https://github.com/neurospeech/xamarin-android-ffmpeg","last_synced_at":"2026-03-16T11:09:48.296Z","repository":{"id":80234823,"uuid":"55954408","full_name":"neurospeech/xamarin-android-ffmpeg","owner":"neurospeech","description":"Xamarin Android FFMpeg binding","archived":false,"fork":false,"pushed_at":"2019-12-20T13:31:42.000Z","size":53769,"stargazers_count":30,"open_issues_count":9,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-25T08:38:22.422Z","etag":null,"topics":["ffmpeg","xamarin","xamarin-android"],"latest_commit_sha":null,"homepage":null,"language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neurospeech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-04-11T08:20:19.000Z","updated_at":"2023-09-10T23:11:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"34ca4044-ff94-4ad9-bb7f-f040d5a0a24d","html_url":"https://github.com/neurospeech/xamarin-android-ffmpeg","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurospeech%2Fxamarin-android-ffmpeg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurospeech%2Fxamarin-android-ffmpeg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurospeech%2Fxamarin-android-ffmpeg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurospeech%2Fxamarin-android-ffmpeg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neurospeech","download_url":"https://codeload.github.com/neurospeech/xamarin-android-ffmpeg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119296,"owners_count":21050755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffmpeg","xamarin","xamarin-android"],"created_at":"2024-11-07T04:13:49.648Z","updated_at":"2026-03-16T11:09:43.243Z","avatar_url":"https://github.com/neurospeech.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xamarin-android-ffmpeg\nXamarin Android FFMpeg binding\n\n# For Android 6.0 onwards, use Xamarin.Android.MP4Transcoder\nAndroid 6.0 onwards, `text relocations` are strictly prohibited, many source files used in `ffmpeg` use `text relocations` so `ffmpeg` will never run on future android builds unless they rewrite large library and replace them with alternative of `text relocations`. For this, only alternative is to use Android's native Mp4 transcoder.\n\nMP4Transcoder internally uses https://github.com/ypresto/android-transcoder , please read license before using Xamarin.Android.MP4Transcoder\n\n        Install-Package Xamarin.Android.MP4Transcoder\n\n\n             if (Android.OS.Build.VERSION.SdkInt \u003e= BuildVersionCodes.Kitkat) {\n\n                await Xamarin.MP4Transcoder.Transcoder.For720pFormat().ConvertAsync(inputFile, ouputFile, f =\u003e {\n                    onProgress?.Invoke((int)(f * (double)100), 100);\n                });\n                return ouputFile;\n\n            }\n\n\n# Big Thanks\nhttps://github.com/WritingMinds/ffmpeg-android-java\n\n# Licensing\nThis code is licensed under MIT, however, you must use this library by accepting and following licensing terms mentioned in the source project at https://github.com/WritingMinds/ffmpeg-android-java\n\n# Nuget Package\nYou can download Xamarin.Android.FFmpeg package from Nuget Package manager or run following command in Nuget Package Console.\n\n        Install-Package Xamarin.Android.FFmpeg\n\n# Usage\n\n        public class VideoConverter \n        {\n\n            public VideoConverter()\n            {\n\n            }\n\n\t\t/**\n\t\t* This method must be called from UI thread.\n\t\t***/\n            public Task\u003cFile\u003e ConvertFileAsync(Context context,\n                File inputFile, \n                Action\u003cstring\u003e logger = null, \n                Action\u003cint,int\u003e onProgress = null)\n            {\n                File ouputFile = new File(inputFile.CanonicalPath + \".mpg\");\n\n                ouputFile.DeleteOnExit();\n\n                List\u003cstring\u003e cmd = new List\u003cstring\u003e();\n                cmd.Add(\"-y\");\n                cmd.Add(\"-i\");\n                cmd.Add(inputFile.CanonicalPath);\n\n                MediaMetadataRetriever m = new MediaMetadataRetriever();\n                m.SetDataSource(inputFile.CanonicalPath);\n\n                string rotate = m.ExtractMetadata(Android.Media.MetadataKey.VideoRotation);\n\n                int r = 0;\n\n                if (!string.IsNullOrWhiteSpace(rotate)) {\n                    r = int.Parse(rotate);\n                }\n\n                cmd.Add(\"-b:v\");\n                cmd.Add(\"1M\");\n\n                cmd.Add(\"-b:a\");\n                cmd.Add(\"128k\");\n\n\n                switch (r)\n                {\n                    case 270:\n                        cmd.Add(\"-vf scale=-1:480,transpose=cclock\");\n                        break;\n                    case 180:\n                        cmd.Add(\"-vf scale=-1:480,transpose=cclock,transpose=cclock\");\n                        break;\n                    case 90:\n                        cmd.Add(\"-vf scale=480:-1,transpose=clock\");\n                        break;\n                    case 0:\n                        cmd.Add(\"-vf scale=-1:480\");\n                        break;\n                    default:\n\n                        break;\n                }\n\n                cmd.Add(\"-f\");\n                cmd.Add(\"mpeg\");\n\n                cmd.Add(ouputFile.CanonicalPath);\n\n                string cmdParams = string.Join(\" \", cmd);\n\n                int total = 0;\n                int current = 0;\n\n\t\tawait FFMpeg.Xamarin.FFMpegLibrary.Run(\n\t\t\tcontext,\n\t\t\tcmdParams \n\t\t\t, (s) =\u003e {\n\t\t\t\tlogger?.Invoke(s);\n\t\t\t\tint n = Extract(s, \"Duration:\", \",\");\n\t\t\t\tif (n != -1) {\n\t\t\t\t\ttotal = n;\n\t\t\t\t}\n\t\t\t\tn = Extract(s, \"time=\", \" bitrate=\");\n\t\t\t\tif (n != -1) {\n\t\t\t\t\tcurrent = n;\n\t\t\t\t\tonProgress?.Invoke(current, total);\n\t\t\t\t}\n\t\t\t});\n\n                return ouputFile;\n            }\n\n            int Extract(String text, String start, String end)\n            {\n                int i = text.IndexOf(start);\n                if (i != -1)\n                {\n                    text = text.Substring(i + start.Length);\n                    i = text.IndexOf(end);\n                    if (i != -1)\n                    {\n                        text = text.Substring(0, i);\n                        return parseTime(text);\n                    }\n                }\n                return -1;\n            }\n\n            public static int parseTime(String time)\n            {\n                time = time.Trim();\n                String[] tokens = time.Split(':');\n                int hours = int.Parse(tokens[0]);\n                int minutes = int.Parse(tokens[1]);\n                float seconds = float.Parse(tokens[2]);\n                int s = (int)seconds * 100;\n                return hours * 360000 + minutes * 60100 + s;\n            }\n\n        }\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneurospeech%2Fxamarin-android-ffmpeg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneurospeech%2Fxamarin-android-ffmpeg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneurospeech%2Fxamarin-android-ffmpeg/lists"}