ffmpeg: Как создать MOV с прозрачным фоном?
Я пытаюсь, но безуспешно, преобразовать зеленые пиксели фона в прозрачные и вывести результат в виде клипа с помощью ffmpeg. Nb Я не хочу накладывать клип на что-либо; У меня нет проблем с этим. Мне нужен клип с прозрачным фоном для видеоредактора OpenShot (фильтр кеинга которого не работает удовлетворительно).
То, что я пробовал (среди 1 миллиарда других вещей за последние 15 часов) было
ffmpeg.exe -i in.mov -vf chromakey=0x008001:0.115:0.0 -c:v qtrle out.mov
но пиксели просто не будут прозрачными. Похоже, ничего не происходит. Я считаю, что фильтр в порядке, потому что он отлично работает в сложной цепочке (наложение фонового изображения).
Вывод ffprompt -show_stream -show_format для out.mov выглядит следующим образом:
[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=132103
max_bit_rate=132103
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]
У меня есть "образец" клипа, который показывает поведение, которое я хочу, со следующим потоком и информацией:
[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]
и я просто не могу заметить соответствующую разницу.
Вход, выход и рабочий шаблон можно найти здесь.
(Проблема безопасности, с которой вы можете столкнуться при переходе по ссылке, связана с самоподписанием сертификата сервера. Вы можете принять временное исключение. Кстати: смешной размер файла выходного файла будет следующим гайком для взлома..)
1 ответ
Видеоплеер не будет показывать прозрачность, как вы обнаружили.
Прозрачность на самом деле не существует в видео. Каждый пиксель должен иметь некоторый цвет. Прозрачность реализуется путем добавления другого компонента, называемого альфа. Значение альфа-канала в позиции определяет, как приложение, обрабатывающее файл, смешивает цветной пиксель в этой позиции с цветными пикселями слоя (-ов) под ним (сами взвешенные по их альфе). Если под слоями нет слоев, как в случае с видеопроигрывателем, смешение не происходит и отображается сохраненный цвет. Если альфа для пикселя 0
затем цвет обнуляется, и слой под ним полностью просвечивает, и, следовательно, "прозрачность".
Короче говоря: проверьте прозрачность в приложении, которое может быть составным, например, в редакторе видео или приложении VFX.