Ffmpeg দিয়ে পুনরায় / লুপ ইনপুট ভিডিওটি?


52

আমি কেবল ffmpeg সহ একটি এমপি 4 ভিডিও লুপ করতে এবং বর্তমান সেটিংস এবং কোডেক রাখতে চাই।

উদাহরণস্বরূপ, যদি ইনপুট.এমপি 4 দীর্ঘ হয় 10:10, এবং আমি এটি 4 বার লুপ করতে চাই তাই আউটপুট। এমপি 4 দীর্ঘ 0:40 দীর্ঘ, এটি করার জন্য আমি কীভাবে নীচের কমান্ড লাইনটি পরিবর্তন করতে পারি?

ffmpeg -i input.mp4 -c copy output.mp4

আমি চেষ্টা করেছিলাম...

ffmpeg -loop 4 -i input.mp4 -c copy output.mp4

... তবে আমি ত্রুটিটি পেয়েছি "অপশন লুপটি পাওয়া যায় নি।"


কুইকটাইম 7 প্রো এবং মুভ ধারক ব্যবহার করুন। সুতরাং আপনি ওপেনসোর্সের চেয়ে বড় ফাইলের আকার পাবেন না।
Мышков

উত্তর:


69

কনক্যাট ডেমাক্সার

এটি আপনাকে পুনরায় এনকোডের প্রয়োজন ছাড়াই একটি ইনপুট লুপ করতে দেয়।

  1. একটি পাঠ্য ফাইল করুন। 4 বার পুনরাবৃত্তি করতে একটি উদাহরণ পাঠ্য ফাইলের সূচি।

    file 'input.mp4'
    file 'input.mp4'
    file 'input.mp4'
    file 'input.mp4'
    
  2. তারপরে চালান ffmpeg:

    ffmpeg -f concat -i list.txt -c copy output.mp4
    

লিনাক্স ব্যবহারকারীদের জন্য

এই উদাহরণটি উপরের মতো একই তবে আপনাকে ম্যানুয়ালি বানাতে হবে না list.txt:

for i in {1..4}; do printf "file '%s'\n" input.mp4 >> list.txt; done
ffmpeg -f concat -i list.txt -c copy output.mp4

সর্বাধিক ব্যবহৃত ব্যবহৃত আধুনিক শেলগুলির সাহায্যে আপনি এমনকি list.txtফাইলটি সম্পূর্ণরূপে এড়াতে পারবেন । উদাহরণস্বরূপ, বাশ সহ:

ffmpeg -f concat -i <(for i in {1..4}; do printf "file '%s'\n" input.mp4; done) -c copy output.mp4

আরও দেখুন:


লুপ ফিল্টার

লুপ ফিল্টারটি 4 বার লুপে ব্যবহার করার উদাহরণ , প্রতিটি লুপ 75 ফ্রেম হয়, প্রতিটি লুপ ইনপুটটির প্রথম 25 টি ফ্রেম এড়িয়ে যায়:

ffmpeg -i input -filter_complex loop=loop=3:size=75:start=25 output
  • বা শর্টহ্যান্ড ব্যবহার করুন: loop=3:75:25
  • ফিল্টারিংয়ের জন্য পুনরায় এনকোডিং দরকার।
  • এই ফিল্টারটি সমস্ত ফ্রেমকে মেমোরিতে রাখে
  • ব্যবহার করে loop=34 বার লুপ হবে।
  • অসীমভাবে লুপ করতে -1
  • আপনাকে অবশ্যই লুপটিতে ফ্রেমের সংখ্যা তালিকাভুক্ত করতে হবে (উপরের উদাহরণে 75 হিসাবে দেখানো হয়েছে)। সর্বাধিক মান 32767।
  • এছাড়াও দেখুন ffmpeg -h filter=loop

চলচ্চিত্র ফিল্টার

সিনেমা ফিল্টার একটি লুপ বিকল্প আছে। দেখুন উত্তর Monah Tuk নীচে। ফিল্টারিংয়ের জন্য পুনরায় এনকোডিং দরকার। অডিওর জন্য অ্যামোভি ফিল্টার ব্যবহার করুন।


