2016-09-13 2 views
1

J'utilise actuellement une implémentation de ffmpeg sur mon application android. Je permets aux utilisateurs de prendre de courtes vidéos dans mon application, puis quand ils les téléchargent sur le serveur, je les écrase avec ffmpeg pour réduire la taille des fichiers afin qu'ils ne transmettent pas d'énormes quantités de données sur le fil. Le problème, c'est qu'il faut une éternité pour encoder les vidéos sur le périphérique Android. Ces vidéos ne durent généralement pas plus de 45 secondes et peuvent durer 20 minutes. J'ai joué avec différents commutateurs/paramètres sur la ligne de commande ffmpeg et je l'ai maintenant à un moment plus confortable, mais la taille des fichiers est nettement plus grande. Je ne suis pas sûr quel codec je devrais utiliser (encodage le plus rapide mais avec une sortie de qualité décente), comment ffmpeg gère la modification de la taille (rapport d'aspect) en termes de vitesse de codage, etcCommande ffmpeg pour un encodage plus rapide à un débit décent avec une taille de fichier plus petite

Voici les deux commandes que j'ai été en train d'utiliser. Cette première affiche le format de fichier/qualité que je veux, mais ça prend trop de temps pour encoder, sans parler de ce qui rend mon appareil sont vraiment chaud alors qu'il est le codage depuis si longtemps:

ffmpeg -i input.mp4 -b:v 1024k -c:a copy -vf scale=960:540 output.mp4 

