FFmpeg এক্সট্র্যাক্ট ক্লিপ - স্ট্রিম ফ্রেমের হার ধারক ফ্রেমের হারের চেয়ে আলাদা (x264, aac)


8

সংক্ষিপ্তসার
এইচ .২64 ভিডিওর এমন একটি উচ্চতর ফ্রেম রেট বলে মনে হচ্ছে যাতে আমি উত্তোলনের চেষ্টা করছি এমন ভিডিওর সময়কালে প্রয়োগ করার ক্ষেত্রে একটি স্কেলিং ফ্যাক্টরের প্রয়োজন (900x কম)।

বডি
আমি যে সিনেমাটি থেকে এমপি 4 ফর্ম্যাটে ( হ্যান্ডব্রেক ব্যবহার করে তৈরি করা হয়েছে ) একটি ক্লিপ বের করার চেষ্টা করছি । মেনকোডার এবং ভিএলসি চেষ্টা করার পরে, আমি এফএফম্পেগকে একটি শট দেওয়ার সিদ্ধান্ত নিয়েছি কারণ কোডেকগুলি অনুলিপি করার সময় এটি সবচেয়ে ঝামেলাজনক ছিল। এটি হ'ল মেনকোডার এবং ভিএলসির সাথে তুলনা করে, ফলস্বরূপ ফাইলটি এখনও কুইটটাইমে খেলতে পারা যায় (আমি পেরিয়ান ইত্যাদি সম্পর্কে জানি, আমি কেবল এই সমস্ত কীভাবে কাজ করে তা শিখার চেষ্টা করছি)।

যাইহোক, আমার আদেশটি নিম্নরূপ ছিল:

ffmpeg -ss 01:15:51 -t 00:05:59 -i outofsight.mp4 \ 
-acodec copy -vcodec copy clip.mp4

অনুলিপি চলাকালীন, নিম্নলিখিতগুলি আসে:

Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from outofsight.mp4':
  Duration: 01:57:42.10, start: 0.000000, bitrate: 830 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x384, 25 tbr, 22500 tbn, 45k tbc
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to 'out.mp4':
    Stream #0.0(und): Video: libx264, yuv420p, 720x384, q=2-31, 90k tbn, 22500 tbc
    Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo, s16
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 2591 fps=2349 q=-1.0 size=    8144kB time=101.60 bitrate= 656.7kbits/s
…

5:59 পিরিয়ড ক্লিপের পরিবর্তে, আমি পুরো চলচ্চিত্রটি পাই। সুতরাং, এটি পরীক্ষা করতে, আমি সাথে ffmpeg কমান্ড চালিয়েছি -t 00:00:01। আমি যা পেয়েছিলাম তা হ'ল একটি 15:00 মিনিটের ক্লিপ। সুতরাং আমি কিছু ব্ল্যাক বাক্স ইঞ্জিনিয়ারিং করেছি এবং -t1 সেকেন্ডটি 900 সেকেন্ড হিসাবে ব্যাখ্যা করা হলে কোন মানটি লিখতে হবে তা গণনা করে আমার বিকল্পটি স্কেল করার সিদ্ধান্ত নিয়েছি । আমার পছন্দসই 359 গুলি ক্লিপের জন্য, আমি 0.399 গুলি গণনা করেছি এবং তাই আমার ffmpeg আদেশটি হয়ে গেছে:

ffmpeg -ss 01:15.51 -t 00:00:00.399 -i outofsight.mp4 \ 
-acodec copy -vcodec copy clip.mp4

এটি কাজ করে, তবে কেন সময়কালটি 900 দ্বারা ছোট করা হয় তা আমার কোনও ধারণা নেই further আরও অনুসন্ধান করে দেখা গেছে, প্রতিটি এফএফএমপিগের রেখাটি রয়েছে:

Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)

