2014-09-16 14 views

risposta

4

Creare un png con una scatola trasparente e un canale alfa nella dimensione preferita. Puoi usare ad es. gimp o photoshop.

quindi utilizzare questo comando:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \ 
-codec:a copy out.mp4 

dove 10:10 è la distanza dall'angolo in alto a sinistra.

Successivamente è possibile inserire i sottotitoli.

+0

Se si vuole fare questo "fare un separato fondo di dialogo" metodo sarebbe più facile e più efficiente di utilizzare solo il [drawBox] (https://ffmpeg.org/ffmpeg-filters.html #drawbox) filtro. Inoltre, l'uso di filtri, come overlay o drawbox, richiederà la ricodifica del video, ma l'utilizzo dei sottotitoli ASS per i softsub come mostrato nella mia risposta non modificherà il video. – LordNeckbeard

10

Using ASS subtitles to create opaque text background

sottotitoli ASS possono avere uno sfondo semitrasparente per il testo.

Con Aegisub

Il modo più semplice per farlo è con aegisub.

enter image description here

  1. Aprire il file i sottotitoli con Aegisub.
  2. Fare clic su SubtitleStyles manager.
  3. Sotto Current Script scegliere Default, quindi premere il pulsante Edit.
  4. Esperimento con i valori Outline e Shadow. Controllare Opaque box.
  5. Sotto Colors fare clic sul colore sotto Outline o Shadows. Apparirà una finestra. Regolare il valore della casella Alpha per modificare la trasparenza.
  6. Salvare i sottotitoli come file .ass.

Ora è possibile utilizzare il file AAS per rendere hardsubs or softsubs with ffmpeg.

Senza Aegisub

Se si desidera hardsubs è possibile utilizzare il subtitles filter per aggiungere lo sfondo trasparente con l'opzione force_style.

ffmpeg -i input -filter_complex "subtitles=subs.ass:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20'" output 
  • Questo funziona con qualsiasi sottotitoli testuali supportati da FFmpeg perché il filtro li convertirà automaticamente in ASS.

  • Vedere SubStation Alpha (ASS) style fields per le opzioni di formattazione.

Problema con più linee

Se i sottotitoli contiene più righe, a causa di auto-avvolgimento di lunghe file o un'interruzione di linea intenzionale, gli sfondi si sovrapporranno e potenzialmente sembrare brutto come illustrato di seguito:

enter image description here

È possibile evitare questo:

  1. Modifica delle dimensioni Outline e Shadow su 0.
  2. Le impostazioni alfa dell'ombra controllano la trasparenza della casella dello sfondo. Fare clic sul colore dell'ombra per regolare Alpha del colore dell'ombra sul livello di trasparenza desiderato.
  3. Modificare il file ASS in un editor di testo. Nella riga Style modificare il valore corrispondente a BorderStyle a 4. Questo riempirà lo sfondo del riquadro di delimitazione di ciascun evento dei sottotitoli. Esempio Style line:

    Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H80000000,&H80000000,-1,0,0,0,100,100,0,0,4,0,0,2,10,10,10,1 
    

Esempio:

enter image description here

Nota che BorderStyle=4 è un valore non standard, quindi potrebbe non funzionare correttamente in tutti i giocatori.

Grazie a sup e WM4 per la BorderStyle suggestione.

Utilizzando drawBox

Il drawbox filter può essere utilizzato per creare una casella di sfondo. Questo può essere utile se si desidera che la scatola si estenda per la larghezza.

enter image description here

ffmpeg -i input -filter_complex "drawbox=w=iw:h=24:y=ih-28:t=max:[email protected],subtitles=subs.ass" output 

aspetto negativo è che si deve tenere conto di interruzioni di riga o wrapping parola per lunghi sottotitoli. Sarà sufficiente rendere la casella più alta per compensare, ma sembrerà brutta perché la linea di base dei sottotitoli rimane statica: i sottotitoli a riga singola avranno più riempimento nella parte superiore rispetto alla parte inferiore.

+2

Questo lascia una linea brutta lì in caso di sottotitoli a due righe. C'è un modo per liberarsi di Ged se? – sup

+1

@sup Non che io sappia. Un metodo alternativo sarebbe quello di creare una scatola statica e trasparente usando il [filtro drawbox] (http://ffmpeg.org/ffmpeg-filters.html#drawbox), ma non è nemmeno un'idea. – LordNeckbeard

+0

@LordNeckbeard man mi hai salvato la vita! È perfetto! Funziona come un fascino !! Non c'è bisogno di Adobe Encore, Adobe Premiere e tutta quella roba pagata che non è in grado di fare cose così semplici! – eusoubrasileiro

-1

Aveva la stessa domanda, non è stata trovata una buona risposta. A quanto pare ffmpeg (e avconv sanno come applicare ass formattazione a srt in questo modo:.

avconv -i in.mp4 -vf "subtitles=subtemp.sub.0.sub:force_style='Name=Default,Fontname=Arial,Fontsize=28,PrimaryColour=&Hffffff,SecondaryColour=&Hffffff,OutlineColour=&H44000000,BackColour=&H0,BorderStyle=3,Shadow=0'" out.mp4 

(sostituzione avconv con ffmpeg dovrebbe funzionare, o vicino ad esso)

Altri progetti A proposito ass, in particolare quello che sembra questione sono BackColour e BorderStyle.

0

È possibile utilizzare lo script di Aegisub this. Questo script genera automaticamente uno sfondo trasparente per ogni riga di sottotitoli.

Subtitle transparent background