[TUTO] encodage video avec ffmpeg - ffmpeg for dummies

encodage video avec ffmpeg - ffmpeg for dummies [TUTO] - Traitement Vidéo - Video & Son

Marsh Posté le 28-10-2019 à 11:16:02    

https://trac.ffmpeg.org/ffmpeg-logo.png
 
Presentation Generale
ffmpeg est un soft open source (GPL) qui peut encoder et decoder des flux videos et audio sur de tres nombreux formats, la liste est impressionnante ( https://en.wikipedia.org/wiki/FFmpeg#Supported_formats ou encore https://ffmpeg.org/general.html#Sup [...] -Features)
Il y a egalement un support de mux, c'est a dire que il peut (de)multiplexer des flux audio, video, et sous titres, ensemble (ou les separer). A ces mux sont associes des formats, les plus connus etant AVI, MKV, ISO, … que supporte egalement ffmpeg (cf lien ci-dessus)
Egalement des filtres sur une echelle tres large, allant du simple equalizer audio en passant par des resampling audio ou video  
https://en.wikipedia.org/wiki/FFmpeg#Supported_filters ou encore https://ffmpeg.org/ffmpeg-filters.html
De maniere generale, pour aborder ffmpeg en details et retrouver ses petits, cette page est un bon point d'entrée / reference documentaire (options, filtres, etc).  
https://ffmpeg.org/documentation.html
 
 
Recuperer ffmpeg  
Il existe le repo officiel sur git, des builds linux mac et windows, les sources, et des builds complementaires.  
https://ffmpeg.org/download.html
En source de build complementaire, celui ci inclue les librairies d'acceleration GPU de nvidia: (j'en parle plus bas un peu en details)
http://ffmpeg.zeranoe.com/builds  
Les plus curieux peuvent aller lire l'application note de Nvidia sur l'utilisation de ffmepg avec l'acceleration HW des GPU (necessite un login Nvidia, gratuit)
https://developer.nvidia.com/design [...] ration-pdf
 
 
Utiliser ffmpeg
Utiliser la ligne de commande de ffmpeg est au premier abord un peu brutal (d'ou ce tuto :D), d'ou pas mal de personnes se tournant vers des GUI, ou certes il faut cliquer au lieu de taper une ligne de commande, mais avec une comprehension sur les actions entreprises pas si aboutie.
A noter un point tres con, si on n'a pas ffmpeg dans son path, le plus simple est de le copier dans le directiory de la video a encoder, mais Powershell a malgre tout parfois du mal a le trouver. Il suffit donc de lui demander de le chercher ... dans le repertoire courant, ce qui se fait en remplacant ffmpeg par .\ffmpeg dans tous les exemples de lignes de commandes ci dessous.
Malgre tout on trouve sur les forums beaucoup de questions pour trouver une ligne de commande magique pour encoder une video+audio aux bons formats, avec les bons params de qualite, de vitesse d'encodage, la bonne resolution, etc.
Dans ce post je ne traiterai que les options classiques pour encoder en H264 et H265/hevc, vu que ce sont les principaux codecs du moment. H264 commence à être dépassé, mais c'est l'écrasante majorité des contenus disponibles, et les decodeurs hardware supportent beaucoup plus facilement h264 que h265.  
 
Encodage H264

Citation :


ffmpeg -i video.mp4 -c:v libx264 output.mp4


 
Gestion qualite video http://trac.ffmpeg.org/wiki/Encode/H.264#crf
Pour gerer la taille du fichier et sa qualite video, un parametre est tres souvent utilise, le -crf (constant rate factor).  
Crf 0 correspond a aucune perte,. Mais la taille est gigantesque. 51 est le plus compact, et evidemment le moins acceptable visuellement. L'optimal se situe entre 18 et 23, et est donc recommandé. LE codec se charge alors d'adapter le bitrate en fonction du contenu video et de la valeur de crf. A noter monter le crf de 6 revient a diviser la taille de la video par 2. A noter que cette echelle est valide pour du contenu 8 bits. Pour le contenu 10 bits nettement plus rare, il faut utiliser une echelle de 0 a 61.  
Exemple:

Citation :


ffmpeg -i video.mp4 -c:v libx264 -crf 21 output.mp4


 
Qualite de l'encodage http://trac.ffmpeg.org/wiki/Encode/H.264#Preset
Un autre parametre est souvent utilise pour gerer la qualite de l'encodage, le preset . La regle est simplissime, plus l'encodage est lent, meilleur est son resultat pour un bitrate donné.  
Par defaut sans renseigner ce parametre la valeur medium est utilisee. Elle peut varier de Ultrafast a veryslow. J;'aime bien cette recommandation : utilisez le setting le plus lent que votre patience vous permet.  
 
Tuning en fonction du contenu http://trac.ffmpeg.org/wiki/Encode/H.264#Preset
Il est possible de renseigner au codec le type de video, du slide show d'images -stillimage- , au bon vieux classic en noir et blanc -grain-.  
En pratique je n'ai pas beaucoup utilise ce parametre.  
 
Exemple h264 avec ces differents elements:

Citation :


ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv


A noter le -c:a copy qui specifie une simple copie du stream audio.  
 
2 pass encoding
Il est possible, notamment a des buts de mieux controller le bitrate, de proceder a un encodage en deux passes. Les tests montrent que maintenant utiliser un crf21 et un preset slow suffit a obtenir des resultats visuellement comparables. Reste a l'encodage deux passes un meilleur controle du debit donc de la taille finale du fichier.  Au vu de la lenteur du process on peut faire deux passes en slow :P ca peut valoir le coup de se poser la question, si c'est bien necessaire.  
Ca se lance comme ca:
En pratique on lance donc deux fois a la suite ffmpeg, avec pratiquement les memes settings, sauf les suivants:
 • Sur les pass 1 et 2, utiliser -pass 1 and -pass 2 respectivement.
 • Sur la pass 1 la sortie est un null file descriptor, et pas un fichier. (ca genere en fait un log file logfile que ffmpeg utilise sur la pass 2)
 • Sur la pass 1 on doit specifier le format de sortie (-f) qui correspond au format de sortie de la pass 2.
 • Sur la pass 1, on peut ne pas s'occuper de l'audio, avec l'option -an.
 • Sur vous fonctionnez sous linux la fin de la pass 1 est a changer = Au lieu de NUL utiliser /dev/null et le " \" remplace le "^".  

Citation :


ffmpeg -y -i input -c:v libx264 -b:v 2600k -pass 1 -an -f mp4 NUL && ^
ffmpeg -i input -c:v libx264 -b:v 2600k -pass 2 -c:a aac -b:a 128k output.mp4


 
 
Resize - Rescale https://ffmpeg.org/ffmpeg-filters.html#scale
ffmpeg est capable de faire des scalings tres avances. Le lien ci-dessus en donne une version très detaillee, je vous presente ici juste les bases
La ligne de commande ci-dessous fait un simple rescale en 320:240

Citation :


ffmpeg -i input.avi -vf scale=320:240 output.avi


 
Ca peut etre utile de ne pas se taper le calcul de l'aspect ration, auquel cas vous pouvez utiliser -1 pour la seconde dimension

Citation :


ffmpeg -i input.jpg -vf scale=320:-1 output_320.png


 
Edit 15-02-2024 = je me suis rendu compte sur certaines videos qua la qualite du resize pouvait etre catastrophique. Ca semble du a deux facteurs: methode de resize au nearest pixel, et encodage rapide de la video mais avec des parametres crados  [:cerveau pouah]  
Je l'ai resolu en selectionnant un filtre de resize plus elaboré (Lanzcos, il y en a d'autres... ) et en specifiant la qualité d'encodage explicitement (a vous de mettre la votre :) ).
 

