অতিরিক্ত ফাইল ছাড়াই একক কমান্ড ব্যবহার করে একাধিক ডাব্লুএইভি ফাইল সংযুক্ত করুন


32

আমি এফএফএমপিইগ ব্যবহার করে একাধিক ডাব্লুএইভি ফাইলগুলিকে একক ডাব্লুএইভি ফাইলের সাথে সংযুক্ত করতে চাই।

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি এবং এটি প্রয়োজনীয় ফাইল উত্পন্ন করে।

COMMAND:

ffmpeg -f concat -i mylist.txt -c copy output.wav

ফাইল:

#mylist.txt
file '1.wav'
file '2.wav'
file '3.wav'
file '4.wav'

তবে আপনি দেখতে পাচ্ছেন যে সমস্যাটি হ'ল আমাকে একত্রে টেক্সট ফাইল তৈরি করতে হবে যা ডাব্লুএইভি ফাইলের তালিকাটিকে একত্রিত করতে হবে।

আমি এই সমস্ত কাজগুলি করতে পারি, তবে আমি একটি একক কমান্ডের মতো দেখতে পছন্দ করব

ffmpeg -i 1.wav -i 2.wav -i 3.wav -i 4.wav output.wav 

অথবা

ffmpeg -i "concat:1.wav|2.wav|3.wav|4.wav" -c copy output.wav

আমি এই দুটি সাধারণ কমান্ড চেষ্টা করেছি তবে তারা কেবলমাত্র 1.wav একটি কমান্ড লিখতে সহায়তা করুন (অথবা উপরের 2 টি কমান্ড সংশোধন করুন) যা পছন্দসই ফলাফল অর্জন করতে পারে।

দয়া করে অন্যান্য মিডিয়া এনকোডার / সম্পাদকদের পরামর্শ করবেন না, আমি কেবল এফএফএমপিইগই ব্যবহার করতে চাই, কারণ এটি ইতিমধ্যে ইনস্টল এবং অন্যান্য জায়গায় ব্যবহৃত হয়েছে।

উত্তর:


34

আপনি কনক্যাট ফিল্টার ব্যবহার করে দেখতে পারেন ; এটি পুনরায় এনকোডিং প্রয়োজন, এবং তাই আরও সিস্টেমের সংস্থান গ্রহণ করবে (এই নির্দিষ্ট ক্ষেত্রে যে কোনও অস্পষ্ট আধুনিক কম্পিউটারে একটি খুব সামান্য পরিমাণ), তবে পিসিএম -> পিসিএম অডিওটি গাণিতিকভাবে ক্ষতিহীন হওয়া উচিত। আপনার ক্ষেত্রে, আপনি এই জাতীয় কিছু ব্যবহার করবেন:

ffmpeg -i input1.wav -i input2.wav -i input3.wav -i input4.wav \
-filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]' \
-map '[out]' output.wav

আপনার যদি পাঁচটি ইনপুট ফাইল থাকে তবে ব্যবহার করুন n=5


4
দ্রষ্টব্য: [0:0][1:0][2:0][3:0]ফাইলের সংখ্যার সাথে মিল রাখতে কাস্টমাইজ করবেন না । এটি যেমন বলে ঠিক তেমনটি ব্যবহার করুন। আপনার কেবলমাত্র ইনপুট ফাইলগুলি পরিবর্তন করতে হবে n=4
কেভন

8
@ কেভন: আপনি কি নিশ্চিত? আমি ffmpeg (সংস্করণ N-49352-gc46943e x64) অভিযোগ করি Too many inputs specified for the "concat" filter.যখন আমি মূল কোডটি দিয়ে কেবল 2 ইনপুট প্রক্রিয়া করার চেষ্টা করি। যদিও আমি সরিয়ে দিই [2:0][3:0]... এটি কাজ করে ... যা আমার কাছে বোধগম্য হয় যেহেতু এই ক্ষেত্রে স্ট্রিম 2:0এবং 3:0... এর মতো কোনও জিনিস নেই ...
Bigue Nique

আমি @ বিগিউনিকের সাথে একমত আমিও একই ত্রুটির মধ্যে দৌড়েছি এবং যদিও এটি কিছুটা নির্বোধ বোধ করে, প্রদত্ত যথাযথ ক্রম উত্পন্ন করতে কিছু কোড লিখেছিল n
রায়ান ডুভাল

19

আমি মনে করি সেরা বিকল্পটি সোফ ব্যবহার করা, এফএফএমপিগ নয়:

$ sox short1.wav short2.wav short3.wav long.wav

সমাধান আসে কীভাবে আমি সংখ্যার ক্রম ধরে রাখার (শূন্য-প্যাডড নয়) সংযুক্ত করার জন্য .wav ফাইলগুলির একটি গুচ্ছ সংযুক্ত করব?


