2016-05-24 5 views
-5

Ich versuche, ffmpeg auf Android auszuführen. Ich habe auch 2-3 Befehle erfolgreich ausgeführt. Aber ich bin an einem Punkt fest, wo ich Text zum Video hinzufügen.FFMPEG: Hinzufügen von Schriftart zu Video gibt Fehler

Hier ist der Befehl, den ich ausführe.

FUNKTIONIERT NICHT: weil das text Argument einen Raum zwischen zwei Wörtern hat.

"-i "+path+"out.mp4 -vf drawtext=fontfile="+path+"f1.ttf:text='Stack OverFlow' -y -c:v libx264 -c:a copy -movflags +faststart "+path+"output.mp4" 

ARBEITEN: nur entfernt Raum.

"-i "+path+"out.mp4 -vf drawtext=fontfile="+path+"f1.ttf:text='StackOverFlow' -y -c:v libx264 -c:a copy -movflags +faststart "+path+"output.mp4" 

Hier path enthält die externe Pfad der SD-Karte. out.mp4 und f1.ttf existiert in meinem Ordner.

Meine Frage ist, warum es nicht mit Raum arbeitet.

Hier ist der Stack-Trace, den ich bekomme.

FAILED with output : WARNING: linker: /data/data/com.github.hiteshsondhi88.sampleffmpeg/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix. 
ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers 
built with gcc 4.8 (GCC) 
configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/i686-linux-android- --arch=x86 --cpu=i686 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/x86 --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -march=i686' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags= 
libavutil  55. 17.103/55. 17.103 
libavcodec  57. 24.102/57. 24.102 
libavformat 57. 25.100/57. 25.100 
libavdevice 57. 0.101/57. 0.101 
libavfilter  6. 31.100/6. 31.100 
libswscale  4. 0.100/4. 0.100 
libswresample 2. 0.101/2. 0.101 
libpostproc 54. 0.100/54. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/Testing/out.mp4': 
Metadata: 
major_brand  : isom 
minor_version : 512 
compatible_brands: isomiso2avc1mp41 
encoder   : Lavf57.25.100 
Duration: 00:00:05.00, start: 0.000000, bitrate: 117 kb/s 
Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 300x300 [SAR 40:33 DAR 40:33], 113 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) 
Metadata: 
handler_name : VideoHandler 
[NULL @ 0xb585f000] Unable to find a suitable output format for 'text='Stack' 
text='Stack: Invalid argument 

Warum es sagt ungültiges Argument. Es wird großartig sein, wenn irgendein Experte mich bei dem, was ich hier falsch mache, führen kann.

Ich habe diese Frage von SO refered: Text on video ffmpeg

+0

Ich bin nicht mit Android vertraut, aber ich habe einen Trend von Problemen mit dem Zitieren bemerkt. – LordNeckbeard

+0

Zitate Probleme bedeutet ?? Ich muss Zitat von etwas wo entfernen ?? Aber beachte, dass es funktioniert ** ohne Platz **. Ich habe meine Frage aktualisiert. @LordNeckbeard –

+1

Sie konnten nicht angeben, wie Sie ffmpeg aufrufen, aber es wäre wahrscheinlich am besten, wenn Sie zu einem Mechanismus wechseln würden, mit dem Sie die Argumente selbst in ein Array aufteilen können, anstatt auf einige automatisierte Funktionen zu zählen, mit denen Probleme auftreten könnten der Versuch eines zitierten Raumes. –

Antwort

-1

GELöST

I Textdatei verwenden zum Einfügen space zwischen Zeichen in ffmpeg Befehl. Da der direkte Raum nicht funktionierte, wie ich gesagt habe.

So erstellen Sie eine Textdatei text.txt. Der Inhalt ist der Text, den Sie in Ihrem Video haben möchten.

bauen Sie dann den Befehl wie folgt aus:

"-i "+path+"out.mp4 -vf drawtext=fontfile="+path+"f1.ttf:textfile="+path+"text.ttf -y -c:v libx264 -c:a copy -movflags +faststart "+path+"output.mp4" 

Es wird erfolgreich fahren werden.

-1

i tat dies aber mit einer anderen Logik ein, den Text in EditExt setzen und dann seinen Screenshot nehmen -> gespeichert, die auf SD-Karte btmap von EditText Screenshot und verwenden Sie dann das Bild als Wasserzeichen auf Video mit diesem Befehl
String[] complexCommand = {"ffmpeg", "-y", "-i", filePath, "-strict", "experimental", "-vf", "movie=" + editTextScreenShotFliePath + " [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]", "-s", "640x480", "-r", "30", "-b", "15496k", "-vcodec", "mpeg4", "-ab", "48000", "-ac", "2", "-ar", "22050", mCurrentVideoFile.getAbsolutePath()};

+0

Ich möchte Text über Video. Nicht Wasserzeichen –

+0

Wie ich sagte, benutzte ich eine andere Logik für diesen Zweck und ich nahm Text als Wasserzeichen. Nun, es war nur ein Vorschlag so chillax –