45000/25 = 1800. কোথাও কোনও সম্পর্ক থাকতে হবে। কোনওভাবে, অশ্লীল উচ্চ ফ্রেমের হার সময় নিয়ে সমস্যা তৈরি করছে। কিভাবে ফ্রেম হার এত বেশি? এ সম্পর্কে সর্বোত্তম অংশটি হ'ল ফলস্বরূপ ক্লিপ.এমপি 4 এর একই বৈশিষ্ট্য রয়েছে (অনুলিপি করা ভিডিও কোডেকের কারণে), এবং এর থেকে আরও ক্লিপ নেওয়া -tসময়কাল বিকল্পের জন্য একই স্কেলিংয়ের প্রয়োজন । অতএব, আমি এটি যাচাই করতে ইচ্ছুক ব্যক্তির জন্য এটি উপলব্ধ করে রেখেছি

পরিশিষ্টগুলি
আমার সিস্টেমে ffmpeg এর উপস্থাপক (ম্যাকপোর্টস ffmpeg পোর্ট ব্যবহার করে নির্মিত):

FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --prefix=/opt/local --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    1. 4. 0 /  1. 4. 0
  libswscale     1. 7. 1 /  1. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Jan  4 2010 21:51:51, gcc: 4.2.1 (Apple Inc. build 5646) (dot 1)

সম্পাদনা
এটি কোনও ত্রুটি ছিল কিনা তা নিশ্চিত নয় তবে এটি এখনকার আমার ffmpeg সংস্করণে ঠিক করা হয়েছে বলে মনে হচ্ছে, কমপক্ষে এই ভিডিওটির জন্য (ম্যাকপোর্টগুলি থেকে 0.6.1 সংস্করণ)।


পুনরায় এনকোডিং কোনও সমাধান নয় এবং পাঁচ মিনিটের সামগ্রীতে কয়েক ঘন্টা ডিকোডিং করা অযৌক্তিক এবং সম্ভবত অন্তর্নিহিত সমস্যাটির সমাধান করবে না। দুর্দান্ত প্রাথমিক গবেষণা বিটিডব্লিউ। আপনি সম্ভবত ধরে নিচ্ছেন যে fps ffmpeg সনাক্ত করছিল তা আপনার সমস্যার মূল কারণ। দেখে মনে হচ্ছে ffmpeg এর পরবর্তী সংস্করণটি আপনার সমস্যার সমাধান করেছে তবে আমি একটি মন্তব্য করব। আমি একটি ভিন্ন ধারক বিন্যাসে -c অনুলিপি করার পরামর্শ দিয়েছি। এটি বিভিন্ন ধরণের প্রভাব ফেলতে পারে তবে পরীক্ষার জন্য এটি পরবর্তী একটি ভাল ধাপ ছিল।
ডিস্টব

উত্তর:


1

Ffmpeg সহ, বিকল্পগুলির অবস্থানের বিষয়টি গুরুত্বপূর্ণ। আপনার উদাহরণ সহ, এটি ইনপুটটিতে -ss এবং -t প্রয়োগ করার চেষ্টা করছে। এর পরিবর্তে আউটপুটটিতে বিকল্পগুলি প্রয়োগ করবে এটি এর মতো ব্যবহার করুন:

ffmpeg -i outofsight.mp4 -ss 01:15:51 -t 00:05:59 -acodec copy -vcodec copy clip.mp4

বর্তমান ffmpeg সহ, সঠিক বাক্য গঠনটি হ'ল:

ffmpeg -i outofsight.mp4 -ss 01:15:51 -t 00:05:59 -c copy clip.mp4

1

আমার একই সমস্যা ছিল এবং আমার সমাধানটি নিম্নলিখিত ছিল:

        $ffmpegout = array();           
        //10 is the number of images you want from video
        $fracduration = ($info['duration']/10);             

এক্সিকিউট ('ffmpeg -y -i /testmedia/'.$infolays'filename']। '-vf fps = fps = 1 /'.$ fracduration।' -f image2 /testmedia/images/output%03d.jpg 2 > & 1 ', f ffmpegout); // print_r ($ ffmpegout);

এটি ভিডিওর দৈর্ঘ্য নির্বিশেষে সমস্ত ভিডিওর জন্য 10 টি চিত্র দেয়

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