2016-11-15 15 views
0

Я пытаюсь использовать FFmpeg для выполнения сложного транскодирования видео (например, для объединения нескольких файлов). Чтобы сделать это, я пытался использовать filter_complex, но я заметил небольшое снижение качества по сравнению с тем, что я видел ранее, используя обычный видеофильтр.FFmpeg: «filter_complex» приводит к ухудшению качества, чем «vf»

Для перепроверки, я сводился своей командой к простому транскодирования - один с использованием filter_complex и один раз с помощью ФЖА - и я подтвердил, что выход из сложного фильтра заметно размыто по сравнению с выходом обычного видеофильтра. Я не могу найти документацию FFmpeg, объясняющую это ... кто-нибудь знает, почему это происходит, и как я могу получить filter_complex для вывода такого же качественного видео, как vf?

Команда используя обычный видео фильтр (Vf):

ffmpeg -i input.ts -map_chapters -1 -f mpegts -an -sn -map 0:0 -vf "[in]yadif=deint=interlaced[out]" -vcodec libx264 -profile:v baseline -level 2 -b:v 800k output.ts 

FFmpeg Выход:

ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers 
    built with gcc 4.1.2 (GCC) 20070626 (Red Hat 4.1.2-14) 
    configuration: --enable-gpl --enable-nonfree --enable-libx264 --enable-libfdk-aac --enable-libfaac --enable-libvpx --enable-encoder=vorbis --enable-libvorbis --enable-libmp3lame --enable-libspeex --disable-decoder=prores --disable-decoder=prores_lgpl --disable-ffplay --disable-ffserver --disable-shared --enable-static --extra-cflags=-I/local/build/include --extra-libs=-lfdk-aac --extra-ldflags=-L/local/build/lib --prefix=/local/build/install 
    libavutil  55. 17.103/55. 17.103 
    libavcodec  57. 24.102/57. 24.102 
    libavformat 57. 25.100/57. 25.100 
    libavdevice 57. 0.101/57. 0.101 
    libavfilter  6. 31.100/6. 31.100 
    libswscale  4. 0.100/4. 0.100 
    libswresample 2. 0.101/2. 0.101 
    libpostproc 54. 0.100/54. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clip01.mp4': 
    Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf57.41.100 
    Duration: 00:00:10.02, start: 0.023220, bitrate: 741 kb/s 
    Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 604 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) 
    Metadata: 
     handler_name : SoundHandler 
[libx264 @ 0x138a99e0] No 608/708 caption insertion into sei user data. 
[libx264 @ 0x138a99e0] using SAR=1/1 
[libx264 @ 0x138a99e0] frame MB size (54x30) > level limit (396) 
[libx264 @ 0x138a99e0] MB rate (48600) > level limit (11880) 
[libx264 @ 0x138a99e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 
[libx264 @ 0x138a99e0] profile Constrained Baseline, level 2.0 
Output #0, mpegts, to 'output.ts': 
    Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf57.25.100 
    Stream #0:0(und): Video: h264 (libx264), yuv420p, 854x480 [SAR 1:1 DAR 427:240], q=-1--1, 800 kb/s, 30 fps, 90k tbn, 30 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
     encoder   : Lavc57.24.102 libx264 
    Side data: 
     unknown side data type 10 (24 bytes) 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) 
