web-dev-qa-db-fra.com

Comment créer un fichier vidéo webm?

Après avoir examiné le projet Web, je ne vois aucune preuve d'un moyen de générer une vidéo WebM. Je vois des pilotes pour Windows et Quicktime, mais aucune preuve que l'utilitaire ffmpeg le plus courant est pris en charge.

Existe-t-il un convertisseur open source qui produit webm?

Merci.

46
Marneau

Vous pouvez utiliser ffmpeg pour convertir en webm. Assurez-vous de le compiler avec le --enable-libvpx et --enable-libvorbis flags (voir FFmpeg compile guides ), ou visitez la page FFmpeg Download pour les liens vers les builds qui incluent le support. Après cela, vous pouvez utiliser la commande suivante (j'utilise input.flv comme exemple de fichier d'entrée):

ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.webm

Pour plus d'informations, reportez-vous au FFmpeg vpx (WebM) Encoding Guide .

59
matzahboy

J'ai mis cela en place récemment, mais c'est une sorte de douleur. Voici ce que je devais faire:

Tout d'abord, créez ffmpeg à partir de la source pour inclure les pilotes libvpx (même si vous utilisez une version qui en dispose, vous avez besoin des plus récents (à partir de ce mois-ci) pour diffuser webm car ils ont juste ajouté la fonctionnalité pour inclure des en-têtes globaux). Je l'ai fait sur un serveur et un bureau Ubuntu, et ce guide m'a montré comment - des instructions pour d'autres OS peuvent être trouvés ici .

Une fois que vous avez obtenu la version appropriée de ffmpeg/ffserver, vous pouvez les configurer pour le streaming, dans mon cas, cela a été fait comme suit.

Sur le périphérique de capture vidéo:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
  • La partie "-f video4linux2 -standard ntsc -i/dev/video0" qui peut changer en fonction de votre source d'entrée (la mienne est pour une carte de capture vidéo).

Extrait pertinent de ffserver.conf:

Port 8090
#BindAddress <server_ip>
MaxHTTPConnections 2000
MAXClients 100
MaxBandwidth 1000000
CustomLog /var/log/ffserver
NoDaemon

<Feed 0.ffm>
File /tmp/0.ffm
FileMaxSize 5M
ACL allow <feeder_ip>
</Feed>
<Feed 0_webm.ffm>
File /tmp/0_webm.ffm
FileMaxSize 5M
ACL allow localhost
</Feed>

<Stream 0.mpg>
Feed 0.ffm
Format mpeg1video
NoAudio
VideoFrameRate 25
VideoBitRate 256
VideoSize cif
VideoBufferSize 40
VideoGopSize 12
</Stream>
<Stream 0.webm>
Feed 0_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 320x240
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate 500K
</Stream>

<Stream index.html>
Format status
ACL allow <client_low_ip> <client_high_ip>
</Stream>
  • Notez que ceci est configuré pour un serveur à feeder_ip pour exécuter la commande ffmpeg susmentionnée, et pour le serveur à server_ip afin que le serveur vers client_low_ip via client_high_ip tout en gérant la conversation mpeg vers webm sur server_ip (suite ci-dessous).

Cette commande ffmpeg est exécutée sur la machine précédemment appelée server_ip (elle gère la conversion mpeg -> webm réelle et la renvoie dans le ffserver sur un flux différent):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm

Une fois que ceux-ci ont tous été démarrés (d'abord le serveur ff, puis le processus ffmpeg feeder_ip puis le processus ffmpeg server_ip), vous devriez pouvoir accéder au flux en direct sur http: //: 8090/0.webm et vérifier l'état sur http : //: 8090 /

J'espère que cela t'aides.

5
CoryG

ffmpeg -i input.mp4 -c: v libvpx -crf 10 -b: v 1M -c: une sortie libvorbis.webm

Par défaut, la valeur CRF peut être comprise entre 4 et 63, et 10 est un bon point de départ. Des valeurs plus faibles signifient une meilleure qualité.

Pour Linux: Le logiciel open source disponible pour utiliser les codecs vp8 et vp9 pour linux est Arista pour le bureau gnome. Google: Arista Transcoder

Pour Windows et Linux: Miro Video Converter est également gratuit et open source avec une interface graphique très lisse. Vous pouvez le vérifier sur: Google: mirovideoconverter

FFMPEG est un outil en ligne de commande et je l'ai trouvé le plus à jour pour suivre le projet webmd. N'oubliez pas de regarder les options d'encodage vp8 fournies par le site webmproject https://sites.google.com/a/ webmproject.org/wiki/ffmpeg . Vous devriez également jeter un œil au Guide d'encodage VPX: https://trac.ffmpeg.org/wiki/vpxEncodingGuide

Un autre poste mentionné vpxenc.exe Cependant, vpxenc.exe doit être compilé par source.

Exemple d'utilisation de FFMEG: Remplacez {NPUT} et {OUTPUT} à l'emplacement du fichier. Sur Windows 7, je devais utiliser le Power Shell (Démarrer> Accessoires> Windows Power Shell> Power Shell) et fournir l'emplacement complet pour ffmpeg, entrée et sortie. Notez le paramètre - vcodec libvpx utilise VP8 par défaut. Pour utiliser VP9, ​​remplacez par - vcodec libvpx-vp9

WedmbSD

ffmeg.exe -i {INPUT} -s hd480 -vcodec libvpx -g 120 -lag-in-frames 16 -deadline good -cpu-used 0 -vprofile 0 -qmax 63 -qmin 0 -b:v 768k -acodec libvorbis -ab 112k -ar 44100 -f webm {OUTPUT}
3
Diaz

FFmpeg. MP4 à WebM. Pour avoir la synchronisation des lèvres et de haute qualité

$ ffmpeg -i input.mp4 -b:v 1M -q:v 10 -vcodec libvpx -acodec libvorbis output.webm
ffmpeg version 2.8.6-1ubuntu2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.1 (Ubuntu 5.3.1-11ubuntu1) 20160311
  configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SPBFRE_01.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2015-05-29 14:49:20
  Duration: 00:01:41.61, start: 0.000000, bitrate: 9452 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 9132 kb/s, 50 fps, 50 tbr, 50k tbn, 100 tbc (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : ?Mainconcept Video Media Handler
      encoder         : AVC Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : #Mainconcept MP4 Sound Media Handler
File 'output.webm' already exists. Overwrite ? [y/N] y
[libvpx @ 0x132af40] v1.5.0
Output #0, webm, to 'output.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    encoder         : Lavf56.40.101
    Stream #0:0(eng): Video: vp8 (libvpx), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 1000 kb/s, 50 fps, 1k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : ?Mainconcept Video Media Handler
      encoder         : Lavc56.60.100 libvpx
    Stream #0:1(eng): Audio: vorbis (libvorbis), 44100 Hz, stereo, fltp (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : #Mainconcept MP4 Sound Media Handler
      encoder         : Lavc56.60.100 libvorbis
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp8 (libvpx))
  Stream #0:1 -> #0:1 (aac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
frame=  755 fps= 10 q=0.0 size=    1987kB time=00:00:15.12 bitrate=1076.5kbits/s 
2
YumYumYum

MiroVideoConverter est un wrapper multiplateforme et open source Nice autour de ffmpeg, qui, en particulier, prend en charge la conversion en WebM.

2
Nickolay

Je ne savais pas si ma copie de FFMPEG prend en charge WebM, j'ai donc d'abord converti ma vidéo MPEG4 en vidéo brute à l'aide de FFMPEG.

J'ai ensuite utilisé le vpxenc.exe fourni avec le SDK du projet WebM pour le convertir en WebM.

Lien vers le téléchargement du SDK: http://code.google.com/p/webm/downloads/list

Téléchargez, extrayez et regardez dans le dossier "bin". Il y a quelques exemples d'applications là-bas. Un décodeur est également fourni.

Commande que j'ai utilisée pour convertir une vidéo brute en WebM:

vpxenc.exe -w 720 -h 480 --rt -o v1.webm v1.yuv

HTH

1
Kapil Pendse

Essayez-le avec avconv:

avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm
0
Aftershock