Édition vidéo sous GNU/Linux

De Octet.ca
(Redirigé depuis Ffmpeg)

Page d'aide pour manipuler des vidéos sous GNU/Linux. Plusieurs commandes sont obsolètes, notamment celle avec mencoder. Je les mets à jour avec du ffmgep au fur et à mesure que je dois les utiliser.

Voir aussi la page DVD.

Screencast[modifier]

Pour faire les screencast, j'ai utilisé le logiciel 'recordmydesktop'. Tu peux obtenir l'id de la fenêtre sur laquelle effectuer le screencast en tapant cette commande:

xwininfo

Il va ensuite falloir cliquer sur la fenêtre en question pour obtenir son id (un code en hexa de la sorte '0x294ae5d'). Par la suite, j'utilise cet id dans ma commande recordmydesktop:

recordmydesktop  -o nom_du_fichier_video_a_generer --no-sound --windowid 0x294ae5d --v_bitrate 200000

L'option --v_bitrate 200000 donne un screencast avec des images beaucoup plus fluides que ce que l'on obtient normalement avec recordmydesktop.


Écouter une vidéo[modifier]

DVD[modifier]

mplayer dvdnav:// 

DVD copié sur disque dur[modifier]

Si c'est un DVD qui est simplement copié, sans encodage, utiliser la commande:

mplayer -dvd-device /path/fichier/du/DVD dvd://1

Dans le répertoire, il doit y a voir les répertoires AUDIO_TS VIDEO_TS.#

Info disponible[modifier]

Vidéo[modifier]

ffmpeg -i movie.avi

Durée du vidéo[modifier]

exiftool film.avi

Édition[modifier]

Coller 2 films bout à bout[modifier]

Faire la commande:

ffmpeg -f concat -safe 0 -i fichier.txt -c copy output.mp4

ficher.txt contient le chemin d'accès sur chaque ligne:

file '/chemin/acces/fichier.mp4'

Étape pour avoir le bon formatage:

\ls *mp4 > fichier.txt
sed -i "s/$/\'/" fichier.txt
sed -i "s/^/file '/" fichier.txt

Extraire/couper une section de film[modifier]

ffmpeg -v error -stats -ss 00:39:00 -i input.mkv -to 00:03:54 -codec copy -avoid_negative_ts make_zero output.mkv

Obsolète[modifier]

Pour débuter un film à la 38 seconde 38 et le faire durer pendant 1:12 minute. Pour aller jusqu'à la fin, omettre l'option -i:

avconv  -i  in.avi -ss  00:00:38 -vcodec copy -acodec copy -t 00:01:12  out.avi
ffmpeg  -i  in.avi -ss  00:00:38 -vcodec copy -acodec copy -t 00:01:12  out.avi

Tutorial avec Avidemux.

mkv:

Faire une rotation à un film[modifier]

ffmpeg -i video.mp4 -vf transpose=0 out.mkv
                0    Rotate by 90 degrees counterclockwise and vertically flip.
                1    Rotate by 90 degrees clockwise.
                2    Rotate by 90 degrees counterclockwise.
                3    Rotate by 90 degrees clockwise and flip.

Il est possible d'enchaîner les transformations. Pour avoir une rotation de 180 degrés:

ffmpeg -i video.mp4 -vf transpose=1,transpose=1 out.mkv

Redimensionner (hauteur-largeur) un film[modifier]

mencoder -o tmp.avi -oac copy -vf scale=320:240 -ovc  lavc -lavcopts vcodec=mpeg4 -oac copy film.avi

Changer la vitesse d'un film[modifier]

Provient de KubuntuBlog

mencoder -oac copy -ovc copy -speed 2 -ofps 25 -o Fichier_rapide.avi Fichier_source.avi

L'option -speed prend en argument le facteur par lequel on veut accélérer le film (1.0<x<100) ou décélérer (0<x<1.0). On recommande chaudement à l'éditeur en herbe de changer le framerate si le film résultant est de qualité médiocre.

Son[modifier]

Convertir un mp3 en wav[modifier]