Press [q] to stop, [?] for help 
frame= 300 fps=179 q=-1.0 Lsize= 1059kB time=00:00:10.03 bitrate= 864.9kbits/s speed= 6x  
video:949kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 11.660099% 
[libx264 @ 0x138a99e0] frame I:2  Avg QP:23.16 size: 26978 
[libx264 @ 0x138a99e0] frame P:298 Avg QP:23.09 size: 3079 
[libx264 @ 0x138a99e0] mb I I16..4: 44.3% 0.0% 55.7% 
[libx264 @ 0x138a99e0] mb P I16..4: 1.1% 0.0% 0.5% P16..4: 28.7% 8.4% 2.1% 0.0% 0.0% skip:59.3% 
[libx264 @ 0x138a99e0] final ratefactor: 22.63 
[libx264 @ 0x138a99e0] coded y,uvDC,uvAC intra: 30.8% 62.8% 23.0% inter: 7.2% 14.8% 0.3% 
[libx264 @ 0x138a99e0] i16 v,h,dc,p: 25% 39% 11% 24% 
[libx264 @ 0x138a99e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 29% 16% 5% 6% 7% 6% 4% 5% 
[libx264 @ 0x138a99e0] i8c dc,h,v,p: 45% 29% 18% 8% 
[libx264 @ 0x138a99e0] kb/s:777.19 

Команда с использованием сложного фильтра:

ffmpeg -i input.ts -map_chapters -1 -f mpegts -filter_complex "[0:v:0]yadif=deint=interlaced[v0];[v0]concat=n=1:v=1:a=0[cat_v]" -an -sn -map "[cat_v]" -vcodec libx264 -profile:v baseline -level 2 -b:v 800k output.ts 

FFmpeg Выход:

ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers 
    built with gcc 4.1.2 (GCC) 20070626 (Red Hat 4.1.2-14) 
    configuration: --enable-gpl --enable-nonfree --enable-libx264 --enable-libfdk-aac --enable-libfaac --enable-libvpx --enable-encoder=vorbis --enable-libvorbis --enable-libmp3lame --enable-libspeex --disable-decoder=prores --disable-decoder=prores_lgpl --disable-ffplay --disable-ffserver --disable-shared --enable-static --extra-cflags=-I/local/build/include --extra-libs=-lfdk-aac --extra-ldflags=-L/local/build/lib --prefix=/local/build/install 
    libavutil  55. 17.103/55. 17.103 
    libavcodec  57. 24.102/57. 24.102 
    libavformat 57. 25.100/57. 25.100 
    libavdevice 57. 0.101/57. 0.101 
    libavfilter  6. 31.100/6. 31.100 
    libswscale  4. 0.100/4. 0.100 
    libswresample 2. 0.101/2. 0.101 
    libpostproc 54. 0.100/54. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'clip01.mp4': 
    Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf57.41.100 
    Duration: 00:00:10.02, start: 0.023220, bitrate: 741 kb/s 
    Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 604 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) 
    Metadata: 
     handler_name : SoundHandler 
[libx264 @ 0x81f5200] No 608/708 caption insertion into sei user data. 
[libx264 @ 0x81f5200] using SAR=1/1 
[libx264 @ 0x81f5200] frame MB size (54x30) > level limit (396) 
[libx264 @ 0x81f5200] MB rate (48600) > level limit (11880) 
[libx264 @ 0x81f5200] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 
[libx264 @ 0x81f5200] profile Constrained Baseline, level 2.0 
Output #0, mpegts, to 'output.ts': 
    Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf57.25.100 
    Stream #0:0: Video: h264 (libx264), yuv420p, 854x480 [SAR 1:1 DAR 427:240], q=-1--1, 800 kb/s, 30 fps, 90k tbn, 30 tbc (default) 
    Metadata: 
     encoder   : Lavc57.24.102 libx264 
    Side data: 
     unknown side data type 10 (24 bytes) 
Stream mapping: 
    Stream #0:0 (h264) -> yadif 
    concat -> Stream #0:0 (libx264) 
Press [q] to stop, [?] for help 
frame= 300 fps=179 q=-1.0 Lsize= 1059kB time=00:00:10.03 bitrate= 864.9kbits/s speed= 6x  
video:949kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 11.660099% 
[libx264 @ 0x81f5200] frame I:2  Avg QP:23.16 size: 26978 
[libx264 @ 0x81f5200] frame P:298 Avg QP:23.09 size: 3079 
[libx264 @ 0x81f5200] mb I I16..4: 44.3% 0.0% 55.7% 
[libx264 @ 0x81f5200] mb P I16..4: 1.1% 0.0% 0.5% P16..4: 28.7% 8.4% 2.1% 0.0% 0.0% skip:59.3% 
[libx264 @ 0x81f5200] final ratefactor: 22.63 
[libx264 @ 0x81f5200] coded y,uvDC,uvAC intra: 30.8% 62.8% 23.0% inter: 7.2% 14.8% 0.3% 
[libx264 @ 0x81f5200] i16 v,h,dc,p: 25% 39% 11% 24% 
[libx264 @ 0x81f5200] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 29% 16% 5% 6% 7% 6% 4% 5% 
[libx264 @ 0x81f5200] i8c dc,h,v,p: 45% 29% 18% 8% 
[libx264 @ 0x81f5200] kb/s:777.19 
+1

Показать полный вывод консоли. – Mulvya

+0

В соответствии с показаниями видеовыходы идентичны. – Mulvya

+0

Вы бы так подумали, но они не ... это все мои цели – Dasmowenator

ответ

0

Я понял это. Это связано с тем, что алгоритм масштабирования по умолчанию изменился с bicubic на bilinear. Все, что мне нужно было сделать, это добавить flags=bicubic, и теперь он выглядит так же.

+0

Хорошо. Но в ваших командах я не вижу фильтра масштаба. – Mulvya