Здравствуйте!
Я пытаюсь сдлеать кодирование видеофайла "на лету" утилитой x264, но не получается.
При кодировании через сохранённый несжатый файл выходной *.mkv получается нормальный,
хотя mediainfo выводит для него не те опции, которые предполагает --preset veryslow.
При кодировании "на лету" опции сохраняются, но файл получается больше,
чем при кодировании несжатого файла и он оказывается испорченным - в рамке
плеера кадр плывёт слева направо, а вверху есть алая полоса с вертикальной жёлтой
широкой чёрточкой.
Tu-22M3.mp4, 4912297 - исходный.
/usr/bin/ffmpeg -i Tu-22M3.mp4 -an -sn -map 0 -f yuv4mpegpipe tu_22m3.y4m
tu_22m3.y4m, 1098M - несжатый.
Из файла:
/usr/bin/x264 -v --log-level warning --preset veryslow -o tu_22m3_cmpr_file.mkv \
tu_22m3.y4m > tu_22m3_file.err 2>& 1
tu_22m3_cmpr_file.mkv, 2333075 - из несжатого.
Вот его опции:
ref=3 analyse=0x3:0x113 me=hex subme=7 me_range=16 trellis=1 bframes=3 b_adapt=1
direct=1 keyint_min=24 rc_lookahead=40
"На лету":
/usr/bin/ffmpeg -i Tu-22M3.mp4 -an -sn -map 0 -f yuv4mpegpipe 2>/dev/null - | \
/usr/bin/x264 -v --log-level warning --input-res 640x352 --preset veryslow \
-o tu_22m3_cmpr_fly1.mkv - > tu_22m3_fly1.err 2>& 1
tu_22m3_cmpr_fly.mkv, 4625643 - "на лету".
Вот его опции:
ref=16 analyse=0x3:0x133 me=umh subme=10 me_range=24 trellis=2 bframes=8 b_adapt=2
direct=3 keyint_min=25 rc_lookahead=60
Вот опции veryslow:
--ref 16 --partitions all --me umh --subme 10 --merange 24 --trellis 2 --bframes 8 --b-adapt 2
--direct auto --rc-lookahead 60
Не знаю, почему свойства *.mkv, построенного ис несжатого файла, не сопвадают с опциями veryslow.
Так как же построить *.mkv "на лету", без создания файла чудовищного размера?
Например, для другого исходного файла, *.mkv в FuulHD, длительностью 4:24, *.y4m получился
размером 23520M.
Ниже - вывод mediainfo для этих трёх файлов.
**************************************** source
General
Complete name : Tu-22M3.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 4.68 MiB
Duration : 2 min 18 s
Overall bit rate : 284 kb/s
Encoded date : UTC 1904-01-01 00:00:00
Tagged date : UTC 1904-01-01 00:00:00
Writing application : Lavf57.56.101
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L3
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 2 min 18 s
Bit rate : 149 kb/s
Width : 640 pixels
Height : 352 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 24.653 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.027
Stream size : 2.46 MiB (53%)
Writing library : x264 core 148 r2748 97eaef2
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=24 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Language : English
Encoded date : UTC 1904-01-01 00:00:00
Tagged date : UTC 1904-01-01 00:00:00
Audio
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 2 min 18 s
Bit rate mode : Constant
Bit rate : 129 kb/s
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 spf)
Compression mode : Lossy
Stream size : 2.12 MiB (45%)
Language : English
Default : Yes
Alternate group : 1
Encoded date : UTC 1904-01-01 00:00:00
Tagged date : UTC 1904-01-01 00:00:00
**************************************** mkv from tu_22m3.y4m, 2333075
General
Unique ID : 307853703870399395256256424201891560404 (0xE79A77782C6B5BC6F367788BFD6F3BD4)
Complete name : tu_22m3.mkv
Format : Matroska
Format version : Version 4 / Version 2
File size : 2.49 MiB
Duration : 2 min 18 s
Overall bit rate : 151 kb/s
Writing application : Lavf57.56.101
Writing library : Lavf57.56.101 / Lavf57.56.101
ErrorDetectionType : Per level 1
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L3
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Codec ID : V_MPEG4/ISO/AVC
Duration : 2 min 18 s
Bit rate : 148 kb/s
Width : 640 pixels
Height : 352 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 24.653 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.027
Stream size : 2.44 MiB (98%)
Writing library : x264 core 148 r2748 97eaef2
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=24 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Language : English
Default : Yes
Forced : No
DURATION : 00:02:18.199000000
HANDLER_NAME : VideoHandler
**************************************** mkv in fly, 4625643
General
Complete name : tu_22m3_cmpr_fly.mkv
Format : Matroska
Format version : Version 2
File size : 4.41 MiB
Duration : 2 min 16 s
Overall bit rate : 272 kb/s
Writing application : x264 r2748 97eaef2
Writing library : Haali Matroska Writer b0
IsTruncated : Yes
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L3.1
Format settings, CABAC : Yes
Format settings, ReFrames : 16 frames
Codec ID : V_MPEG4/ISO/AVC
Duration : 2 min 16 s
Bit rate : 266 kb/s
Width : 640 pixels
Height : 352 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.047
Stream size : 4.32 MiB (98%)
Writing library : x264 core 148 r2748 97eaef2
Encoding settings : cabac=1 / ref=16 / deblock=1:0:0 / analyse=0x3:0x133 / me=umh / subme=10 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=8 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Language : English
Default : Yes
Forced : No
Пользователь добавил сообщение 25 Февраля 2021, 09:27:32:
Оказалось, что "на лету" надо кодировать с "-f rawvideo", создаётся файл с теми же характеристиками,
что и при кодировании файла, созданного с "-f yuv4mpegpipe", Bits/(Pixel*Frames) тоже совпадает.
Размер *.mkv тоже почти такой же - 2326375, а при создании из файла 2333075.
Ещё раз привожу команду:
/usr/bin/ffmpeg -i Tu-22M3.mp4 -an -sn -map 0 -f rawvideo 2>/dev/null - | \
/usr/bin/x264 -v --log-level warning --input-res 640x352 --preset veryslow \
-o tu_22m3_cmpr_fly.mkv - > tu_22m3_fly.err 2>& 1