Usare ffmpeg e mkvtools per operazioni su video
Faccio operazioni su file video raramente, alcune le ho fatte solo una
volta.
Per questo motivo evito di usare programmi che permettono l'editing di
video poiché troppo complessi, troppo pesanti e poco intuitivi per chi
non è del "settore".
Per questo uso due applicativi:
* ffmpeg: per elaborazioni di file video
* mkvtoolnix-gui: per creare file mkv o estrarre da essi una componente
naturalmente bisogna prima aver installato i due tools:
# apt install ffmpeg mkvtoolnix-gui
ffmpeg è molto complesso da usare perché offre una marea di opzioni e
molte di queste hanno una marea di sotto-opzioni... così quando risolvo
un problema mi salvo uno script di esempio che poi riuso se mi
ricapiterà in futuro la stessa problematica.
mkvtoolnix-gui invece è semplice ed intuitivo.
Con ffmpeg mi sono salvato le seguenti "istruzioni" per fare alcune
operazioni che ho fatto almeno una volta:
Nota: i comandi dovrebbero essere usabili con qualsiasi estensione
video, negli esempi ho messo .mp4 o .mkv, ma penso sia possibile usare
qualsiasi formato.
1) estrarre da un video solo la parte centrale di un video (nell'esempio
dal secondo 10 al secondo 40)
$ ffmpeg -ss 00:00:10 -i in.mp4 -t 00:00:40 -c copy out.mp4
2) rimuovere una parte contigua intermedia bisogna eseguire tre step
(es: rimuovere da 51 secondi a 59 secondi)
2.a) creare i segmenti
$ ffmpeg -t 00:00:50 -i filmato.mkv -c copy segmento1.mkv
$ ffmpeg -ss 00:01:00 -i filmato.mkv -c copy segmento2.mkv
2.b) creare il file input.txt che contiene la lista ordinata dei
segmenti da unire
$ echo "file segmento1.mkv" > input.txt
$ echo "file segmento2.mkv" >> input.txt
2.c) concatenare i segmenti in un unico file
$ ffmpeg -f concat -i input.txt -c copy filmato_risultato.mkv
3) rimuovere più di due parti di un filmato, è simile al punto 2
3.1) creare i segmenti che si vogliono tenere
$ ffmpeg -ss 00:00:10 -t 00:00:15 -i filmato.mkv -c copy segmento1.mkv
$ ffmpeg -ss 00:00:25 -t 00:00:30 -i filmato.mkv -c copy segmento2.mkv
$ ffmpeg -ss 00:00:53 -t 00:00:57 -i filmato.mkv -c copy segmento3.mkv
3.b) creare il file input.txt che contiene la lista ordinata dei
segmenti da unire
$ echo "file segmento1.mkv" > input.txt
$ echo "file segmento2.mkv" >> input.txt
$ echo "file segmento3.mkv" >> input.txt
3.c) concatenare i segmenti in un unico file
$ ffmpeg -f concat -i input.txt -c copy filmato_risultato.mkv
4) per vedere dimensioni di un video:
$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height
-of csv=s=x:p=0 input.mp4
5) per ridimensionare video (nell'esempio trasforma il video in.mp4 con
una dimensione di 1024xD ove D è calcolato in base alla dimensione
iniziale per mantenere le proporzioni)
$ ffmpeg -i in.mp4 -vf scale=1024:-1 output.mp4
6) per estrarre una sezione di un video, eliminando tutto ciò che ci sta
fuori
$ ffmpeg -i in.mp4 -filter:v crop=NewX:NewY:StartX:StartY out.mp4
dove NewX è la nuova len (larghezza), NewY è la nuova H (altezza) e
Start indica la dimensione X Y da estrarre
esempio per estrarre da 1280x720 una dimensione di 622x358 con
StartX=329 e StartY=0 (== NewX NewY, 329 = (1280-622)/2 e 0 perché parte
dalla parte alta del video, se si vuole centrato => (720-358)/2)
$ ffmpeg -i in.mp4 -filter:v crop=622:358:329:0 out.mp4
Nota: per calcolare la dimensione da estrarre salvo un frame del video,
dove si vedono bene i contorni che voglio estrarre e poi carico
l'immagine in gimp per determinarne le dimensioni
Per mkvtoolnix-gui è possibile aggiungere ad un video, ad esempio, audio
e/o sottotitoli.
Se i file sono (naturalmente devono essere tutti della durata corretta):
video.mp4
audio.mp3
sottotitoli.it.vtt
$ mkvtoolnix-gui video.mp4 audio.mp3 sottotitoli.it.vtt
e premere il bottone per la creazione del file mkv una volta apparsa la GUI.
L'estrazione di un componente di un file mkv non è così semplice ed
immediata. L'ho fatta solo una volta e mi sono dimenticato di salvarmi
le istruzioni.
Spero che questi comandi possano essere utili anche ad altri.
Ciao
Davide
Reply to: