[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: