Используйте выход filter_complex в качестве вложения MKV в ffmpeg - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь масштабировать и обрезать изображение и использовать его в качестве вложения MKV за один снимок, но безуспешно. Я понимаю, что команда "-attach" делает именно это, но проблема в том, что у меня нет окончательного изображения в виде файла. Вместо этого я пытаюсь обрезать и масштабировать файл на лету, делая что-то вроде этого:

ffmpeg -fflags +genpts \
-i video.h265 \
-i audio.ac3 \
-i sub.ass \
-i cover_img.jpg \
-filter_complex "[3:v]crop=in_h:in_h,scale=600:600[cover]; [3:v]crop=in_h:in_h,scale=120:120[small_cover]; [3:v]scale='-1:600'[cover_land]; [3:v]scale='-1:120'[small_cover_land]" \
-map 0:v:0 -map 1:a:0 -map 2:s:0 \
-map "[cover]" -disposition:v:1 attached_pic -metadata:s:v:1 filename="cover.jpg" -metadata:s:v:1 mimetype="image/jpeg" \
-map "[small_cover]" -disposition:v:2 attached_pic -metadata:s:v:2 filename="small_cover.jpg" -metadata:s:v:2 mimetype="image/jpeg" \
-map "[cover_land]" -disposition:v:3 attached_pic -metadata:s:v:3 filename="cover_land.jpg" -metadata:s:v:3 mimetype="image/jpeg" \
-map "[small_cover_land]" -disposition:v:4 attached_pic -metadata:s:v:4 filename="small_cover_land.jpg" -metadata:s:v:1 mimetype="image/jpeg" \
-r 24000/1001 -c:s ass -c:a copy \
-c:v mjpeg -c:v:0 libx265 \
out.mkv

Но это не работает, потому что потоки отображаются как видео, а не вложения.

Я также пытался изменить «[3: v]» в filter_complex на «[3: t]», но это не работает, поскольку изображения рассматриваются как видеопотоки.

Теперь я прибег к двухэтапному процессу, но я ищу способ сделать обе вещи одновременно:

ffmpeg -i cover_img.jpg \
-filter_complex "[0:v]crop=in_h:in_h,scale=600:600[cover]; [0:v]crop=in_h:in_h,scale=120:120[small_cover]; [0:v]scale='-1:600'[cover_land]; [0:v]scale='-1:120'[small_cover_land]" \
-c:v mjpeg \
-map "[cover]" cover.jpg \
-map "[small_cover]" small_cover.jpg \
-map "[cover_land]" cover_land.jpg \
-map "[small_cover_land]" small_cover_land.jpg

ffmpeg -fflags +genpts \
-i video.h265 \
-i audio.ac3 \
-i sub.ass \
-map 0:v:0 -map 1:a:0 -map 2:s:0 \
-attach "cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \
-attach "small_cover.jpg" -metadata:s:t:1 mimetype="image/jpeg" \
-attach "cover_land.jpg" -metadata:s:t:2 mimetype="image/jpeg" \
-attach "small_cover_land.jpg" -metadata:s:t:3 mimetype="image/jpeg" \
-r 24000/1001 -c:s ass -c:a copy \
-c:v libx265 \
out.mkv

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 19 апреля 2020

-attach ожидает URL внешнего файла и не работает с потоками, отправленными из выходных данных filtergraph.

...