libx264 এর সাথে 10-বিটে 4: 2: 2 এনকোডিং


10

আমি বিশ্বাস করি যে libx264 এখন 10-বিট 4: 2: 2 এনকোডিংগুলি সক্ষম করতে সক্ষম তবে এটি কাজ করে বলে মনে হয় না। আমি ffmpeg (নীচের তথ্য) ব্যবহার করছি, এবং আমি সরাসরি x264 এনকোডার চেষ্টা করেছি। আমি চেষ্টা করেছিলাম

ffmpeg.exe -i input.mov -c:v libx264 -profile:v high422 -crf 20 -pix_fmt yuv422p output.mp4

এবং এটি চমৎকার 4: 2: 2 আউটপুট উত্পাদন করে তবে কেবল 8 বিট গভীরতায়,

[libx264 @ 00000000055a9de0] profile High 4:2:2, level 4.0, 4:2:2 8-bit

এবং আমি চেষ্টা করেছি

ffmpeg.exe -i input.mov -c:v libx264 -profile:v high10 -crf 20 -pix_fmt yuv422p output.mp4

এবং এটি আমাকে ত্রুটি দেয়:

x264 [error]: high10 profile doesn't support 4:2:2
[libx264 @ 00000000051ead60] Error setting profile high10.
[libx264 @ 00000000051ead60] Possible profiles: baseline main high high10 high422 high444

X264 - সম্পূর্ণরূপে ডকুমেন্টেশনগুলিতে আমি পাই:

  --profile <string>      Force the limits of an H.264 profile
                              Overrides all settings.
                              [...]
                              - high10:
                                No lossless.
                                Support for bit depth 8-10.
                              - high422:
                                No lossless.
                                Support for bit depth 8-10.
                                Support for 4:2:0/4:2:2 chroma subsampling.
                              - high444:
                                Support for bit depth 8-10.
                                Support for 4:2:0/4:2:2/4:4:4 chroma subsampling.

সুতরাং এটি 10 ​​বিট গভীরতায় 4: 2: 2 এবং স্পষ্টতই 10 বিট 4: 4: 4 এ করতে পারে তবে আউটপুট বিটের গভীরতা কীভাবে সেট করা যায় তার কোনও ইঙ্গিত নেই। --input-depth <integer> Specify input bit depth for raw inputআউটপুট বিট গভীরতার জন্য বিকল্প ছাড়াও কিছুই নেই।


2
আমি এটি পেয়েছি: x264.nl/x264/10bit_02-ateme-why_does_10bit_save_bandwidth.pdf স্পষ্টতই আপনি 10 বিট সহ আরও ভাল সংকোচনের দক্ষতা (আকার বনাম মানের) পাবেন। আমি নিয়মিত 10 বিট ব্যবহার শুরু করতে পারি, যদি এটি এনকোড করা খুব ধীর না হয়।
পিটার কর্ডেস

উত্তর:


12

x264 8-বিট এবং 10-বিট উভয় আউটপুট সমর্থন করে এবং আপনাকে বিশেষ কিছু করতে হবে না।

ffmpeg

আপনি যদি ব্যবহার করেন তবে ffmpegদেখতে পারেন কোন পিক্সেল ফর্ম্যাট এবং বিট গভীরতা libx264 দ্বারা সমর্থিত:

$ ffmpeg -h encoder=libx264
  [...]
  Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le

10-বিট পিক্সেল ফর্ম্যাটগুলি হ'ল: yuv420p10le, yuv422p10le, yuv444p10le।

x264

আপনি x264সমর্থিত বিট গভীরতার জন্যও পরীক্ষা করতে পারেন :

$ x264 --help
  [...]
  Output bit depth: 8/10

পূর্বে আপনাকে x264 সংকলন করতে হবে --bit-depth=10এবং তারপরে আপনার ffmpegএকটি 8-বিট বা 10-বিট libx264 এর সাথে লিঙ্ক করতে হয়েছিল, তবে এটি এখন অপ্রয়োজনীয়। দেখুন সমন্বয়সাধন করা 8-বিট এবং 10-বিট CLI এবং লাইব্রেরী আরও তথ্যের জন্য।


অভিশাপ, যা বিষয়গুলিকে জটিল করে তোলে। সুতরাং আমি দুটি x264 লাইব্রেরির সাথে যুক্ত দুটি ffmpeg বাইনারি প্রয়োজন। আপনি কি জানেন যে কোথাও 10 বিট x264 এর স্থির বিল্ড রয়েছে?
দণ্ডিত করুন

এখানে তাদের খুঁজে পেতে আপনি হবে: download.videolan.org/pub/x264/binaries আপনি একটি অতিশয় দীর্ঘ বিরক্তিকর প্রক্রিয়া invoving ইনস্টল mingw, yasm, Git এবং জিসিসি এবং এখানে প্রায় mucking প্রচুর আছে এটা নিজেকে গড়ে তুলতে চাইলে: doom10.org /index.php?topic=26.0 তবে আমি এটি কাজ করতে পারি না, মূলত বোকা কর্পোরেট ফায়ারওয়ালের কারণে যা গিটকে অনুমতি দেয় না।
দোরোখা

হয়তো আপনি জেরানোকে এমন বিল্ড সরবরাহ করতে পারেন । দুঃখিত, উইন্ডোজ আসার সময় আমি মোটামুটি অকেজো।
লোগান

আমিও তাই, এটাই সমস্যা। আমি একটি বিল্ড অনুরোধ পোস্ট করেছি, আমরা এটি কীভাবে দেখব।
দণ্ডিত করুন

1
এফডব্লিউআইডাব্লিউড আজকাল লাইবক্স ২64৪ "উভয়ই" আমি বিশ্বাস করি ...
রজারডপ্যাক

6

সম্পাদনা: আমি সফলভাবে হাঁস টেক অফের একটি 10 ​​বিট এনকোড তৈরি করেছি ।

প্রথম উপায়: আমি একটি 10 ​​বিট x264 বাইনারি তৈরি করেছি যা স্থিরভাবে libx264 এর সাথে লিঙ্ক করে।

cp -al x264-git x264-10bit  # instead of changing my normal git checkout
cd x264-10bit
./configure --extra-cflags=-march=native --enable-static --disable-interlaced --bit-depth=10
make -j2
sudo install x264 /usr/local/bin/x264-10bit

mkfifo pipe.y4m
ffmpeg -v verbose -i in -pix_fmt yuv420p10le -strict experimental -f yuv4mpegpipe pipe.y4m
   (open another shell window / tab / screen(1) window):
x264 pipe.y4m --crf 30 --preset ultrafast -o 10bit-420.mkv

(অতিমাত্রায় ও নিম্নমানের কারণ এটি ধারণার প্রমাণ, মানসম্পন্ন পরীক্ষা নয়)) আমি স্বস্কেল দিয়ে এটি সংকলন করিনি। (লিবাভুটিলে বা কোনও কিছুতে এটি কোনও আরজিবি পিক্স এফএমটি সম্পর্কে অসন্তুষ্ট ছিল)। ইনপুট কালারস্পেসটি না মিললে এটি ত্রুটিযুক্ত হয়ে যায় --output-csp i444, আপনি ক্রোমাটি ক্রমবর্ধমানভাবে x264 ডাউনসাম্পল রাখতে না চাইলে আসলেই দুর্দান্ত। এটি 10 yuv444p14le.y4mমিনিটের আউটপুট উত্পাদন করে কয়েক ফ্রেম খাওয়ালে এটি কাজ করে । (এটি কিছুটা গভীরতা কেটে ফেলতে পারে তবে স্বস্কেল ছাড়াই ক্রোমা ডাউনস্যাম্পল নয়))

দ্বিতীয় উপায়: 10 LD_LIBRARY_PATHবিট libx264.so নির্বাচন করতে ব্যবহার করুন

আপনি প্রতিটি কিছুর জন্য একই ffmpeg গতিশীল-সংযুক্ত বাইনারি ব্যবহার করতে পারেন।

cp -al x264-git x264-10bit  # instead of changing my normal git checkout
cd x264-10bit
./configure  --extra-cflags=-march=native '--libdir=/usr/local/lib/high-bit-depth-codec' '--includedir=/usr/local/lib/high-bit-depth-codec/include' --disable-cli --enable-shared --disable-interlaced --bit-depth=10
make -j2
sudo make install-lib-shared  # this Makefile target depends on install-lib-dev, hence setting --includedir

alias highdepth-ffmpeg='LD_LIBRARY_PATH=/usr/local/lib/high-bit-depth-codec ffmpeg'

highdepth-ffmpeg -v verbose -framerate 50 -f image2 \
-pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi \
-pix_fmt yuv420p10le -crf 30 -preset ultrafast \
-sws_flags +accurate_rnd+print_info  \
with_ld_path.420p10.accurate_rnd.mkv
ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.101 / 56. 18.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5.  7.101 /  5.  7.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
  Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
[graph 0 input from stream 0:0 @ 0x1b6d8c0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
[auto-inserted scaler 0 @ 0x1b7dae0] w:iw h:ih flags:'0x41004' interl:0
[format @ 0x1b7e940] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
SwScaler: reducing / aligning filtersize 1 -> 4
    Last message repeated 1 times
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 9 -> 8
[swscaler @ 0x1b500c0] bicubic scaler, from rgb48be to yuv420p10le using MMXEXT
[swscaler @ 0x1b500c0] 1280x720 -> 1280x720
[auto-inserted scaler 0 @ 0x1b7dae0] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv420p10le sar:0/1 flags:0x41004
[libx264 @ 0x1b78da0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x1b78da0] profile High 10, level 3.2, 4:2:0 10-bit
[libx264 @ 0x1b78da0] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=30.0 qcomp=0.60 qpmin=0 qpmax=81 qpstep=4 ip_ratio=1.40 aq=0
Output #0, matroska, to 'with_ld_path.420p10.accurate_rnd.mkv':
  Metadata:
    encoder         : Lavf56.18.101
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p10le, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
    Metadata:
      encoder         : Lavc56.20.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.e=00:00:09.84 bitrate=12060.2kbits/s    
frame=  500 fps= 14 q=-1.0 Lsize=   14714kB time=00:00:10.00 bitrate=12053.5kbits/s    
video:14709kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.031423%
Input file #0 (./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi):
  Input stream #0:0 (video): 500 packets read (2765056000 bytes); 500 frames decoded; 
  Total: 500 packets (2765056000 bytes) demuxed
Output file #0 (with_ld_path.420p10.accurate_rnd.mkv):
  Output stream #0:0 (video): 500 frames encoded; 500 packets muxed (15062147 bytes); 
  Total: 500 packets (15062147 bytes) muxed
[libx264 @ 0x1b78da0] frame I:2     Avg QP:43.00  size:144760
[libx264 @ 0x1b78da0] frame P:498   Avg QP:49.83  size: 29663
[libx264 @ 0x1b78da0] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264 @ 0x1b78da0] mb P  I16..4:  5.1%  0.0%  0.0%  P16..4: 79.3%  0.0%  0.0%  0.0%  0.0%    skip:15.6%
[libx264 @ 0x1b78da0] coded y,uvDC,uvAC intra: 67.8% 60.5% 41.9% inter: 50.1% 16.3% 2.8%
[libx264 @ 0x1b78da0] i16 v,h,dc,p:  5% 54% 33%  8%
[libx264 @ 0x1b78da0] i8c dc,h,v,p: 53% 39%  6%  3%
[libx264 @ 0x1b78da0] kb/s:12049.24
(same bitrate and stats as with the y4m pipe,
so it behaves the same with the same input data... good.)

আমি অবশ্যই সেই মানের সেটিংসের সাথে দৃষ্টিভঙ্গিভাবে কিছু দেখার চেষ্টা করিনি। আমি কেবল এটি দ্রুত চালিত হওয়া চাই এবং ডিস্কের একগুচ্ছ জায়গাটি নষ্ট না করিনি যেহেতু আমি সবসময় বিভিন্ন বিষয়ে চেষ্টা করার সময় প্রচুর আউটপুট ফাইল তৈরি করি।

পৃথক x264 প্রসেসে বিশাল y4m ডেটা পাইপ না করা 12 এর পরিবর্তে 14 fps যেতে পেরেছিল, তাই আল্ট্রাফ্লাস্টের জন্য একটি শালীন গতিপথ। ধীরে ধীরে এনকোডগুলি সেই ওভারহেডটি বামন করবে।

আমার উত্স 48 বিগ আরজিবি। আমি খুঁজে পেয়েছি যে নির্ভুল_আরেন্ডের এম কেভি আউটপুটটিতে কোনও প্রভাব নেই। ( এম কেভিভি শিরোনামের কয়েকটি বিট ব্যতীত -sws_flags, সহ -sws_flags +accurate_rndএবং এর সাথে বিট-অভিন্ন ফলাফল -vf scale=flags=accurate_rnd, সম্ভবত এলোমেলোভাবে এমকেভি ইউআইডি। এমনকি -qp 0, তাই আমি এটি গোলাকার ত্রুটির সাথে হারাচ্ছি না b cmp -l f1 f2 | lessবাইনারি ফাইলগুলির তুলনা করতে যেগুলি হতে পারে কিছু প্রাথমিক পার্থক্য পরে একই। বা ssdeep -p। সম্ভবত accurate_rndএখন ডিফল্ট?)

এখানে একটি ffmpeg swscaler পতাকা রয়েছে যা আপনি যদি ffmpeg কে আপনার ক্রোমা: ডিফল্ট বাইকুবিকের পরিবর্তে ল্যাঙ্কজোসকে নিচে নমুনা দিচ্ছেন। (আমি ধরে নিই যে ল্যান্সকোসগুলি এখনও উচ্চ মানের জন্য সেরা পছন্দ হিসাবে বিবেচিত হয়েছে? কিছুক্ষণ পড়া হয়নি))

highdepth-ffmpeg -i in -pix_fmt yuv420p10le ...encode...opts...
-vf scale=flags=lanczos -sws_flags +accurate_rnd+print_info with_ld_path.420p10.accurate_rnd.lanczos.mkv

যুক্ত +lanczosকরা -sws_flagsকাজ করে না:

[format @ 0x28e4940] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[swscaler @ 0x28b60c0] Exactly one scaler algorithm must be chosen, got 204
[auto-inserted scaler 0 @ 0x28e3ae0] Failed to configure output pad on auto-inserted scaler 0
Error opening filters!

যদি আপনি এটি 10 ​​বিটের চেয়েও গভীর ইনপুট খাওয়ানোর চেষ্টা করেন তবে ffmpeg প্রত্যাখ্যান করে।

highdepth-ffmpeg ... -pix_fmt yuv444p14le
[graph 0 input from stream 0:0 @ 0x36ec9c0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
Incompatible pixel format 'yuv444p14le' for codec 'libx264', auto-selecting format 'yuv444p10le'
[Parsed_scale_0 @ 0x36e2a00] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv444p10le sar:0/1 flags:0x200
[libx264 @ 0x3701d80] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x3701d80] profile High 4:4:4 Predictive, level 3.2, 4:4:4 10-bit

প্রকৃতপক্ষে, ffmpeg এর libx264 ড্রাইভার সর্বদা x264 খাওয়ানোর জন্য এটি বিট-গভীরতার সংকলন করা জোর করে। যেমন -pix_fmt yuv420p:

Incompatible pixel format 'yuv420p' for codec 'libx264', auto-selecting format 'yuv420p10le'

x264.h বলেছেন:

/* x264_bit_depth:
 *      Specifies the number of bits per pixel that x264 uses. This is also the
 *      bit depth that x264 encodes in. If this value is > 8, x264 will read
 *      two bytes of input data for each pixel sample, and expect the upper
 *      (16-x264_bit_depth) bits to be zero.
 *      Note: The flag X264_CSP_HIGH_DEPTH must be used to specify the
 *      colorspace depth as well. */
X264_API extern const int x264_bit_depth;

আমি মনে করি অভ্যন্তরীণভাবে x264 (সিএলআই) সর্বদা পিক্সেল ফর্ম্যাটগুলি রূপান্তর করতে হবে, কোডটিতে 8 বিট ইনপুট নেই, প্রতিটি ফাংশনের 10 বিট আউটপুট সংস্করণ। এবং এছাড়াও, আমি মনে করি বিভিন্ন ইনপুট বিট গভীরতার স্বীকৃতিটি কেবল x264 CLI এ রয়েছে, লাইব্রেরি এপিআইতে নয়। আমি কৌতূহল করছি যখন আপনি যেখানে উচ্চতর বিট সেট থাকে সেই API ইনপুটটি খাওয়ান তখন কী হয় ... (ffpeg আপনাকে কোড হ্যাক না করেই এটি করার অনুমতি দেয় না, সুতরাং এড়ানো এড়ানোর বিষয়ে কারও চিন্তা করার দরকার নেই))

frame.c:370:  So this is why ffmpeg can't give 8-bit input to libx264
#if HIGH_BIT_DEPTH
    if( !(src->img.i_csp & X264_CSP_HIGH_DEPTH) )
    {
        x264_log( h, X264_LOG_ERROR, "This build of x264 requires high depth input. Rebuild to support 8-bit input.\n" );
        return -1;
    }
#else

কোনও পিক্স_এফএমটি নির্দিষ্ট না করে, আরজিবি yuv444p10leইনপুট দেওয়ার সময় ffmpeg চয়ন করে । বা এর সাহায্যে libx264rgbএটি 8 বিট আরজিবি ফাংশনগুলিতে ফিড করে যা 16 বিট (যার মধ্যে 10 টি তাৎপর্যপূর্ণ) এবং সিগফল্টস> আশা করে to আমি যে উজানে রিপোর্ট করব ...

 highdepth-ffmpeg -v verbose -framerate 50 -f image2 -pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi  -qp 0 -preset ultrafast -sws_flags print_info+accurate_rnd -frames 2  -c:v libx264rgb lossless.rgb.mkv
ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.101 / 56. 18.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5.  7.101 /  5.  7.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
  Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
[graph 0 input from stream 0:0 @ 0x1eb9660] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
[auto-inserted scaler 0 @ 0x1eba120] w:iw h:ih flags:'0x41000' interl:0
[format @ 0x1eb94c0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
SwScaler: reducing / aligning filtersize 1 -> 4
    Last message repeated 1 times
SwScaler: reducing / aligning filtersize 1 -> 1
    Last message repeated 1 times
[swscaler @ 0x1eba480] bicubic scaler, from rgb48be to rgb24 using MMXEXT
[swscaler @ 0x1eba480] 1280x720 -> 1280x720
[auto-inserted scaler 0 @ 0x1eba120] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:rgb24 sar:0/1 flags:0x41000
No pixel format specified, rgb24 for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264rgb @ 0x1ecf020] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264rgb @ 0x1ecf020] profile High 4:4:4 Predictive, level 3.2, 4:4:4 10-bit
[libx264rgb @ 0x1ecf020] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, matroska, to 'lossless.rgb.mkv':
  Metadata:
    encoder         : Lavf56.18.101
    Stream #0:0: Video: h264 (libx264rgb) (H264 / 0x34363248), rgb24, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
    Metadata:
      encoder         : Lavc56.20.100 libx264rgb
Stream mapping:
  Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264rgb))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.
Segmentation fault (core dumped)

আমি সেই উজানের প্রতিবেদন করব।

যাইহোক, এটি প্রমাণিত হয়েছে যে ffmpeg, বা আপনি libx264, libx265, এবং আপনি যে কোনও কিছু উচ্চ-বিট-গভীরতা-সংকলিত সংস্করণগুলির সাথে চালাতে চান এমন কোনও প্রোগ্রাম নিজের জন্য নিজেকে দ্বৈত-বিট-গভীরতার পরিবেশ তৈরি করা খুব সুন্দর ছিল easy । (এ কারণেই আমি একে "সংক্ষিপ্ত নাম" বলেছি, কেবলমাত্র একটি ছোট নামের জন্য "10 বিবিট" নয়))

সম্পাদনার সমাপ্তি: নীচে রেকম্পাইলিং ছাড়াই এখানে আমার ঝাঁকুনি। এবং উইন for64 এর জন্য কীভাবে ffmpeg ক্রস-সংকলন করা যায় সে সম্পর্কে ভাল bit

এটি নিজে চেষ্টা করে দেখেছি, যেহেতু আপনি এমন একটি সেমিডলাইন দিয়ে চেষ্টা করেননি যা উচ্চ বিট গভীরতার ইনপুটটি x264 এ খাওয়ানোর চেষ্টা করেছিল।

ffmpeg পিক্সেল বিন্যাসের নামগুলি ( ffmpeg -pix_fmts) কেবল কোনও বিন্যাস নির্দিষ্ট করে না, তারা সঠিক বিট বিন্যাসে ম্যাপ করে এবং এইভাবে প্রতিটি বিন্যাস + বিট-গভীরতার কম্বোটির আলাদা নাম থাকে। আমি মনে করি আপনি -pix_fmt yuv422p"আমার ইনপুটটির সমান বিট গভীরতায় 422 তে রূপান্তর" হওয়ার অর্থ প্রত্যাশা করেছিলেন।

উইকিপিডিয়া বলে যে h.264 কেবলমাত্র হাই 444 পিপি দিয়ে 8-14 বিট গভীরতা সমর্থন করে, অন্যরা কেবল 10 বিট পর্যন্ত। হাই 444PP হ'ল একমাত্র প্রোফাইল যা অনুমানমূলক লসলেস কোডিং সমর্থন করে, যা x264 -qp 0বা এর জন্য ব্যবহার করে -crf 0। সম্পাদনা: AFAICT, x264 এখনও কেবল 8, 9 বা 10 বিটের জন্য সংকলিত হওয়া সমর্থন করে।

যাইহোক, এখানে একটি কমান্ড থেকে অকেজো আউটপুট রয়েছে যা কার্যকর হয় না কারণ আমি আমার স্থানীয় x264 পুনরায় সংকলন করি নি। (তবে এটি পুনরায় সংযুক্ত x264 এর সাথে কাজ করা উচিত I আমি নিজেই এই উত্তরটি খেলতে চাইলে আমি এই উত্তরটি সম্পাদনা করতে পারি))

ffmpeg -v verbose -framerate 50 -f image2 -pattern_type glob -i ./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/'*'.sgi -c:v libx264 -pix_fmt yuv420p10le -profile high10 yuv-high.mkv

ffmpeg version N-68044-gb9dd809 Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 14 2015 23:21:08 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libbluray --enable-libschroedinger --enable-libtheora --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000 --enable-libvidstab
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.101 / 56. 18.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5.  7.101 /  5.  7.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, image2, from './3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi':
  Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: sgi, rgb48be, 1280x720, 50 tbr, 50 tbn, 50 tbc
Please use -profile:a or -profile:v, -profile is ambiguous
File 'yuv-high.mkv' already exists. Overwrite ? [y/N] y
[graph 0 input from stream 0:0 @ 0x24797e0] w:1280 h:720 pixfmt:rgb48be tb:1/50 fr:50/1 sar:0/1 sws_param:flags=2
Incompatible pixel format 'yuv420p10le' for codec 'libx264', auto-selecting format 'yuv420p'
[auto-inserted scaler 0 @ 0x24938c0] w:iw h:ih flags:'0x4' interl:0
[format @ 0x2494680] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0x24938c0] w:1280 h:720 fmt:rgb48be sar:0/1 -> w:1280 h:720 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 0x248eda0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0x248eda0] profile High, level 3.2
[libx264 @ 0x248eda0] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: 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=3 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=25 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
Output #0, matroska, to 'yuv-high.mkv':
  Metadata:
    encoder         : Lavf56.18.101
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1280x720, q=-1--1, 50 fps, 1k tbn, 50 tbc
    Metadata:
      encoder         : Lavc56.20.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (sgi (native) -> h264 (libx264))
Press [q] to stop, [?] for help
No more output streams to write to, finishing.e=00:00:09.02 bitrate=18034.6kbits/s    
frame=  500 fps=6.6 q=-1.0 Lsize=   21568kB time=00:00:09.96 bitrate=17739.6kbits/s    
video:21564kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.020773%
Input file #0 (./3_DucksTakeOff_720p50_CgrLevels_SINC_FILTER_SVTdec05_/*.sgi):
  Input stream #0:0 (video): 500 packets read (2765056000 bytes); 500 frames decoded; 
  Total: 500 packets (2765056000 bytes) demuxed
Output file #0 (yuv-high.mkv):
  Output stream #0:0 (video): 500 frames encoded; 500 packets muxed (22081186 bytes); 
  Total: 500 packets (22081186 bytes) muxed
[libx264 @ 0x248eda0] frame I:2     Avg QP:29.33  size:131874
[libx264 @ 0x248eda0] frame P:257   Avg QP:31.07  size: 75444
[libx264 @ 0x248eda0] frame B:241   Avg QP:33.54  size: 10073
[libx264 @ 0x248eda0] consecutive B-frames:  3.6% 96.4%  0.0%  0.0%
[libx264 @ 0x248eda0] mb I  I16..4:  0.1% 71.9% 28.0%
[libx264 @ 0x248eda0] mb P  I16..4:  0.0%  4.5%  1.1%  P16..4: 36.1% 37.6% 19.6%  0.0%  0.0%    skip: 1.0%
[libx264 @ 0x248eda0] mb B  I16..4:  0.0%  0.2%  0.1%  B16..8: 34.3%  2.6%  1.1%  direct: 9.6%  skip:52.2%  L0: 6.2% L1:46.6% BI:47.2%
[libx264 @ 0x248eda0] 8x8 transform intra:78.4% inter:60.4%
[libx264 @ 0x248eda0] coded y,uvDC,uvAC intra: 98.3% 95.3% 85.9% inter: 51.7% 34.8% 12.8%
[libx264 @ 0x248eda0] i16 v,h,dc,p:  5% 77%  4% 14%
[libx264 @ 0x248eda0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  2% 43% 11%  3%  5%  2% 16%  2% 16%
[libx264 @ 0x248eda0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:  3% 40%  9%  4%  6%  3% 17%  2% 16%
[libx264 @ 0x248eda0] i8c dc,h,v,p: 47% 40%  6%  7%
[libx264 @ 0x248eda0] Weighted P-Frames: Y:1.2% UV:0.4%
[libx264 @ 0x248eda0] ref P L0: 70.9% 26.5%  1.8%  0.7%  0.0%
[libx264 @ 0x248eda0] ref B L0: 99.5%  0.5%
[libx264 @ 0x248eda0] kb/s:17664.40

$ x264 --fullhelp | less
...
Output bit depth: 8 (configured at compile time)

Incompatible pixel format 'yuv420p10le' for codec 'libx264', auto-selecting format 'yuv420p'লাইন নোট করুন ।

সম্ভবত আমার প্রয়োজন নেই -profile, এবং উচ্চ-বিট-গভীরতার x264 সহ এটি কেবল কাজ করবে। (এবং সম্ভাব্যভাবে 444 10 বিট বাছাই করুন, যা এফএফএমপিগ কল করে yuva444p10le)) আমি মনে করি উচ্চ বিট গভীরতা x264 গ্রহণ করতে পারে yuv444p14le, তবে এখনও কেবল 10 বিট এইচ .264 উত্পাদন করবে। সেমিডলাইন x264 --fullhelp8 থেকে 10 পর্যন্ত আউটপুট বিট গভীরতার বিষয়ে বেশ সুস্পষ্ট is অদ্ভুত যা -profile high10নিঃশব্দে 8 বিট x264 দ্বারা উপেক্ষা করা হবে।

অভ্যন্তরীণভাবে, উচ্চ বিট গভীরতার জন্য সংকলিত x264 কোনও 10 বিট ডেটা সঞ্চয় করার জন্য 16bpp ব্যবহার করে, সুতরাং এটি সম্ভবত গতি অনুসন্ধান এবং 16 বিট মান সহ আরও কিছু করতে পারে। এবং ডিসিটি 10 ​​বিটের চেয়ে 16 বিট বেশি হতে পারে, যদি না 6 বিট উপেক্ষা করে গতি অর্জন করা যায়। আপনি যদি ডিসিটি এর আগে 10 বিটের নিচে গোল করেন তার চেয়ে কিছুটা আলাদা ডিসিটি সহগ উত্পাদন করতে পারে। (সুতরাং আপনি সম্ভাব্যভাবে x264 খাওয়ানোর আগে 10 বিবিতে রূপান্তর থেকে আলাদা আউটপুট পান, বনাম এটি 12, 14 বা 16 বিট দেওয়ার আগে)) আমার প্রোব করা উচিত। কোডটি দেখুন বা স্টাফ আপ করার আগে চেষ্টা করুন। এই অনুচ্ছেদে বিশ্বাস করবেন না। : P: P

(সম্পাদনা করুন: ffmpeg x264-10bit কম উপাদান প্রতি 10 বিট এর বেশি কিছু খাওয়াবে না It এটি বিট গভীরতা নিজেই হ্রাস করতে swscale ব্যবহার করবে))

আমি বিস্মিত হয়েছি যে উচ্চ-বিট-গভীরতার জন্য সংকলিত হয়ে গেলে গ্লোবাল ভেরিয়েবল এবং এপিআই ফাংশনগুলির জন্য আলাদা আলাদা নাম ব্যবহার করতে x264 এবং x265 প্যাচ করা কত কঠিন হবে। তারপরে আপনি উভয় সংস্করণটি একবারে তৈরি করতে পারেন এবং উভয়ের সাথেই ffmpeg লিঙ্ক করেছেন। Ffmpeg libx264এবং libx264rgbমোড়ক ইনপুট স্ট্রিমের উপর নির্ভর করে এপিআইয়ের উপযুক্ত সংস্করণটি কল করার যত্ন নিতে পারে। (অন্যথায় আপনার ffmpeg এ মোট 4 টি পৃথক x264 "কোডেক" লাগবে -c:v libx264-deepবা libx264rgb-deepd

উইন্ডোজের জন্য কীভাবে ffmpeg সংকলন করা যায়

সম্পাদনা: উইন্ডোজের জন্য, আমি মনে করি না যে কোনও LD_LIBRARY_PATHলাইবক্স ২64৪ ডিএলএলের মতো সুবিধাজনক কিছু আছে , তাই আপনার সেরা বেটটি এখনও উচ্চ-বিট-গভীরতার স্ট্যাটিক বাইনারি এবং সাধারণ ব্যবহারের জন্য অন্য একটি তৈরি করতে পারে। উচ্চ-গভীরতা libx264 মোটামুটি আউটপুট স্বাভাবিক গভীরতা h.264 পারবেন না। কেবল একটি গতির পেনাল্টি নয়, এটি কেবল পারে না।

উইন্ডোজের জন্য আপনার নিজের ffmpeg (স্ট্যাটিক বাইনারি) সংকলনের সবচেয়ে সহজ উপায়টি হল https://github.com/rdp/ffmpeg-windows-build-helpers দিয়ে । গিট একটি লিনাক্স মেশিনে রেপো ক্লোন করুন (অথবা ওএস এক্স এর মতো একটি ওয়ার্কিং জিসিসি সহ আরও একটি সিস্টেম), তারপরে চালান

./cross_compile_ffmpeg.sh --high-bitdepth=y --disable-nonfree=n --build-choice=win64

এটি প্রথম দৌড়ে প্রায় 8 ঘন্টা সময় নিয়েছে, কারণ এটি উত্স থেকে মিংডাব্লু-ক্রস-সংকলন জিসিসি তৈরি করেছিল এবং অন্যান্য সমস্ত কিছু সহ। (আপনি যদি প্রথমে খারাপ সংকলকটি সংকলন করে থাকেন তবে জিসিসি বুটস্ট্র্যাপে নিজেকে পুনঃনির্মাণ করতে বেশ কয়েকবার ডিফল্ট হয়েছিল))

আপনি এর সাথে বিল্ড স্ক্রিপ্টটি আপডেট করতে পারেন git pullএবং এটি আবার চালানো ffmpeg, x264, x265 এর জন্য সর্বশেষ গিট আপডেটগুলি টানতে পারে এবং এটি উত্স থেকে সংকলিত অন্যান্য প্রকল্পগুলির কয়েকটি হতে পারে। (বেশিরভাগ ক্ষেত্রে এটি কেবল টারবলগুলি ডাউনলোড করে))

আমার লিনাক্স ডেস্কটপটি তার বয়স দেখাচ্ছে। আমার বেশিরভাগ উইন্ডেন্ডো রয়েছে আমি বেশিরভাগ গেমসের জন্যই ব্যবহার করি। যেহেতু আমি ভিডিও এনকোডিংয়ের সাথে ঘোরাঘুরি শুরু করেছি, আমি এর কোয়াড-কোর স্যান্ডিব্রিজকে তার জন্যও বেশ দরকারী বলে মনে করি e x265 এর জন্য। সম্ভবত x265 এর কয়েকটি ফাংশনটিতে কেবল AVX / SSE4 এর জন্য asm সংস্করণ রয়েছে, সুতরাং এটি আমার এসএসএসই 3 লিনাক্স মেশিনে (কনরো) সিটিতে ফিরে আসবে। এটি বা এটি 1fps এ আরও লক্ষণীয় ...


আমি যখন সম্পাদনা করি তখন স্ট্যাকেক্সচেঞ্জ লোককে অবহিত করে? যদি এটি না হয় একটি মন্তব্য পোস্ট।
পিটার কর্ডেস

এটি ওএস এক্সে অনেক সহজ, যেখানে ডায়নামিক লিঙ্কিং ব্যবহৃত হয়। কেবল brew reinstall x264 --with-10-bitএবং আপনি হয়ে গেছেন, ffmpeg নতুন x264 স্বাদ ব্যবহার করবে :)
প্রদর্শন নাম

1
@ সার্জবর্শ: এই উত্তরের মূল বিষয়টি হ'ল একই সময়ে উভয় স্বাদ ইনস্টল করা ছিল, যাতে আপনি গ্রন্থাগারটি পুনরায় ইনস্টল না করে 8 বিট এবং 10 বিটের তুলনা করতে পারেন। ওএস এক্স ডায়নামিক লিঙ্কিং লিনাক্সের মতো একইভাবে কাজ করে, আপনি চাইলে অন্য স্বাদের সাথে আপনি একইভাবে আপনার libx264 ইনস্টলটি প্রতিস্থাপন করতে পারেন।
পিটার কর্ডেস

@ পিটারকর্ডস হুম, আমার খারাপ। আপনি ঠিক বলেছেন
প্রদর্শিত নাম

0

আমি নীচের লিঙ্কটি থেকে https://sourceforge.net/projects/ffmpeg-hi/?source=typ_redirect এফএফএমপিএগ ডাউনলোড করেছি

এবং 4: 2: 2 10 বিট h.264 ফাইল তৈরি করতে নীচের কমান্ডটি প্রবেশ করিয়েছে। ffmpeg-hi10-heaac.exe -i "im.mp4" -c: v libx264 -pix_fmt yuv422p10le যুব-উচ্চ-.ts

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.