-stream_loop পছন্দ

দেখুন উত্তর thingy দ্বারা নিচে এবং উত্তর জ্ঞান দ্বারা।

নোট করুন যে এই বিকল্পটি বগি ছিল (বাগ রিপোর্টগুলি # 5719 , # 6121 , এবং # 7043 দেখুন ) সুতরাং পুরানো বিল্ডগুলির জন্য (FFmpeg 4.0.x রিলিজ ব্রাঞ্চ সহ 2018 06-27 এর চেয়ে বেশি পুরানো কিছু) কাজ করতে পারে না। পুরানো বিল্ডগুলির ব্যবহারকারীদের জন্য, টিকিট # 6121-এ মাল্ভিয়ার দ্বারা উল্লিখিত হিসাবে প্রথমে এম কেভি বা টিএস-তে পুনরায় ম্যাক্স করা উচিত তারপরে -stream_loopপরবর্তী কমান্ডে ব্যবহার করা work


-loop পছন্দ

-loopবিকল্প নির্দিষ্ট ইমেজ ফাইল ডিমাক্সার এবং GIF muxer , তাই এটি সাধারণত ভিডিও ফাইল জন্য ব্যবহার করা যাবে না, কিন্তু এটা অসীম লুপ ইনপুট ইমেজ একটি সিরিজ ব্যবহার করা যাবে। এই উদাহরণটি বার বার লুপ -t 30করবে তবে আউটপুট সময়কাল 30 সেকেন্ডে সীমাবদ্ধ থাকবে:

ffmpeg -loop 1 -i %03d.png -t 30 output.mkv

বা একটি জিআইএফ আউটপুট লুপ করতে:

ffmpeg -i input -loop 3 output.gif

এই এমপি 4 ফাইল দিয়ে ভাল কাজ করে?
থমাস কিং

3
আমি এই ত্রুটিটি > <(for i in {1..4}; do printf "file '%s'\n" input.mp4; done) -bash: /dev/fd/63: Permission denied
পেয়েছি

1
@ জামেসফজ্যাং - আমি মনে করি কারণ এটি আপনার ফাইলের একটি নিখুঁত পথের প্রয়োজন (যেমন এখানে ব্যাখ্যা করা হয়েছে: trac.ffmpeg.org/wiki/Concateate )। এটি পূরণ করতে, আপনি লিখতে পারেন: ffmpeg -safe 0 -f concat -i <(আমার জন্য {1.4 in; প্রিন্টফ "ফাইলটি '$ পিডব্লুডি' / '% s' \ n" ইনপুট.এমপি 4 করুন; সম্পন্ন) ) -সি অনুলিপি আউটপুট.এমপি 4
ফ্রাঙ্কলি

1
আমার হিসাবে এটি 4 বারের জন্য খ্যাতি এড়ানো ছাড়াই পুরো সময়ের ভিডিওটির পুনরাবৃত্তি করতে কাজ করেffmpeg -i video.mp4 -filter_complex "loop=4:32767" output.mp4
ভ্লাদ

এই ইস্যুটি 4 বছরের পুরানো এবং কোনোটাই লক্ষ্য করা যায়নি যে -stream_loopবিভাগের দ্বিতীয় ইস্যুর লিঙ্কটি প্রথমটির মতো একই টিকিটের দিকে ইঙ্গিত করছে ...
লিওনিড উসোভ

15

কমপক্ষে FFmpeg 2.8.x এ (তবে পুরাতনকেও খুব বেশি কাজ করা উচিত) আপনি lavfiইনপুট ফর্ম্যাট এবং জটিল ফিল্টার গ্রাফ হিসাবে movieএবং setptsফিল্টারগুলি -iবিকল্প হিসাবে যুক্তি হিসাবে ব্যবহার করতে পারেন ।

পরবর্তী কমান্ডটি আপনার জন্য এই কাজটি করছে:

ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4

জিরো loop=আর্গুমেন্ট মানে অনন্ত লুপ। মান বৃহত্তর শূন্য সেট পুনরাবৃত্তি গণনা। setptsদ্বিতীয় এবং পরবর্তী পুনরাবৃত্তির জন্য পিটিএস সামঞ্জস্য করার জন্য প্রয়োজনীয় ফিল্টারগুলি, অন্যথায় বেশিরভাগ আউটপুট ম্যাক্সারগুলি নন-মোনোটোনিক পিটিএস বৃদ্ধিতে ব্যর্থ হবে: লুপ পিটিএসকে পুনরায় সংযুক্ত করে না।

দ্রষ্টব্য, যে ডিকোডিং / এনকোডিং ছাড়াই বাইপাস ফ্রেমগুলি ধরে নিয়ে ফিল্টারগুলি ব্যবহার করা অসম্ভব: ডিজাইন ফিল্টার কেবল ডিকোডযুক্ত ফ্রেমের সাথেই ডিল করে।

-stream_loopএফএফএমপেইগ ২.৮.২ এ নতুন ইনপুট বিকল্পটি প্রবর্তিত। আমি প্রথম দেখি এটি আরও সহজ কাজ করে এবং ট্রান্সকোডিং ছাড়াই অনুলিপি কন্টেন্টকে অনুমতি দেয়:

ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4

তবে এটি পিটিএস পুনরায় গণনা করে না এবং আউটপুট ফাইলটি ভুল। আপনি যদি পিটিএস ঠিক করতে ফিল্টার যোগ করেন (দেখুন setpts) আপনাকে অবশ্যই অপসারণ করতে হবে -c copy। কেবল বিটস্ট্রিম ফিল্টারগুলি এনকোডযুক্ত প্যাকেটগুলির সাথে ডিল করতে পারে তবে পিটিএস ঠিক করার জন্য কোনও বিটস্ট্রিম ফিল্টার নেই (দেখুন: https://ffmpeg.org/ffmpeg-bitstream-filters.html )

যে কোনও ক্ষেত্রে দ্বিতীয় পাসে ffmpeg ত্রুটি সহ ব্যর্থ হয়:

input.mp4: Resource temporarily unavailable

আমার চারপাশের জ্ঞাত কাজ : পিটিএস সীমা ছাড়াই ইনপুট ফাইলের জন্য ধারক ব্যবহার করুন (স্ট্রিমিং ধারক)। তাদের মধ্যে একজন, আমার পরিচিত, তিনি হলেন এমপিইজি-টিএস। সুতরাং, আপনি আপনার এমপি 4 ফাইলটিকে এমপিইজি-টিএসে রূপান্তর করতে পারবেন:

ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts

এবং অনন্ত ফাইল রচনা করতে পরবর্তী কমান্ডটি ব্যবহার করুন:

ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4

(বিটস্ট্রিম ফিল্টারগুলি কেবলমাত্র প্রয়োজন হলে আমার নমুনাগুলিতে প্রয়োজন হয়)

FFmpeg> = 2.8.2 এক্ষেত্রে প্রয়োজন।


1
এই আদেশটি চালানো আমাকে ত্রুটি দেয়: "[এমপি 4 @ 00000000053fa1a0] # 0 প্রবাহে কোডেক কাঁচাভিডিওর জন্য ট্যাগ খুঁজে পাওয়া যায়নি, বর্তমানে কোডেক ধারকটিতে সমর্থিত নয়"। যদি আমি ইনপুট দেওয়ার আগে -vcodec h264 যোগ করি তবে সেই ত্রুটিটি অদৃশ্য হয়ে যায়, তবে এনকোডারটি প্রস্থান করে না। একটি শূন্য নয় লুপ কাউন্ট সরবরাহ করে প্রচুর ত্রুটি তৈরি হয় তবে প্রস্থান হয়। ফাইলটি কোনও বৈধ আউটপুট নয়।
জ্ঞান

1
স্ট্রিম_লুপের জন্য ডকুমেন্টেশন বলছে "লুপ 0 মানে লুপ নয়, লুপ -1 মানে অসীম লুপ।"
জ্ঞান

ভুল ইনপুট ফাইল বলে মনে হচ্ছে। আপনি এটা ভাগ করে নিতে পারেন? "লুপ 0 এর অর্থ লুপ নয়, লুপ -1 এর অর্থ অসীম লুপ।" - মনে হচ্ছে আমি পুরানো দস্তাবেজগুলি দেখতে
পেয়েছি

1
আমি ভুলে গেছি: ট্রান্সকোডিং (ডিকোড / এনকোড) ধরে ফিল্টার। নকশা করে. সুতরাং আপনি অপসারণ করতে হবে -c copy। উত্তর স্থির।
মোনাঃ টুক

1
জেনে ভাল লাগলো, তবে আপনার যদি উত্পন্ন করার জন্য একটি বড় লুপ থাকে তবে তা একটি তাৎপর্য সীমাবদ্ধতা।
জ্ঞান

14

Ffmpeg 2.8.4 সহ, নিম্নলিখিত কমান্ড আউটপুট.এমপি 4 তৈরি করে যা ffmpeg প্রক্রিয়াটি বন্ধ না হওয়া পর্যন্ত ইনপুট.এমপি 4 এর পুনরাবৃত্তি অনুলিপি:

ffmpeg -stream_loop -1 -i input.mp4 -c copy output.mp4

এই কমান্ডটি নিজে থেকে শেষ হবে না এবং আউটপুট ফাইলটি অসীমভাবে বৃদ্ধি পাবে।


2
দ্রুততম পদ্ধতি বলে মনে হচ্ছে
জোসেফ

2
দ্রুততম পদ্ধতিটি একটি সংক্ষিপ্ত বিবরণ, এই পদ্ধতিটি কয়েক সেকেন্ডের মধ্যে একাধিক ঘন্টা পর্যন্ত ভিডিও র‌্যাম্প করে।
স্লেইবয়

এটি একটি দুর্দান্ত সুবিধাজনক পদ্ধতি, কারণ পুনরাবৃত্তি লাইনগুলির সাথে কোনও ফাইল তৈরি করার দরকার নেই।
মার্কাস জেলার

-1

প্রশ্ন: "... আমি কীভাবে নিম্নলিখিত কমান্ড লাইনে এটি পরিবর্তন করতে পারি? Ffmpeg -i input.mp4 -c copy আউটপুট.এমপি 4"?

উত্তর: কমান্ডগুলি কোন সংস্করণটির সাথে কাজ করে তার সমস্যাগুলি এড়ানো সহজ পদ্ধতিটি 'তুচ্ছ সমাধান':

ffmpeg -i ইনপুট.এমপি 4 -i ইনপুট.পি 4 -আই ইনপুট.এমপি 4 -আই ইনপুট.পি 4 -সি অনুলিপি আউটপুট.এমপি 4

আরও দেখুন: https://trac.ffmpeg.org/wiki/Concateate অনেক উদাহরণের জন্য।


2
এটি কোনও মনযোগ দেয় না । অন্তত একটি কনক্যাট পদ্ধতি ব্যবহার করতে হবে: প্রোটোকল, ফিল্টার বা ডেমাক্সার। এই কমান্ডে, ffmpeg এর অটো ম্যাপিং ইনপুটগুলির মধ্যে থেকে একটি ভিডিও, একটি অডিও এবং একটি সাবটাইটেল স্ট্রিম নির্বাচন করবে। যেহেতু তারা অভিন্ন, এটি ওপির প্রথম কমান্ডের সমতুল্য।
জ্ঞান

মুলভ্যা পরীক্ষার জন্য ধন্যবাদ, যেমন এটি ডক্সে বর্ণিত আচরণের থেকে পৃথক: ffmpeg.org/ffmpeg.html# বিবরণ - "-i -i /tmp/test%d.mp4" ব্যবহার করে যদি ফাইলের নামের সাথে মিল থাকে তবে ( ইত্যাদি। সম্ভব)
রব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.