mpg123 -w file.wav file.mp3

Fusion du son et du video[modifier]

ffmpeg -i input.mp4 -i input.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4

Voilà qui donne des fichiers plus petits, mais qui prend plus de temps:

ffmpeg -i "videoFile.mp4" -i "audioFile.mp3" -shortest outPutFile.mp4

Avec fichier audio en boucle s'il est moins long que la vidéo:

ffmpeg -i video_sans_son.mkv -f lavfi -i amovie=/chemin/acces/fichier.mp3:loop=0,asetpts=N/SR/TB -shortest output.mkv

Ce qui est permis semble fonction des formats de fichier en entrée et en sortie:

ffmpeg -i input.ogv -i sound.wav  -codec copy -shortest output.avi

Extraire le son d'un film[modifier]

Copie du son:

avconv -i input.mp4 -acodec copy output.aac
ffmpeg -i out-1.ogv -acodec copy -vn audio.ogg

conversion en mp3:

avconv -i input.mp4 output.mp3

Dans les cas où c'est un codec plus complexe, on peut réencoder en wav:

mplayer -ao pcm:file=audio.wav movie_file.avi

Si c'est un fichier mpeg, on peut retirer le son tout simplement, c'est un mp3 ou un ac3:

mplayer -dumpaudio -dumpfile output.mp3  input.mpg

Retirer le son d'un film[modifier]

ffmpeg -i input.avi -vcodec copy -an output.avi

Convertir un ac3 en wav[modifier]

mplayer -ao pcm input.ac3

Ça va créer un fichier audiodump.wav

Convertir un wav en mpeg2 (mp2)[modifier]

ffmpeg -i input.wav -ab 256 output.mp2

Augmenter le volume[modifier]

normalize-mp3 --amplitude -1dBFS fichier.mp3

Extraire l'audio d'une archive d'émission radio de Radio-Canada[modifier]

mplayer -dumpstream -playlist http://www.radio-canada.ca/Medianet/2011/CBSI/Bonjourlacote201108250718.asx

Dump des frames sous formes d'images[modifier]

mplayer -vo jpeg maison1.mpg

Plus moderne:

ffmpeg -i input.ogv images/%03d.png

Faire un film avec des images statiques[modifier]

Plusieurs images[modifier]

  • Mettre la liste des fichiers ordonnées dans "liste.txt"
transcode  -i liste.txt -x imlist,null -g 640x480 -y xvid,null \
-f 24.0 -o movie.avi -H 0 -k -V rgb24
-k swap red/blue (Cb/Cr) in video frame [off]. Use if people have blue faces.

Une image[modifier]

ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -tune stillimage -c:a aac -strict -2 -b:a 192k -pix_fmt yuv420p -shortest out.mp4

Réduire la dimension d'un fichier vidéo[modifier]

(source)
Il faut diviser l'espace souhaitée pour le fichier par le nombre de secondes que dure la vidéo. Pour avoir la durée d'une vidéo en secondes:

ffmpeg -i  input.mp4 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

Il faut par la suite faire le calcul pour le bitrate. Par exemple, si je désire qu'une vidéo d'une durée 4:33 (273 secondes) occupe 300 Mo, je dois faire le calcul (300 Mo * 1024 Ko/Mo * 8 bit/octet)/273 secondes = 9000 Kb/sec:

Espace-désiré-Mo * 8192 / nbr-secondes-video

La ligne de commande sera ainsi

 ffmpeg -i input.mp4 -strict -2 -b:v 9000k output.mp4

Additional options that might be worth considering is setting the Constant Rate Factor, which lowers the average bit rate, but retains better quality. Vary the CRF between around 18 and 24 — the lower, the higher the bitrate.

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

Encodage[modifier]

codec disponible[modifier]

mencoder -ovc help -oac help
ffmpeg -codecs

h265 -> h264 (pour lire sur SmartTV)[modifier]

ffmpeg -i input -c:v libx264 -crf 18 -c:a copy output.mkv

dv -> h264[modifier]

avconv -i input.dv  -vcodec h264 output.mkv

Ogg Theora[modifier]

mp4 à ogv, même qualité:

ffmpeg -i input.mp4 -c:v libtheora -q:v 7 -c:a libvorbis -q:a 4 output.ogv 

Pour créer un fichier Ogg Theora:

ffmpeg2theora input.dv -o output.ogg

Pour convertir un fichier Ogg Theora en xvid, il faut spécifier le bitrate audio:

mencoder inputfile.ogg -oac lavc -ovc lavc -lavcopts abitrate=160 -o outputfile.avi

Convertir mpg4[modifier]

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4

Même qualité[modifier]

L'ordre des arguments semble avoir son importance:

 ffmpeg -i input.mp4 -qscale 0 -vcodec libx264 -acodec libfaac ouput.mp4

Convertir un avi en mpeg[modifier]

mencoder input.avi -o output.mpg -ovc lavc -oac mp3lame -of mpeg

Convertir n'importe quoi en dvix[modifier]

mencoder input.quelque_chose -o output.avi -ovc lavc -oac lavc

Pour les fichiers vidéo avec la caméra Sony PowerShot:

mencoder -ovc lavc -oac mp3lame -srate 48000 input.avi -o output.avi

Conversion 3 passes avec son et redimension![modifier]

Commandes provenant de SimpleRip.

Son

# rip audio track (bitrate: 128, gain: 0)
nice -n 3 mencoder -oac mp3lame -lameopts mode=2:cbr:br=128:vol=0 \
-ovc frameno -o frameno.avi  input.dv

Passe 1

# video track (pass: 1, bitrate: 1000)
nice -n 3 mencoder -sws 2 -oac copy -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=1 \
-ffourcc XVID -vf crop=552:368:6:56  input.dv -o /dev/null

Passe2

# video track (pass: 2, bitrate: 1000)
nice -n 3 mencoder -sws 2 -oac copy -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=2 \
-ffourcc XVID -vf crop=552:368:6:56  input.dv -o "output.mpg"

Convertir en format flash (tm)[modifier]

Cette ligne de commande provient de Yet Another Blog from Luar.

ffmpeg -i video.avi -ar 44100 -ab 32 -f flv -s 320x240 video.flv


-i input file name
-ar audio sampling rate in Hz
-ab audio bit rate in kbit/s
-f output format
-s output dimension

Changer le framerate[modifier]

L'option est -ofps $FRAMERATE. Pour obtenir 29.97, il suffit d'utiliser la fraction 30000/1001. Simple!

mencoder -oac copy -ovc copy -ofps 30000/1001 source.avi -o output.avi


Sortie en ascii[modifier]

Il faut utiliser la librairie caca:

mplayer -vo caca film.avi

Convertir en quelque chose qui peut être ingéré par Final Cut[modifier]

mencoder -oac pcm -ovc x264 -x264encopts bitrate=40000 $INPUT -o $OUTPUT.avi

Générique[modifier]

dvtext

Sous-titre[modifier]

Graver dans le film[modifier]

ffmpeg -i input.mkv -vf subtitles=sous-titre.srt output.mkv

Avec une police plus grande:

ffmpeg -i input.mkv -vf "subtitles=sous-titre.srt:force_style='Fontsize=24"  la_chute_3e_lien.mkv

Extraction[modifier]

mkv[modifier]

Inspect the file:

mkvmerge -i input.mkv

This will list the tracks, for example like this:

File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: subtitles (S_TEXT/UTF8)

Based on the ID of the track, call the following command, where <trackID> is the one you identified above. <output> is just a dummy name, you can use any you want.

mkvextract tracks input.mkv <trackID>:<output>.srt

Source

mp4[modifier]

ffmpeg -i input.mp4 -vf subtitles=soustitre.srt -codec:v libx264 -crf 23 -preset medium -codec:a copy output.mp4

Éditer la police[modifier]

Il faut convertir le fichier en format ass et l'éditer par la suite:

ffmpeg -i fichier.srt fichier.ass

Voir aussi[modifier]