2017-04-20 4 views
1

Ich habe vor kurzem ffmpeg library for android verwendet, um das Video der Länge 10 Sekunden und Größe fast 25 MB zu komprimieren. Im Folgenden sind die Befehle, die ich versucht, zu verwenden:Wie komprimiere ich Video in Android schneller?

ffmpeg -i /video.mp4 -vcodec h264 -b:v 1000k -acodec mp2 /output.mp4 

ODER

ffmpeg -i input.mp4 -vcodec h264 -crf 20 output.mp4 

Beide Befehle waren zu langsam. Ich habe die Aufgabe vor dem Abschluss abgebrochen, weil sie zu lange gedauert hat. Es dauerte mehr als 8 Minuten, um nur 20% des Videos zu verarbeiten. Die Zeit ist sehr wichtig für mich und ich kann mich nicht für ffmpeg entscheiden. Ich habe folgende Frage:

  • Gibt es etwas falsch mit dem Befehl oder ffmpeg ist sowieso langsam?
  • Wenn es langsam ist dann gibt es noch eine andere gut dokumentierte und zuverlässige Weise/Bibliothek für Videokompression, die ich in Android verwenden kann?
+0

Ein MP4 ist bereits komprimiert. – CommonsWare

+0

Kann ich die Größe nicht reduzieren? –

+0

Sie können die Auflösung reduzieren. Sie können die Bildrate reduzieren. Sie können einen Teil davon abschneiden (z. B. die Länge auf X Sekunden verkürzen). Keine davon steht für Komprimierung, ebenso wenig wie das Löschen von Dateien aus einem ZIP-Archiv das Komprimieren dieses ZIP-Archivs. Transkodieren eines Videos - Was Sie mit "ffmpeg" machen und was daran beteiligt ist, die Auflösung oder Bildrate zu ändern - ist langsam. – CommonsWare

Antwort

0

Ihre Datei ist in MP4-Container und hat bereits seine Streams in einigen vordefinierten Codec. Jetzt hängt die Größe jedes Containers (nicht speziell mp4) davon ab, welche Art von Komprimierung (lockerer Codec) zum Komprimieren der Daten verwendet wird. Aus diesem Grund sehen Sie unterschiedliche Größen für denselben Inhalt in verschiedenen Formaten. Es gibt andere Parameter, die die Größe der Datei beeinflussen können, z. B. Bildrate, Auflösung, Audio-Bitrate usw. Wenn Sie sie reduzieren, wird die Dateigröße kleiner. z.B. In youtube können Sie wählen, Video mit einer niedrigeren Rate zu spielen, wenn Bandbreite das Problem ist.

Wenn Sie dies jedoch tun, müssen Sie die gesamte Datei erneut verarbeiten und es wird viel Zeit in Anspruch nehmen, da Sie den Container demuxen, den Codec dekodieren, Filter anwenden (Rahmen reduzieren usw.)), dann aufzeichnen und dann erneut remuxen. Dieser gesamte Prozess lohnt sich nur dann, wenn Sie ein wenig überzeugenden Anwendungsfall haben.

Eine Lösung ist es, eine leistungsfähigere Maschine zu verwenden, aber auch dies ist durch die Architektur/Einschränkung der Anwendung begrenzt, leistungsstarke Maschine zu verwenden. Um speziell für ffmpeg zu antworten, macht es keinen großen Unterschied.

Verwandte Themen