1
এটি এর জন্য কাজ করতে পারে .wavতবে soxসমর্থন বলে মনে হচ্ছে না .mp3
অ্যারোন ফ্রাঙ্ক

1
প্রশ্নটি সম্পর্কে অবিকল ছিল.wav
হেক্টর এম মোনাচি

1
আমি জানি, আমি যে কেউ নন-ওয়াভ ফাইলগুলি সহ এই পদ্ধতিটি ব্যবহার করার চেষ্টা করে তার জন্য আমি কেবল একটি নোট যুক্ত করছি।
অ্যারন ফ্রেঙ্ক

প্রশ্নটি স্পষ্টভাবে বলেছে যে কেবলমাত্র ffmpeg ব্যবহার করে একটি সমাধান প্রয়োজন!
মনু

সক্স .mp3 ফাইল খুব সমর্থন করতে পারে না
বেঞ্জামিন

9

FFmpeg উইকি উল্লেখ ব্যবহার concatপ্রোটোকল সব ধরনের ফাইল সঙ্গে সম্ভব নয়। এটি বেশিরভাগ এমপিইজি ধারক এবং বিটস্ট্রিমগুলির সাথে সূক্ষ্মভাবে কাজ করে, তবে অবশ্যই পিসিএম অডিও সহ ডাব্লুএইভি ফাইল নয়।

অগত্যা আপনার কোনও অস্থায়ী ফাইল তৈরি করতে হবে এবং এটি ব্যবহার করতে হবে না। বাশ (বা অন্যান্য শেলগুলি যা প্রক্রিয়া প্রতিস্থাপন সমর্থন করে ) এর সাহায্যে আপনি একক কমান্ডে সমস্ত কিছু করতে পারেন:

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) output.wav

প্রক্রিয়া প্রতিস্থাপনটি <( )ফ্লাইতে একটি ফাইল — বা, সুনির্দিষ্টভাবে বলতে গেলে একটি ফাইল বর্ণনাকারী creates তৈরি করে, যা ffmpegপড়তে পারে। এই ফাইলটিতে .wavবর্তমান ডিরেক্টরিতে প্রতিটি ফাইলের পাথ থাকবে । $(pwd)আপনার বর্তমান ডিরেক্টরিটি সম্পর্কিত ফাইলের বর্ণনাকারীর তুলনায় নয়, সঠিক পথটি পেতে আমাদের এটির উপসর্গ করতে হবে।

অবশ্যই, বিকল্পের মধ্যে থাকা কমান্ডটি অন্য কোনও কিছুতে পরিবর্তন করা যেতে পারে।


2
আপনি যদি Unsafe file nameত্রুটি পান তবে আপনার -safe 0আগে বিকল্প প্রয়োজন -i। সুত্র। stackoverflow.com/q/38996925/297679
Nobu

3

আরেকটি বিকল্প হ'ল কনক্যাট ব্যবহার করা

ffmpeg -i "concat: file1.mp3 | file2.mp3 | file3.mp3" -কোডেক অনুলিপি.এমপি 3


1
সুপারউসারকে স্বাগতম: যদিও এটি প্রশ্নের উত্তর দিতে পারে বা নাও করতে পারে, (একটি উত্তর গৃহীত হয়েছে) যদি আপনার সমাধানটি বিশদভাবে নির্দেশনা সহ কার্যকর নির্দেশাবলী অনুসরণ করতে পারে তবে আপনি যদি কিছু ব্যাখ্যা সরবরাহ করতে পারেন তবে এটি আরও ভাল উত্তর হবে। আপনি যদি নিজের উত্তরটি সঠিক বলে মনে করেন তবে এই জিনিসগুলি করুন এবং পুনরায় সম্পাদনা করুন। -: দয়া করে কয়েক মিনিট সময় নিতে এবং পড়া superuser.com/help : .Answering superuser.com/help/how-to-answer superuser.Thankyou চাই, আবার স্বাগত জানাই
mic84

আমি এটি পরীক্ষা করেছি এবং এটি কাজ করে না বলে মনে হচ্ছে
নিক লং

1

উইন 8 এর সিএমডি.এক্সই .ব্যাট স্ক্রিপ্টে:

Rem Get number of source files
For /F %%A In ('Dir *.3gp /B /A-D ^| Find /C /V ""') Do      Set FilCnt=%%A

Rem Build list of source filenames
Set Lst=
For    %%A In (     *.3gp                          ) Do Call Set Lst=%%Lst%% -i %%A

Rem Concat and Convert sources to target
FFMPeg.EXE %Lst% -filter_complex concat=n=%FilCnt%:v=0:a=1 -vn Output.OGG

এইভাবে, আপনি উত্স ফাইলের নাম বা কনক্যাট-কাউন্ট প্যারামিটার নিয়ে মাথা ঘামান না।


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