Вопрос по video-processing, video, ffmpeg – ffmpeg расщепление RGB и альфа-каналов с использованием фильтра

1

Я пытаюсь использовать ffmpeg для разделения входного файла на два отдельных файла:

An MP4 with only R,G and B channels An MP4 with the "extracted" A channel (a so-called Key clip, see http://ffmpeg-users.933282.n4.nabble.com/quot-Extracting-quot-Alpha-Channel-td3700227.html)

Мне удалось сделать оба, но теперь я хочу объединить их в одну команду. Вот что я делаю:

ffmpeg -r $FPS -y -i input.flv -vcodec libx264 -vpre ipod640 -acodec libfaac -s 256x256 -r $FPS -filter_complex INSERT_FILTER_HERE rgb.mp4 alpha.mp4

где INSERT_FILTER_HERE:

format=rgba, split [rgb_in][alpha_in];
[rgb_in] fifo, lutrgb=a=minval [rgb_out];
[alpha_in] format=rgba, split [T1], fifo, lutrgb=r=maxval:g=maxval:b=maxval, [T2] overlay [out];
[T1] fifo, lutrgb=r=minval:g=minval:b=minval [T2]

Короче говоря, я разделил файл на два потока, для первого потока я "удалю" альфа-канал, для второго потока, я извлекаю представление альфа-канала в градациях серого. Когда я ставлю это через graph2dot, он работает нормально, с выводом nullsink.

Однако когда я запускаю его в ffmpeg с -filter_complex, я получаю:

ffmpeg version N-41994-g782763e Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 28 2012 17:45:15 with gcc 4.6.3
  configuration: --enable-gpl --enable-nonfree --enable-pthreads --enable-filters --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-libtheora --enable-libvpx --enable-postproc --enable-avfilter
  libavutil      51. 63.100 / 51. 63.100
  libavcodec     54. 29.101 / 54. 29.101
  libavformat    54. 11.100 / 54. 11.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     3.  0.100 /  3.  0.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, flv, from 'input.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : true
  Duration: 00:01:10.56, start: 0.000000, bitrate: 1964 kb/s
    Stream #0:0: Video: vp6a, yuva420p, 800x950, 1536 kb/s, 25 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
[graph 0 input from stream 0:0 @ 0x2e4c6e0] w:800 h:950 pixfmt:yuva420p tb:1/30 fr:30/1 sar:0/1 sws_param:flags=2
Output pad "default" for the filter "Parsed_lutrgb_3" of type "lutrgb" not connected to any destination

Любые идеи о том, как заставить ffmpeg распознать, что он должен записать [rgb_out] в rgb.mp4 и [out] в alpha.mp3?

Заранее спасибо!

Ваш Ответ

1   ответ
1

лы, используя-map, Отдокументация для-filter_complex:

Output link labels are referred to with -map. Unlabeled outputs are added to the first output file.

For example, to overlay an image over video

ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]'\
  -map '[out]' out.mkv

Таким образом, в вашем случае вы хотите что-то вроде:

ffmpeg ... -i input ... -filter_complex 'split [rgb_in][alpha_in]; ... [rgb_out];\
  ... [alpha_out]' -map '[rgb_out]' rgb.mp4 -map '[alpha_out]' alpha.mp4
Привет, есть ли способ придать непрозрачность наложению изображения?
Вы должны явно отобразить аудио также. Что-то вроде-map 0:a перед каждым из выходных файлов. Взгляните на документы, связанные в ответе на все вопросы.
Это работает, но кажется, что звук не берется правильно. ffprobe показывает только один поток (видео) на обоих mp4. Есть идеи? Doa

Похожие вопросы