J'ai tweaked le bitrate sur cela ainsi que changé l'échelle à une plus petite taille, mais je ne veux pas avoir à rendre les vidéos vraiment petites (en termes d'échelle) pour accomplir un encodage plus rapide. cette seconde commande va beaucoup plus vite, mais rend la taille du fichier beaucoup plus grande:

ffmpeg -i input.mp4 -vcodec libx264 -preset fast -c:a copy -s 960x540 output.mp4 

Je voudrais trouver un juste milieu (plus petite taille de fichier, mais un encodage plus rapide) en gardant la taille de l'échelle vidéo proche de l'original. ffmpeg a tellement de paramètres/commutateurs différents qu'il est difficile de comprendre ce que je devrais faire.

EDIT: ajout de la sortie ffmpeg.

ffmpeg -i input.mp4 -vcodec libx264 30 autoréglages veryfast CRF -c: une copie -s 960x540 output.mp4

09-13 11:06:28.330 10881-10881/someapp D/home: ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers 
09-13 11:06:28.330 10881-10881/someapp D/home: built with gcc 4.8 (GCC) 
09-13 11:06:28.331 10881-10881/someapp D/home: configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --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/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --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= 
09-13 11:06:28.331 10881-10881/someapp D/home: libavutil  55. 17.103/55. 17.103 
09-13 11:06:28.331 10881-10881/someapp D/home: libavcodec  57. 24.102/57. 24.102 
09-13 11:06:28.331 10881-10881/someapp D/home: libavformat 57. 25.100/57. 25.100 
09-13 11:06:28.331 10881-10881/someapp D/home: libavdevice 57. 0.101/57. 0.101 
09-13 11:06:28.331 10881-10881/someapp D/home: libavfilter  6. 31.100/6. 31.100 
09-13 11:06:28.331 10881-10881/someapp D/home: libswscale  4. 0.100/4. 0.100 
09-13 11:06:28.331 10881-10881/someapp D/home: libswresample 2. 0.101/2. 0.101 
09-13 11:06:28.331 10881-10881/someapp D/home: libpostproc 54. 0.100/54. 0.100 
09-13 11:06:28.430 10881-10881/someapp D/home: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/ExpeditionSpot/Videos/20160913110411.mp4': 
09-13 11:06:28.430 10881-10881/someapp D/home: Metadata: 
09-13 11:06:28.430 10881-10881/someapp D/home:  major_brand  : mp42 
09-13 11:06:28.430 10881-10881/someapp D/home:  minor_version : 0 
09-13 11:06:28.430 10881-10881/someapp D/home:  compatible_brands: isommp42 
09-13 11:06:28.430 10881-10881/someapp D/home:  creation_time : 2016-09-13 17:04:33 
09-13 11:06:28.430 10881-10881/someapp D/home:  com.android.version: 6.0.1 
09-13 11:06:28.430 10881-10881/someapp D/home: Duration: 00:00:19.41, start: 0.000000, bitrate: 20222 kb/s 
09-13 11:06:28.430 10881-10881/someapp D/home:  Stream #0:0(eng): Video: h264 (Baseline) (avc1/0x31637661), yuv420p, 1920x1080, 19963 kb/s, SAR 1:1 DAR 16:9, 30.03 fps, 30 tbr, 90k tbn, 180k tbc (default) 
09-13 11:06:28.430 10881-10881/someapp D/home:  Metadata: 
09-13 11:06:28.430 10881-10881/someapp D/home:  creation_time : 2016-09-13 17:04:33 
09-13 11:06:28.430 10881-10881/someapp D/home:  handler_name : VideoHandle 
09-13 11:06:28.431 10881-10881/someapp D/home:  Stream #0:1(eng): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default) 
09-13 11:06:28.431 10881-10881/someapp D/home:  Metadata: 
09-13 11:06:28.431 10881-10881/someapp D/home:  creation_time : 2016-09-13 17:04:33 
09-13 11:06:28.431 10881-10881/someapp D/home:  handler_name : SoundHandle 
09-13 11:06:28.448 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] using SAR=1/1 
09-13 11:06:28.448 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] using cpu capabilities: none! 
09-13 11:06:28.516 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] profile High, level 3.1 
09-13 11:06:28.516 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] 264 - core 148 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=12 lookahead_threads=4 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=crf mbtree=1 crf=27.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 
09-13 11:06:28.532 10881-10881/someapp D/home: Output #0, mp4, to '/storage/emulated/0/ExpeditionSpot/.tmp/small-20160913110411.mp4': 
09-13 11:06:28.532 10881-10881/someapp D/home: Metadata: 
09-13 11:06:28.532 10881-10881/someapp D/home:  major_brand  : mp42 
09-13 11:06:28.533 10881-10881/someapp D/home:  minor_version : 0 
09-13 11:06:28.533 10881-10881/someapp D/home:  compatible_brands: isommp42 
09-13 11:06:28.533 10881-10881/someapp D/home:  com.android.version: 6.0.1 
09-13 11:06:28.533 10881-10881/someapp D/home:  encoder   : Lavf57.25.100 
09-13 11:06:28.533 10881-10881/someapp D/home:  Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0]/0x0021), yuv420p, 960x540 [SAR 1:1 DAR 16:9], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default) 
09-13 11:06:28.533 10881-10881/someapp D/home:  Metadata: 
09-13 11:06:28.533 10881-10881/someapp D/home:  creation_time : 2016-09-13 17:04:33 
09-13 11:06:28.533 10881-10881/someapp D/home:  handler_name : VideoHandle 
09-13 11:06:28.533 10881-10881/someapp D/home:  encoder   : Lavc57.24.102 libx264 
09-13 11:06:28.533 10881-10881/someapp D/home:  Side data: 
09-13 11:06:28.533 10881-10881/someapp D/home:  unknown side data type 10 (24 bytes) 
09-13 11:06:28.533 10881-10881/someapp D/home:  Stream #0:1(eng): Audio: aac (LC) ([64][0][0][0]/0x0040), 48000 Hz, stereo, 96 kb/s (default) 
09-13 11:06:28.533 10881-10881/someapp D/home:  Metadata: 
09-13 11:06:28.533 10881-10881/someapp D/home:  creation_time : 2016-09-13 17:04:33 
09-13 11:06:28.533 10881-10881/someapp D/home:  handler_name : SoundHandle 
09-13 11:06:28.533 10881-10881/someapp D/home: Stream mapping: 
09-13 11:06:28.533 10881-10881/someapp D/home: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) 
09-13 11:06:28.533 10881-10881/someapp D/home: Stream #0:1 -> #0:1 (copy) 
09-13 11:06:28.533 10881-10881/someapp D/home: Press [q] to stop, [?] for help 
09-13 11:06:29.102 10881-10881/someapp D/home: frame= 7 fps=0.0 q=0.0 size=  0kB time=00:00:01.04 bitrate= 0.4kbits/s speed=2.08x  
09-13 11:06:29.699 10881-10881/someapp D/home: frame= 16 fps= 15 q=0.0 size=  0kB time=00:00:01.04 bitrate= 0.4kbits/s speed=0.998x  
.... 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] frame I:3  Avg QP:26.83 size: 21896 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] frame P:279 Avg QP:28.76 size: 5859 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] frame B:296 Avg QP:29.93 size: 863 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] consecutive B-frames: 18.3% 32.2% 23.9% 25.6% 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] mb I I16..4: 16.9% 54.2% 28.9% 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] mb P I16..4: 7.7% 9.1% 0.4% P16..4: 27.5% 11.1% 4.0% 0.0% 0.0% skip:40.1% 
09-13 11:07:12.674 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] mb B I16..4: 0.8% 0.6% 0.0% B16..8: 10.9% 2.4% 0.1% direct: 1.8% skip:83.5% L0:35.8% L1:54.2% BI:10.0% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] 8x8 transform intra:52.0% inter:41.3% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] coded y,uvDC,uvAC intra: 28.9% 26.0% 2.1% inter: 6.4% 5.0% 0.0% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] i16 v,h,dc,p: 57% 20% 17% 6% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 23% 34% 1% 2% 1% 3% 2% 2% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 21% 17% 2% 7% 4% 6% 4% 4% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] i8c dc,h,v,p: 59% 16% 23% 2% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] Weighted P-Frames: Y:16.8% UV:4.7% 
09-13 11:07:12.675 10881-10881/someapp D/home: [libx264 @ 0xf71c4400] kb/s:812.09 
+0

vous ne pouvez rien faire. Le transcodage est un processus très gourmand en ressources. vous décoderez et encoderez efficacement la vidéo simultanément. autre que d'utiliser un déchargement GPU (aucune idée si ffmpeg peut même utiliser gpus), vous êtes coincé avec la gravure du cpu alors qu'il fait les gajillions d'opérations mathématiques nécessaires. –

+0

bien il y a évidemment quelque chose que je peux faire parce que ces deux commandes produisent des résultats radicalement différents (en termes de temps d'encodage). Je suis sûr que certains codecs sont plus rapides que d'autres etc, juste ne sais pas quoi ou quoi ... –

+0

Essayez 'ffmpeg -i input.mp4 -vcodec libx264 -crf 27 -preset veryfast -c: une copie -s 960x540 sortie. mp4'. Mais comme Marc l'a dit, la marge d'accélération est modeste compte tenu des autres contraintes. – Mulvya

Répondre

5

Essayez

ffmpeg -i input.mp4 -vcodec libx264 -crf 27 -preset veryfast -c:a copy -s 960x540 output.mp4 

En mode CRF, x264 encode la vidéo pour maintenir une certaine qualité tout au long. Les valeurs inférieures produisent des fichiers de meilleure qualité mais plus volumineux. Combiné avec le préréglage veryfast, il devrait fournir un compromis acceptable entre la vitesse et la taille.