Citation :


ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -vf scale=1068:600:flags=lanczos output.avi


 
Extraire une partie de la video uniquement
le principe est de "chercher une position, puis de faire une copie sur une duree donnée
-ss permet de chercher le timestamp
-t specifie la duree de la copie (a partir du timestamp)
Le timestamp est au format HH:MM:SS.xxx ou on peut mettre aussi une duree en secondes (s.msec)
 
La on saute les premières 30 secondes, puis on extrait juste 10 secondes de video  
 

Citation :

ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 10.0 output.wmv


 
 
Recompression et manipulations audio https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio
Ffmpeg a des librairies qui permettent la compression audio, aac, lame/mp3, vorbis…  
Les fameuses libs audio possibles:
Dolby Digital: ac3
Dolby Digital Plus: eac3
MP2: libtwolame, mp2
Windows Media Audio 1: wmav1
Windows Media Audio 2: wmav2
AAC LC: libfdk_aac, aac (<https://trac.ffmpeg.org/wiki/Encode/AAC> )
HE-AAC: libfdk_aac
Vorbis: libvorbis, vorbis
MP3: libmp3lame, libshine
Opus: libopus
 
Un exemple d'encodage aac a 128k, avec copie simple du flux video (a remplacer par vos options video favorites, cf plus haut):

Citation :


ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 128k output.mp4


 
Les encodages vbr sont egalement supportes: (attention les options dependent evidemment des librairies utilisees)

Citation :


ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -vbr 3 output.mp4


 
Convertion video libx264, et downmix de l'audio sur deux voies (stereo):

Citation :


ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset:v veryfast -ac 2 -c:a libfdk_aac -vbr 3 output.mp4


 
 
Manipulation et Selection des flux audio  
Sur ce point il y a au moins deux grands themes = manipuler les channels audio d'un seul flux video, par exemple passer du 5.1 a un flux stereo, ou de stereo a mono…etc tout ca a l'interieur d'un seul flux video. Les options sont detaillees ici https://trac.ffmpeg.org/wiki/AudioChannelManipulation
Le plus classique est le downmix 5.1 vers stereo qui se lance comme ca:

Citation :


ffmpeg -i 6channels.wav -ac 2 stereo.wav


Le deuxieme theme est la selection de flux audio au sein d'une video, par exemple quand vous avez un flux audio VOST et un flux VF, vous pouvez vouloir retirer un des flux, ce qui peut representer une grosse reduction de la taille du fichier final, par exemple si le flux retirer est un flux DTS 5.1 a 1500Kbit/s.  
<https://ffmpeg.org/ffmpeg.html#Stream-selection> et https://trac.ffmpeg.org/wiki/Map  
 

Citation :


ffmpeg -I input.mp4  


vous donne la liste des flux video et audio.  
 
Si un fichier a les flux suivants: (exemple integralement repris de  https://trac.ffmpeg.org/wiki/Map> )

Citation :


 fmpeg -i input.mkv
ffmpeg version ... Copyright (c) 2000-2012 the FFmpeg developers
...
Input #0, matroska,webm, from 'input.mkv':
  Duration: 01:39:44.02, start: 0.000000, bitrate: 5793 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1920x800, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1(ger): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s (default)
    Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s
    Stream #0:3(ger): Subtitle: text (default)
At least one output file must be specified


 
Alors pour :
 • copier le flux video  
 • encoder le flux audio Allemand en mp3 (128kbps) et aac (96kbps) (donc creer 2 audio streams sur l'output)
 • Retirer le flux audio anglais  
 • Copier le flus de sous titres  
Il faut lancer la commande suivante:
 

Citation :

ffmpeg -i input.mkv \
    -map 0:0 -map 0:1 -map 0:1 -map 0:3 \
    -c:v copy \
    -c:a:0 libmp3lame -b:a:0 128k \
    -c:a:1 libfaac -b:a:1 96k \
    -c:s copy \
    output.mkv


 
A partir de cet exemple je pense que vous pouvez tisser les differentes solutions possibles pour l'extraction des flux qui vous interessent. Il y a des modes audio de selection, mais je pense que le plus simple est de faire son marche a la main.  
 
Edit 18-09-2022: Exemple plus simple, je viens de lutter 20 minutes pour virer 2 flux audio et des sous titres:  
 
Le fichier initial a 1 flux video, 3 streams audio, et 2 streams de sous titres.  
Je veux ne recuperer que le flux video, et le troisieme flux audio, le reste ne m'interesse pas.  
La commande map donne le "menu" de la selection, ensuite il faut dire quoi faire avec les flux:  
- copie pour la video  
- encodage audio pour le flux audio, car dans le fichier original il etait en flac, ce que certains decodeurs n'aiment pas trop. Je ne specifie rien, je pense que ffmpeg encode simplement au format par defaut (aac128 / 48KHz pour le mp4).  
 

Citation :

ffmpeg -i input.mkv -map 0:v  -map 0:a:2 -c:v copy output.mp4


 
 
Encodage H265 https://trac.ffmpeg.org/wiki/Encode/H.265
Un gros atout de ffmpeg est le support des librairies h265/HEVC a travers le support de x265 (http://x265.org/)
H265 apporte des taux de compression largement meilleurs a qualite equivalente, la principale proposition "commerciale" du h265 etant la meme qualite video pour 50% de moins en taille de fichier. Une simple recherche h265 vs h264 vous donnera une tonne de papiers et etudes plus ou moins poussees pour expliquer les deltas, pour les curieux. En pratique on constate une amelioration de 20 a 50% en effet, en fonction des contenus video. LE temps d'encodage est beaucoupo plus long en H265, et le decodage h265 demande aussi pas mal de CPU, en plus d'etre moins facilement supporte par les differentes plateformes (seul chromecast ultra le supporte, ainsi que les dernieres versions de raspberry 3b+ et 4).
Les options sont proches de l'encodage h264, avec quelques nuances. Les encodages 1 et 2 passes sont toujours possibles. On peut specifier le bitrate  ( -b:v  ) , ou le quantifieur crf, ce qui est plus pratique car indique directement une qualite donnee. Difference avec h264 le crf qui vise une qualite vs bitrate optimale n'est plus de 21 mais de 28. Les memes preset existent, medium reste l'option par defaut, slow ameliorant la qualite audio au prix d'un temps d'encoadge plus long et de plus de RAM utilisee a l'encodage.  
Exemple:  

Citation :

 
ffmpeg -i input -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k output.mp4


 
 
Utilisation Acceleration HW GPU Nvidia
Ffmpeg peut etre builde avec les librairies necessaire pour encodage CUDA par le GPU. Nvidia a publie un guide sur son blog ( https://devblogs.nvidia.com/nvidia- [...] ing-guide/ ) ainsi que un papier asssez complet https://developer.download.nvidia.c [...] v01.4.pdf? , sur comment decoder et encoder en HW en utilisant le GPU.  
Ce sujet reste assez discute, car  
 - On y gagne tres fortement en vitesse d'encodage, c'est particulierement spectaculaire en h264, mais aussi en h265. (qques chiffes plus bas)  
 - La qualite video semble degradee quand on accelere avec le GPU, les libraires d'acceleration fournissent moins d'options, et le support de certaines options en h265 est en cours d'ajout par nvidia sur leur encodeur HW. (see https://developer.nvidia.com/video- [...] rt-matrix)
 - l'encodage GPU semble clairement plus econome en watts, pour ceux qui surveillent leur conso electrique
 
Chiffres: Sur i7 7700k avec 16GB de RAM et un nvme de compette, en sw/cpu intel, reglage preset slow, - crf 28, je fais du 0. 4x sur une video full hd h264 a encoder en h265 (copie directe du flux audio).
Quand j'active l'accélération hw gpu (gtx980), je passe a environ 6x de vitesse d'encodage sur le meme flux vidéo. La différence de temps est énorme ! Le fait d'activer le decodage en hw par le gpu ne change rien sur ma machine. A noter que la qualité d'encodage en hw est nettement en dessous de l'encodage sw, dans les scènes rapides et dense, les yeux sensibles repereront l'apparition de macro blocs..
La ligne de commande suivante force :
- le decodage HW h264 -hwaccel cuvid -c:v h264_cuvid -i 'input.mkv'
- et l'encodage HW en h265 en utilisant le codec video -c:v hevc_nvenc
- copie simple du flux audio
- A noter l'option -crf n'est pas supportee par hevc_nvenc  

Citation :


ffmpeg  -hwaccel cuvid -c:v h264_cuvid -i 'input.mkv' -c:v hevc_nvenc -preset slow -c:a copy 'output.mkv'


idem avec du H264:
- le decodage HW h264 -hwaccel cuvid -c:v h264_cuvid -i 'input.mkv'
- l'encodage HW en h264 en utilisant le codec video -c:v h264_nvenc  
- copie simple du flux audio

Citation :


ffmpeg  -hwaccel cuvid -c:v h264_cuvid -i 'input.mkv' -c:v h264_nvenc -preset slow -c:a copy 'output.mkv'


 
Et voici une ligne plus complete, pour pouvoir regler un peu plus des settings de qualité video, selon le papier Nvidia:
 

Citation :


./ffmpeg -y -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:a copy -c:v h264_nvenc -preset slow -profile:v high -b:v 5M -bufsize 5M -maxrate 10M -qmin 0 -g 250 -bf 2 -temporal-aq 1 -rc-lookahead 20 -i_qfactor 0.75 -b_qfactor 1.1 output.avi


 
Il y a pas mal de lecture si on veut sur l'encodage GPU, perso j'aime bien ce commentaire qui ouvre plusieurs portes, pour ceux que ca interesse:
Cf reponse de destiny_functional
https://www.reddit.com/r/ffmpeg/com [...] ality/&gt;  
 
PS: si des solutions existent avec des GPU AMD, je serai tres content de les ajouter !
 
Bon encodage a tous
 
Edit 14-02-2024
besoin de faire une mosaique pour un projet specifique. Ca se fait comme ca (exemple pour 3 videos, mais il peut y avoir d'autres logiques)
Je rajoute en fin de commande la qualite de la video pour etre sur d'avoir un contenu correct (-c:v libx264 -preset slow -crf 22  )

Citation :


ffmpeg -i left.avi -i center.avi -i right.avi -filter_complex "[0:v][1:v][2:v]hstack=inputs=3[v]" -map "[v]" -c:v libx264 -preset slow -crf 22  Mosaic.avi


 
Plus d'options ici, je trouve ces solutions plus digestes que la page ffmpeg
https://stackoverflow.com/questions [...] ing-ffmpeg
 
Et Pour le crop sur une video en entree de 800*600, on peut extraire le carré droit (puis gauche) de la maniere suivante:
crop=SizeX:SizeY:StartPointX:StartPointY
 

Citation :


ffmpeg -i input.avi  -c:v libx264 -preset slow -crf 22 -vf "crop=400:600:0:0" OutputLeft.avi
ffmpeg -i input.avi  -c:v libx264 -preset slow -crf 22 -vf "crop=400:600:400:0" OutputRight.avi


 
plus d'explications ici
https://video.stackexchange.com/que [...] ith-ffmpeg


Message édité par ManuLM le 14-02-2024 à 14:52:50
Reply

Marsh Posté le 28-10-2019 à 11:16:02   

Reply

Marsh Posté le 28-10-2019 à 11:16:40    

petite update pour booster l'audio d'une video:

 

Etape 1) mesurer son niveau avec le filtre audio volumedetect

 
Citation :

ffmpeg -i inputvideo.mp4 -filter:a volumedetect -f null /dev/null

 

ca renvoie ce genre d'infos:

 
Citation :


[Parsed_volumedetect_0 @ 000002686ab93c40] n_samples: 151165440
[Parsed_volumedetect_0 @ 000002686ab93c40] mean_volume: -38.7 dB
[Parsed_volumedetect_0 @ 000002686ab93c40] max_volume: -8.0 dB
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_8db: 34
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_9db: 131
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_10db: 359
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_11db: 850
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_12db: 2024
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_13db: 5281
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_14db: 10715
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_15db: 18202
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_16db: 28941
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_17db: 44511
[Parsed_volumedetect_0 @ 000002686ab93c40] histogram_18db: 66780

 

On voit que si on booste de 10dB, on ne sature quasiment pas d'echantillons audio, donc ca passe.

 

Etape 2) On peut corriger ensuite avec le filtre audio volume

 
Citation :

ffmpeg -i input.avi -filter:a "volume=10dB" output.avi


Message édité par ManuLM le 14-10-2020 à 22:31:18
Reply

Marsh Posté le 04-11-2019 à 19:07:59    

Sacré taf  [:implosion du tibia]  
 
Petite coquille
 

Citation :

Encodage H265
Un gros atout de ffmpeg est le support des librairies h265/HEVC a travers le support de x265 (http://x265.org/)
H265 apporte des taux de compression largement meilleurs a qualite equivalente, la principale proposition "commerciale" du h265 etant la meme qualite video pour 50% de moins en taille de fichier. Une simple recherche h265 vs h264 vous donnera une tonne de papiers et etudes plus ou moins poussees pour expliquer les deltas, pour les curieux. En pratique on constate une amelioration de 20 a 50% en effet, en fonction des contenus video. LE temps d'encodage est beaucoupo plus long en H265, et le decodage h625 demande aussi pas mal de CPU


---------------
Partage d'abonnement (netflix, disney, spotify, xbox...) = > https://splii.it/1672932592 (parrainage = 1 euro !)
Reply

Marsh Posté le 05-11-2019 à 09:29:43    

Merci :)
typo fixed.
En fait je me suis fait plusieurs fois des pense bete ffmpeg, mais a chaque fois je les perds, ou alors ils sont partiels, alors que la sur le forum je sais le retrouver, et si en plus ca peut aider ceux qui veulent s'y pencher, alors c cool  [:kimouss]


Message édité par ManuLM le 05-11-2019 à 09:30:07
Reply

Marsh Posté le 05-11-2019 à 09:32:02    

et en cadeau bonux j'aimerais que qqun teste la qualite de l'encodage HW sur Turing TU104, pour voir si l'amelioration est reelle ou juste marketing

Reply

Marsh Posté le 07-12-2019 à 21:24:37    

petite mise a jour avec les options d'encodage HW pour H264 sur GPU Nvidia :)

Reply

Marsh Posté le 22-12-2019 à 20:20:45    

:hello:  
Perso j'ai testé trois sorte de GPU en encodage GPU h264.
La seule qui ma permis de gagner 2' sur un encodage c'est la gtx 1080 ti.
La gtx 980 ti moins rapide que ma gtx 980 8go desktop en mxm dans un clévo.
Une RTX 2070 super moins rapide aussi.
Une gtx 1060 3 go largué total.  
A voir sur une 2080 ti mais je suis pas prêt de tester ça.
Conclusion la 1080 ti les écrase toutes.


---------------
Vivement l'immortalité puis l'invisibilité et la perfection du corps hors cosmique le O parfait; "citation de OMER l'ESPRIT invisible à MÉDITER" A.V.F: http://forum.hardware.fr/hfr/Achat [...] 1.htm#haut
Reply

Marsh Posté le 23-12-2019 à 10:18:14    

Salut,
Merci pour les infos.
Attention car la génération rtx est plus avancée en qualité d'encodage que les précédentes... Ca ralenti peut être l'encodage. Et de ce que j'ai compris, nvidia ne cherche pas la vitesse max, mais juste le fait de pouvoir encoder a la volée.
Ca serait intéressant que tu fasses des arrêts sur image de scènes chargées et sombres, pour comparer entre les cartes la qualité vidéo.
A+

Reply

Marsh Posté le 23-12-2019 à 15:18:29    

:hello:  
Je n'ai plus que mon clévo avec ma 980.
J'ai tout revendu trois config au total, j'ai perdu quelques dizaines d'euro au passage, mais maintenant je sait.
Mon avis autan prendre un gros cpu genre ryzen 3970X voir 3990X (7000€) avec une petite gtx 780 ti (80€)  
Çà suffit amplement pour parer a tous les besoins.


---------------
Vivement l'immortalité puis l'invisibilité et la perfection du corps hors cosmique le O parfait; "citation de OMER l'ESPRIT invisible à MÉDITER" A.V.F: http://forum.hardware.fr/hfr/Achat [...] 1.htm#haut
Reply

Marsh Posté le 17-07-2020 à 15:21:15    

Salut,
 
C'est une bonne idée ce topic !
Voici ma contribution.
 
Pour uploader des vidéos sur les sites webs, je préfère utiliser H264 et AAC en Full HD, donc jusqu'ici j'étais assez satisfait des paramètres suivants:

ffmpeg -i <input> -vf scale=-1:1080 -acodec aac -vcodec libx264 -r 25 -preset veryslow -map_metadata 0 -y <output>


 
Cependant à la lecture de ce post :
https://superuser.com/questions/490 [...] 72#1259172
Je me demande si je ne vais pas plutôt utiliser "veryfast" au lieu de "veryslow". Un avis sur la question ?
 
D'autre part j'ai Linux et un CPU Intel Skylake, et je voulais voir si je pouvais utiliser le décodage et l'encodage avec accélération matérielle.
C'est possible avec la ligne de commande suivante :

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i <input> -vf 'scale_vaapi=w=-1:h=1080' -acodec aac -vcodec h264_vaapi -r 25 -map_metadata 0 -y <output>


Mais malheureusement les presets ne sont pas disponibles avec l'encodeur h264_vaapi :

Citation :

No CRF-like mode is currently supported. The only constant-quality mode is CQP (constant quantisation parameter), which has no adaptivity to scene content. It does, however, allow different quality settings for different frame types, to improve compression by spending fewer bits on unreferenced B-frames - see the (i|b)_q(factor|offset) options. CQP mode cannot be combined with a maximum bitrate or buffer size.
 
CBR and VBR modes are supported, though the output of them varies significantly by driver and device (default is VBR, set -maxrate equal to -b:v for CBR). HRD buffering options (rc_max_rate, rc_buffer_size) are functional, and the encoder will generate buffering_period and pic_timing SEI when appropriate.
 
There is no complete analogue of the -preset option. The -compression_level option controls the local speed/quality tradeoff in the encoder (that is, the amount of effort expended on trying to get the best results from local choices like motion estimation and mode decision), using a nebulous per-device scale. The argument is a small integer, from 1 up to some limit dependent on the device (not more than 7) - higher values are faster / lower stream quality. Separately, some hardware (Intel gen9) supports a low-power mode with more restricted features. It is accessible via the -low_power option.
 
Neither two-pass encoding nor lookahead are supported at all - only local rate control is possible. VBR mode should do a reasonably good job at getting close to an overall bitrate target, but quality will vary significantly through a stream if the complexity varies.


 
Du coup je dois manuellement spécifier le bitrate au doigt mouillé :

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i <input> -vf 'scale_vaapi=w=-1:h=1080' -acodec aac -vcodec h264_vaapi -r 25  -b:v 6M -map_metadata 0 -y <output>


Mais je ne suis pas très convaincu par le résultat par rapport au preset libx264 veryfast. Par contre c'est beaucoup plus rapide grâce à l'accélération matérielle.
Je serais ravi d'échanger sur le sujet s'il y a d'autres utilisateur de ffmpeg avec Intel.
 
Note : je n'ai pas utilisé le QuickSync d'Intel pour tenter d'encoder avec le GPU d'Intel car cela me semble encore un peu la bidouille sous Linux

Reply

Marsh Posté le 17-07-2020 à 15:21:15   

Reply

Marsh Posté le 18-07-2020 à 11:10:25    

Salut,  
merci de ton post.  
pour ta question, la FAQ est assez claire sur les preset:  
A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize). This means that, for example, if you target a certain file size or constant bit rate, you will achieve better quality with a slower preset. Similarly, for constant quality encoding, you will simply save bitrate by choosing a slower preset.
 
Le scoring du post que tu cites concerne uniquement un ratio vitesse d'encodage / taille de la video, mais oublie pour  moi le plus important, a savoir la qualite video !  
Perso je passe tout en H265 des que je peux, car ma TV sait le decoder, et ca apporte le meilleur ratio taille vs qualité.  
 
Par contre en effet je n'ai jamais exploré les options d'acceleration HW intel (et pourtant je suis en skylake egalement). Dommage ceci dit que ca ne supporte pas de CRF like...  
Tu obtiens quels resultats de vitesse d'encodage avec /sans?

Reply

Marsh Posté le 18-07-2020 à 21:31:56    

Je croyais que justement la qualité vidéo était représentée par le facteur CRF ?
Dans le post que j'ai donné en lien, les comparaisons se font à CRF égal.
 
J'utilise h264 car j'uploade ensuite sur une page web, et pour être lisible par tout le monde, il faut du h264.
 
Sinon entre libx264 veryfast et h264_vaapi j'ai un facteur 6 en faveur de h264_vaapi.

Reply

Marsh Posté le 19-07-2020 à 11:39:11    

Le CRF est un facteur qui gere un niveau de compromis taille / qualite, et s'adapte en fonction de la scene, augmentant le bitrate sur des scenes completes et se refaisant sur des scenes plus simples, ou tres proches de l'image precedente.
Le preset de vitesse gere un compromis vitesse d'encodage / qualite video. cf cette table etablie sur du H264 sur un Xeon qui demontre l'effet:
https://cdn.write.corbpie.com/wp-content/uploads/2019/01/ffmpeg-x264-preset-comparison-table-2019.png
(source https://write.corbpie.com/ffmpeg-pr [...] ile-size/)
Tu gères donc un niveau de qualite video avec le CRF, et ensuite tu geres le temps d'encodage. Si tu es patient (ou si tu as un encodeur rapide :) ) vaut mieux encoder en slow, a qualite identique tu auras un fichier plus petit. Vu les vitesses d'encodage en H264, ca vaut le coup car le H264 prend pas mal de place quand meme.
Note que cette remarque s'applique a des implementations completes de FFmpeg donc SW, car dans les implementations HW (nvidia, intel GPU), il semblerait que le CRF ne soit typiquement dispo, ce qui t'impose de gerer directement le bitrate, ce qui est moins pratique que le CRF qui fait le taf pour toi.

 

Je vois egalement dans ta ligne de commande que tu utilises un decodeur HW pour la lecture. Dans mes tests, ca n'avait aucun incidence sur la vitesse globale. Egalement, la plupart du temps je ne fais pas de resize sur mes videos, car ca introduit generalement une (legere) degradation de la video et ca coute en temps de calcul.

 

Pour le ration 6x, c'est en effet interessant! JE n'avais pas note mes vitesses d'encodage en H264 car je suis plutot sur du H265, maisi je crois me souvenir que meme le CPU intel encode tres vite.

 


Message édité par ManuLM le 19-07-2020 à 11:39:25
Reply

Marsh Posté le 19-07-2020 à 14:39:54    

Mais justement dans le post donné en lien, ce qui est bizarre c'est que veryfast fait presque aussi bien que veryslow, à CRF égal (donc avec la même qualité finale). La taille du fichier généré est pratiquement identique.
 
Sinon je normalise toute mes vidéos en Full HD, car je filme en 4k et je publie sur internet. Quand j'avais fait quelques tests, le Full HD passait beaucoup mieux pour les utilisateurs.
Mais je garde toujours le fichier original pour passer en 4k h265 quand ce sera mieux supporté.
 
Vraiment dommage que les encodeurs avec accélération materielle soit so bridées avec ffmpeg. Cela enlève beaucoup d'intérêt.

Reply

Marsh Posté le 19-07-2020 à 15:38:31    

desktop_ready a écrit :

Mais justement dans le post donné en lien, ce qui est bizarre c'est que veryfast fait presque aussi bien que veryslow, à CRF égal (donc avec la même qualité finale). La taille du fichier généré est pratiquement identique.
 
Sinon je normalise toute mes vidéos en Full HD, car je filme en 4k et je publie sur internet. Quand j'avais fait quelques tests, le Full HD passait beaucoup mieux pour les utilisateurs.
Mais je garde toujours le fichier original pour passer en 4k h265 quand ce sera mieux supporté.
 
Vraiment dommage que les encodeurs avec accélération materielle soit so bridées avec ffmpeg. Cela enlève beaucoup d'intérêt.


 
 
le CRF ET le preset influent tous les deux sur la qualite video. Essaie les deux sur une petite video en taille, et compare les images fixes sur des scenes de mouvement, idealement avec du sombre. La difference devrait etre importante

Reply

Marsh Posté le 20-07-2020 à 16:16:03    

je viens de faire des tests entre CPU SW pur et GPU (je viens de passer sur RTX2070) sur du FHD 30fps:
- 0.7x sur I6700k
- 8.3x sur RTX2070
impressionnant la différence ...

 

ET
Rajout en fin de 1er post d'une ligne de commande pour HW acceleration Nvidia avec des settings de qualite

  


Message édité par ManuLM le 20-07-2020 à 16:38:11
Reply

Marsh Posté le 14-10-2020 à 22:22:22    

rajout d'une procedure pour reajuster le volume d'une video en post #2


Message édité par ManuLM le 14-10-2020 à 22:31:36
Reply

Marsh Posté le 24-05-2021 à 13:51:32    

:bounce: UP pour ce topic d'utilité generale.


---------------
"Première fois de ma vie que je te vois mais tu m'as l'air d'un sacré tocard !"
Reply

Marsh Posté le 24-05-2021 à 14:53:48    

vandit a écrit :

:bounce: UP pour ce topic d'utilité generale.


N'hésite pas à poster ici ta mésaventure résolue  :)

Reply

Marsh Posté le 18-02-2022 à 13:26:38    

ajout d'un example simple de decoupage video

Reply

Marsh Posté le 13-05-2022 à 10:17:12    

Salut,
 
Je tente de merge des morceaux de vidéos avec ffmpeg.
 
 

Code :
  1. ffmpeg \
  2.   -i 1.webm \
  3.   -i 2.webm \
  4.   -filter_complex \
  5.   "[0][1]concat=n=2:v=1:a=0" \
  6.   out.mkv


 
Mais quans je lis avec VLC j'ai des "timestamp errors" de partout et la barre de slide temporel déconne à fond.
 
Si quelqu'un à une solution.
 
Merci

Reply

Marsh Posté le 13-05-2022 à 10:39:12    

Salut,  
A mon avis tu dois reconstruire les timestamps de ta video cible ...  
J'ai trouve ca comme commande pour les reconstruire: (a fouiller plus en details, mais tu peux deja tester)
 

Citation :


ffmpeg -vsync drop -i source.mp4 -map 0:v -vcodec copy output.mp4


 
(discussion ici https://superuser.com/questions/115 [...] eencoding)

Reply

Marsh Posté le 13-05-2022 à 10:58:49    

ManuLM a écrit :

Salut,  
A mon avis tu dois reconstruire les timestamps de ta video cible ...  
J'ai trouve ca comme commande pour les reconstruire: (a fouiller plus en details, mais tu peux deja tester)
 

Citation :


ffmpeg -vsync drop -i source.mp4 -map 0:v -vcodec copy output.mp4


 
(discussion ici https://superuser.com/questions/115 [...] eencoding)


 
Avec ta commande j'ai l'erreur que je passe du mkv aussi bien que du mp4:
 

Code :
  1. [mp4 @ 0x56347a357380] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
  2. av_interleaved_write_frame(): Invalid argument


 
Par contre j'ai converti le mkv en mp4 avec "ffmpeg -i out.mkv out.mp4" et même si ça prend une plombe (ré-encodage ?) ça semble marcher. [:zigg]  
 
(J'ai 0 connaissances en montage vidéo. Je me fais l'impression d'être un singe qui tente des trucs au pifs sur le clavier [:kaio] )
 
Merci de ton aide

Reply

Marsh Posté le 13-05-2022 à 17:06:16    

ok. Visiblement ton stream zero avait des problemes de timestamps, et le re-encodage les a reconstruit :)

Reply

Marsh Posté le 30-05-2022 à 09:52:49    

Salut.  Juste pour dire que j'ai utilisé ffmpeg pour reduire le volume d'un mp3.  Pour le fun j'ai aussi essayé sur un mkv.  Ça marche niquel [:prab]  
 
2 reproches quand même : la qualité par défaut est plus basse (64kbps au lieu de 128), j'ai du spécifier du 128 pour garder la qualité d'origine (sur le mp3, sur le mkv je sais pas).  Et aussi mon CPU se tournait les pouces, c'est normal de si peu utiliser le CPU ? (i7 10700k avec un nvme).


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-05-2022 à 11:22:32    

ffmpeg, le couteau suisse :D  
 
L'encodage mp3, ca ne prend pas beaucoup de CPU en fait, et je pense en plus que c'est single thread (sauf LAME qui je crois ajouter un mode multi thread il y a de ca quelques annees, mais je ne suis pas sur que ffmpeg le supporte).

Reply

Marsh Posté le 01-06-2022 à 20:19:37    

Anonymouse a écrit :

Par contre j'ai converti le mkv en mp4 avec "ffmpeg -i out.mkv out.mp4" et même si ça prend une plombe (ré-encodage ?) ça semble marcher. [:zigg]


Ah oui, pour éviter le ré-encodage il faut mettre -c copy. Tu peux comparer les 2 vidéos avec Mediainfo pour voir les différences.
 
Pour les histoires de timestamps, il y a l'option -reset_timestamps 1.
 
Et pour la concaténation, on peut créer un fichier txt incluant la liste des fichiers à assembler, du genre ;
file '/path/here/file1.avi'
file '/path/here/file2.avi'
puis l'intégrer dans une commande ;
ffmpeg -f concat -i list.txt -c copy video.avi
https://trac.ffmpeg.org/wiki/Concatenate

Reply

Marsh Posté le 16-06-2022 à 21:29:40    

[:ill nino]

Reply

Marsh Posté le 25-06-2022 à 22:02:20    

Bonjour
 
J'ai un vieux système de vidéo-surveillance qui vient de tomber en panne. J'ai réussi à récupérer les fichier en SWF mais IMPOSSIBLE de les lire! J'ai essayé de les convertir, d'utiliser plusieurs logiciels de lecture, tous me disent: "erreur de lecture" et ce sur l'ensemble des fichiers...
Auriez-vous une idée sur FFmpeg? je n'arrive pas à l'installer et ne trouve pas les éventuelles lignes de codes pour tester ça (désolé, je suis un GRAND débutant!!!)
je peux éventuellement envoyer un des fichiers pour que des personnes bien plus calées que moi puissent faire des tests et (peut-être!) trouver une solution...
Possibilité de rémun si le test marche  
 
Merci de votre aide

Reply

Marsh Posté le 25-06-2022 à 22:12:39    

Vas-y envoi un fichier


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 26-06-2022 à 10:52:04    

Un de tes fichiers swf m'intéresserait aussi pour voir de quoi il est composé et ce qu'on peut en faire.

Reply

Marsh Posté le 30-06-2022 à 12:10:48    

Bonjour
Voilà le lien pour un de mes fichiers
https://www.cjoint.com/c/LFEkkb3MEuH
bon courage et merci!

Reply

Marsh Posté le 30-06-2022 à 12:48:29    

Je n'ai pas réussi à l'ouvrir et MediaInfo ne donne aucun détail sur son contenu.
Il semblerait qu'il faille un décompileur de swf, il y en a plusieurs dont JPEXS Free Flash Decompiler qui a l'air d'être le seul gratuit parmi les récents ;
https://github.com/jindrapetrik/jpe [...] sion15.1.0
 
Il y a aussi Swivel mais qui a l'air nettement plus ancien et qui apparemment ré-encode d'office l'image.
https://www.newgrounds.com/wiki/cre [...] ces/swivel
 
JPEXS a besoin de Java 8 (ou plus) ;
https://github.com/jindrapetrik/jpe [...] stallation
 
https://www.java.com/fr/download/
 
Une fois que tu les as installés, tu ouvres ton swf dans JPEXS (qui a une interface graphique, contrairement à ffmpeg) et tu exportes le son et l'image en 2 fichiers (il ne sait pas faire autrement) ;
https://github.com/jindrapetrik/jpe [...] i/Features
 
https://raw.githubusercontent.com/wiki/jindrapetrik/jpexs-decompiler/images/features/export.png
 
Et tu les assembles avec ffmpeg, MKVmerge ou autre.
 
Avec ffmpeg, c'est une commande de ce genre ;

Code :
  1. "C:\Program Files\ffmpeg\ffmpeg.exe"  -i "G:\input_0.flv" -i  "G:\input_1.mp3" -c copy -map 0:v:0 -map 1:a:0 "I:\out.flv"


Tu adaptes bien sûr les chemins et noms de fichiers.
 

Citation :

Auriez-vous une idée sur FFmpeg? je n'arrive pas à l'installer


Il n'y a pas d'installation, tu mets l'exe où tu veux sur ton pc.


Message édité par arnuche le 30-06-2022 à 16:22:35
Reply

Marsh Posté le 30-06-2022 à 13:26:48    

De mon coté j'ai essayé d'installer swftools sur Win11 et Win10 mais ça ne marche pas, c'est trop vieux à mon avis, et sur linux aussi (mint) le paquet n'est plus dispo et en ligne on voit 2013 ici :  http://www.swftools.org/download.html
 
Mais si tu as un Win 7 ou un vieux linux sous la main tu peux essayer
 
J'ai vu un gars qui fait comme ça :
 

Citation :

swfcombine -d file.swf -o file_new.swf
 
ffmpeg -i file_new.swf video.mp4


 
Faut remplacer les "file" par le nom de ton fichier bien sur.  Tu peux utiliser l'auto-complétion pour ne pas avoir à taper tout le nom du fichier (tu tapes la/les première(s) lettres du nom du fichier puis ensuite la touche tab jusqu'à tomber sur le bon).
 
Aussi, faut être dans le dossier ou se trouve le fichier à traiter
 
Et copier ffmpeg dans le dossier aussi.  Je pense que swtcombine sera dans le path sinon faut l'ajouter.
 
Je sais que t'es débutant, c'est un peu compliqué, fais toi aider
 
T'as beaucoup de fichiers à traiter ?


Message édité par Lt Ripley le 30-06-2022 à 13:27:27

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-06-2022 à 13:42:02    

Ah si il faut faire un clic droit dessus puis "executer en tant qu'administrateur" (pour installer swftools, qui contient swfcombine)  (Win10/Win11)


Message édité par Lt Ripley le 30-06-2022 à 13:43:12

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-06-2022 à 13:48:02    

Bon, on dirait quand même que ton fichier est mort, j'ai une erreur "failed to read..." avec swfcombine.  Et sur internet online-convert et un autre donnent une erreur aussi
 
Tu peux aussi essayer avec un vieux navigateur, tu fais un glisser déposer dedans


Message édité par Lt Ripley le 30-06-2022 à 13:55:50

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-06-2022 à 16:21:39    

Il y a en effet des chances pour que tes swf aient un souci parce que j'ai trouvé des samples de swf et MediaInfo en affiche le contenu alors qu'il ne détecte même pas le format du tien (qui devrait être du ShockWave), voir ici ;
https://filesamples.com/formats/swf
ou là ;
http://samples.mplayerhq.hu/SWF/


Message édité par arnuche le 30-06-2022 à 16:34:56
Reply

Marsh Posté le 01-07-2022 à 16:38:53    

Bonjour
Oui, malheureusement, j'ai pas mal de fichier à traiter... Mais je pense que c'est mort, si vous n'arrivez pas à en faire quoi que ce soit, perso je n'ai pas vos compétences.. :cry:  :cry:

Reply

Marsh Posté le 01-07-2022 à 17:31:50    

Cela dit tu peux toujours essayer le décompileur dont je parlais, l'install est très rapide, tu verras bien s'il parvient à ouvrir tes swf.


Message édité par arnuche le 01-07-2022 à 17:32:20
Reply

Marsh Posté le 02-07-2022 à 14:54:43    

il me dit
invalid SWF file, wrong signature
 
ça sent pas bon...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed