android - অ্যান্ড্রয়েডে দ্রুত ভিডিও সংক্ষেপণ




video ffmpeg (2)

আমি সার্ভারে ভিডিও ফাইলগুলি আপলোড করতে এবং আপলোড করার আগে সংকোচ করতে চাই। আমি ffmpeg libx264 ব্যবহার করছি। আমি দেখেছি ভাইবার এক মিনিটের মধ্যে M৮ এমবি আকারের ৩০ সেকেন্ডের ভিডিও ফাইল আপলোড করতে পারে [এটি কমিয়ে ২.৩ মেগাবাইট করুন]। আমি জানতে চাই তারা কীভাবে এত তাড়াতাড়ি করে?

আমি এ পর্যন্ত যা চেষ্টা করেছি -

FFMPEG version :  n2.4.2 
Built with gcc 4.8

Build Configuraiton : --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=

COMMAND:

ffmpeg -y -i /storage/emulated/0/main.mp4 -s 480x320 -r 20 -c:v libx264 -preset ultrafast -c:a copy -me_method zero -tune fastdecode -tune zerolatency -strict -2 -b:v 1000k -pix_fmt yuv420p /storage/emulated/0/output.mp4

এখন পর্যন্ত ফলাফলটি হচ্ছে, একটি 30 সেকেন্ড 78 এমবি ফাইলটি 4.3 এমবিতে সংকুচিত হয় যা প্রায় 1 মিনিট 28 সেকেন্ডে লাগে। এখানে কনসোল ডাম্প - http://pastebin.com/rn81acGx । আমি মূলত সংকোচনের জন্য সময়টি হ্রাস করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?

আগাম ধন্যবাদ.


x264 সিপিইউ ক্ষমতা

আপনার ffmpeg কনসোল আউটপুট / লগটি libx264 থেকে নিম্নলিখিত বার্তাটি দেখায়:

using cpu capabilities: none!

আপনার ডিভাইসের জন্য আমি এমন কিছু আশা করব:

using cpu capabilities: ARMv7 NEON

আপনি কীভাবে x264 সংকলন করেছেন তা পুনরায় মূল্যায়ন করা উচিত যাতে এটি আপনার সিপিইউর ক্ষমতাগুলি সঠিকভাবে সমর্থন করে। none এটি উল্লেখযোগ্যভাবে ধীর এনকোড হয় none

  • --disable-asm জন্য --disable-asm কনফিগার বিকল্পটি ব্যবহার করবেন না।
  • আপনি x264 এর জন্য ./configure চালানোর পরে কনসোল আউটপুটটি asm: yes দেখানো উচিত asm: yes
  • সাম্প্রতিক x264 ব্যবহার করুন। আমি অনেক ব্যবহারকারী পুরানো সংস্করণগুলি সংকলন করতে দেখছি যা অপ্টিমাইজেশন থেকে বাদ দিতে পারে।
  • তারপরে ffmpeg পুনরায় কম্পাইল করুন যাতে এটি নতুন x264 ব্যবহার x264 । আপনার একাধিক সংস্করণ থাকলে ffmpeg ভুল x264 লিঙ্ক না করে তা নিশ্চিত করুন।

মিডিয়া কোডেক হার্ডওয়্যার ত্বরণ

ffmpeg বর্তমানে অ্যান্ড্রয়েডের মিডিয়া কোডেক এপিআইয়ের মাধ্যমে হার্ডওয়্যার সহায়তায় এইচ .264 এবং এইচইভিসি ডিকোডিং সমর্থন করে যা সামগ্রিক প্রক্রিয়াকরণের সময় হ্রাস করতে সহায়তা করে। আরও তথ্যের জন্য এবং ক্ষমতাগুলির একটি আপ-টু-ডেট তালিকার জন্য এফএফম্পেগ উইকি: হার্ডওয়্যার এক্সিলারেশন দেখুন

এটি ব্যবহারের জন্য আপনার ffmpeg --enable-jni এবং --enable-mediacodec সাথে সংকলিত রয়েছে তা নিশ্চিত করুন।


আপনার যদি ডিভাইসের কোনও হার্ডওয়্যার ত্বরণযুক্ত এনকোডিং ক্ষমতা ব্যবহার করতে হবে। যতদূর আমি বলতে পারি ffmpeg Android এ এইচডব্লিউ ত্বরণযুক্ত এনকোডিং সরবরাহ করে না। একটি libstagefright তবে এটি HW ডিকোডিংয়ের জন্য ব্যবহৃত হয়।

আপনার টার্গেটের এপিআই সংস্করণটির উপর নির্ভর করে আপনি MediaCodec করার জন্য এইচডাব্লু এনকোডিং করতে MediaCodec (এপিআই 16) এবং MediaMuxer (এপিআই 18) ব্যবহার করতে পারবেন। আপনি যদি MediaCodec সাথে এনকোড পরিচালনা করেন তবে আপনি MediaCodec করতে ffmpeg ব্যবহার করতে পারেন, যার জন্য কেবলমাত্র API 16 প্রয়োজন।





libx264