2017-03-25 4 views
2

J'essaye - sans succès du tout - de convertir les pixels verts d'un arrière-plan en ceux transparents et de sortir le résultat en tant que clip avec ffmpeg. N.b. Je fais pas voulez mettre le clip sur quoi que ce soit; Je n'ai pas de problème avec ça. Ce que je veux, c'est un clip avec fond transparent pour l'éditeur vidéo OpenShot (dont le filtre chromakey ne fonctionne pas de manière satisfaisante).ffmpeg: Comment créer un MOV avec un arrière-plan transparent?

Ce que j'ai essayé (entre 1 zillion autres au cours des 15 dernières heures.) Était

ffmpeg.exe -i in.mov -vf chromakey=0x008001:0.115:0.0 -c:v qtrle out.mov 

mais les pixels simplement ne serait pas transparent. Apparemment, rien ne se passe. Je pense que le filtre est correct, car il fonctionne très bien dans une chaîne complexe (superposition d'une image de fond).

La sortie de -show_format ffprompt de -show_stream de out.mov est la suivante:

[STREAM] 
index=0 
codec_name=qtrle 
codec_long_name=QuickTime Animation (RLE) video 
profile=unknown 
codec_type=video 
codec_time_base=1/30 
codec_tag_string=rle 
codec_tag=0x20656c72 
width=1920 
height=1080 
coded_width=1920 
coded_height=1080 
has_b_frames=0 
sample_aspect_ratio=1:1 
display_aspect_ratio=16:9 
pix_fmt=bgra 
level=-99 
color_range=N/A 
color_space=unknown 
color_transfer=unknown 
color_primaries=unknown 
chroma_location=unspecified 
field_order=progressive 
timecode=N/A 
refs=1 
id=N/A 
r_frame_rate=30/1 
avg_frame_rate=30/1 
time_base=1/15360 
start_pts=0 
start_time=0.000000 
duration_ts=54789 
duration=3.566992 
bit_rate=822383192 
max_bit_rate=N/A 
bits_per_raw_sample=N/A 
nb_frames=107 
nb_read_frames=N/A 
nb_read_packets=N/A 
DISPOSITION:default=1 
DISPOSITION:dub=0 
DISPOSITION:original=0 
DISPOSITION:comment=0 
DISPOSITION:lyrics=0 
DISPOSITION:karaoke=0 
DISPOSITION:forced=0 
DISPOSITION:hearing_impaired=0 
DISPOSITION:visual_impaired=0 
DISPOSITION:clean_effects=0 
DISPOSITION:attached_pic=0 
DISPOSITION:timed_thumbnails=0 
TAG:language=eng 
TAG:handler_name=DataHandler 
TAG:encoder=Lavc57.64.101 qtrle 
[/STREAM] 
[STREAM] 
index=1 
codec_name=aac 
codec_long_name=AAC (Advanced Audio Coding) 
profile=LC 
codec_type=audio 
codec_time_base=1/44100 
codec_tag_string=mp4a 
codec_tag=0x6134706d 
sample_fmt=fltp 
sample_rate=44100 
channels=2 
channel_layout=stereo 
bits_per_sample=0 
id=N/A 
r_frame_rate=0/0 
avg_frame_rate=0/0 
time_base=1/44100 
start_pts=926 
start_time=0.020998 
duration_ts=157481 
duration=3.570998 
bit_rate=3 
max_bit_rate=3 
bits_per_raw_sample=N/A 
nb_frames=153 
nb_read_frames=N/A 
nb_read_packets=N/A 
DISPOSITION:default=1 
DISPOSITION:dub=0 
DISPOSITION:original=0 
DISPOSITION:comment=0 
DISPOSITION:lyrics=0 
DISPOSITION:karaoke=0 
DISPOSITION:forced=0 
DISPOSITION:hearing_impaired=0 
DISPOSITION:visual_impaired=0 
DISPOSITION:clean_effects=0 
DISPOSITION:attached_pic=0 
DISPOSITION:timed_thumbnails=0 
TAG:language=eng 
TAG:handler_name=DataHandler 
[/STREAM] 
[FORMAT] 
filename=out.mov 
nb_streams=2 
nb_programs=0 
format_name=mov,mp4,m4a,3gp,3g2,mj2 
format_long_name=QuickTime/MOV 
start_time=0.000000 
duration=3.567000 
size=366708874 
bit_rate=822447712 
probe_score=100 
TAG:major_brand=qt 
TAG:minor_version=512 
TAG:compatible_brands=qt 
TAG:encoder=Lavf57.56.101 
[/FORMAT] 

j'ai un clip « échantillon » qui montre le comportement que je veux, avec le flux et informations suivantes:

[STREAM] 
index=0 
codec_name=qtrle 
codec_long_name=QuickTime Animation (RLE) video 
profile=unknown 
codec_type=video 
codec_time_base=1/24 
codec_tag_string=rle 
codec_tag=0x20656c72 
width=1920 
height=1080 
coded_width=1920 
coded_height=1080 
has_b_frames=0 
sample_aspect_ratio=0:1 
display_aspect_ratio=0:1 
pix_fmt=bgra 
level=-99 
color_range=N/A 
color_space=unknown 
color_transfer=unknown 
color_primaries=unknown 
chroma_location=unspecified 
field_order=progressive 
timecode=N/A 
refs=1 
id=N/A 
r_frame_rate=24/1 
avg_frame_rate=24/1 
time_base=1/12288 
start_pts=0 
start_time=0.000000 
duration_ts=74760 
duration=6.083984 
bit_rate=49226848 
max_bit_rate=N/A 
bits_per_raw_sample=N/A 
nb_frames=146 
nb_read_frames=N/A 
nb_read_packets=N/A 
DISPOSITION:default=1 
DISPOSITION:dub=0 
DISPOSITION:original=0 
DISPOSITION:comment=0 
DISPOSITION:lyrics=0 
DISPOSITION:karaoke=0 
DISPOSITION:forced=0 
DISPOSITION:hearing_impaired=0 
DISPOSITION:visual_impaired=0 
DISPOSITION:clean_effects=0 
DISPOSITION:attached_pic=0 
DISPOSITION:timed_thumbnails=0 
TAG:language=eng 
TAG:handler_name=DataHandler 
TAG:encoder=Lavc57.24.102 qtrle 
[/STREAM] 
[STREAM] 
index=1 
codec_name=aac 
codec_long_name=AAC (Advanced Audio Coding) 
profile=LC 
codec_type=audio 
codec_time_base=1/48000 
codec_tag_string=mp4a 
codec_tag=0x6134706d 
sample_fmt=fltp 
sample_rate=48000 
channels=2 
channel_layout=stereo 
bits_per_sample=0 
id=N/A 
r_frame_rate=0/0 
avg_frame_rate=0/0 
time_base=1/48000 
start_pts=0 
start_time=0.000000 
duration_ts=293856 
duration=6.122000 
bit_rate=53537 
max_bit_rate=128000 
bits_per_raw_sample=N/A 
nb_frames=288 
nb_read_frames=N/A 
nb_read_packets=N/A 
DISPOSITION:default=1 
DISPOSITION:dub=0 
DISPOSITION:original=0 
DISPOSITION:comment=0 
DISPOSITION:lyrics=0 
DISPOSITION:karaoke=0 
DISPOSITION:forced=0 
DISPOSITION:hearing_impaired=0 
DISPOSITION:visual_impaired=0 
DISPOSITION:clean_effects=0 
DISPOSITION:attached_pic=0 
DISPOSITION:timed_thumbnails=0 
TAG:language=eng 
TAG:handler_name=DataHandler 
[/STREAM] 
[FORMAT] 
filename=templateOK.mov 
nb_streams=2 
nb_programs=0 
format_name=mov,mp4,m4a,3gp,3g2,mj2 
format_long_name=QuickTime/MOV 
start_time=0.000000 
duration=6.144000 
size=37478506 
bit_rate=48800138 
probe_score=100 
TAG:major_brand=qt 
TAG:minor_version=512 
TAG:compatible_brands=qt 
TAG:encoder=Lavf57.25.100 
[/FORMAT] 

et je ne suis simplement pas capable de repérer la différence pertinente.

L'entrée, la sortie et le modèle de travail peuvent être trouvés here.

(Le problème de sécurité que vous pouvez rencontrer en cliquant sur le lien provient du fait que le certificat du serveur est auto-signé Vous pouvez accepter une exception temporelle Btw: La taille ridicule du fichier de sortie sera le prochain problème à résoudre. Probablement quelque chose sur la compression.)

+0

Essayez avec '-c: v png' – Mulvya

+0

Merci, Mulvya! J'ai. Comme je l'ai dit, j'avais juste 15 heures. d'essais et d'erreurs. Principalement erreur. : - ((( – Mat

+0

Avez-vous essayé de superposer la vidéo encodée dans ffmpeg? Comment vérifiez-vous la transparence? – Mulvya

Répondre

2

Un lecteur vidéo n'affichera pas la transparence, comme vous l'avez découvert.

La transparence n'existe pas réellement dans la vidéo. Chaque pixel doit avoir une couleur. La transparence est implémentée en ajoutant un autre composant, appelé alpha. La valeur de la couche alpha à une position détermine comment l'application manipulant le fichier fusionne le pixel coloré à cette position avec les pixels colorés de la couche (s) en dessous (eux-mêmes pondérés par leur alpha). S'il n'y a pas de couches en dessous, comme c'est le cas dans un lecteur vidéo, aucune fusion ne se produit et la couleur stockée est affichée. Si l'alpha pour un pixel est 0 alors la couleur est annulée et la couche sous-jacente apparaît complètement, et donc "transparence". Longue histoire courte: vérifiez la transparence dans une application qui peut composite, comme un éditeur vidéo ou une application VFX.