উত্তর:
পূর্ববর্তী উত্তরটি কেবল আউট.মোভ নামে 1 টি আউটপুট ফাইল তৈরি করবে। প্রতিটি পুরানো চলচ্চিত্রের জন্য পৃথক আউটপুট ফাইল তৈরি করতে, এটি চেষ্টা করে দেখুন।
for i in *.avi;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.mov"
done
i was unexpected at this time.
do name=`echo "${i%.*}"`;
এগুলিতে বিন্দু (এবং স্পেস) দিয়ে ফাইলের নামগুলিতে কাজ করবে।
.bat
উইন্ডোজ জন্য?
জন্য লিনাক্স এবং MacOS এই এক লাইন মধ্যে সম্পন্ন করা যাবে ব্যবহার পরামিতি সম্প্রসারণ আউটপুট ফাইলের ফাইলে এক্সটেনশন পরিবর্তন করতে:
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
ffmpeg
একই ফাইলটিতে ইনপুট এবং আউটপুট পাওয়া যায় না। 2) আমি নিশ্চিত নই যে বাশ কমান্ডগুলি স্থানীয়ভাবে উইন্ডোজ 10 এ কাজ করে। হতে পারে আমার উত্তরটি যুক্ত করা উচিত যে এটি এমন সিস্টেমগুলির দিকে লক্ষ্যযুক্ত যা লিনাক্স এবং ম্যাকোসের মতো নেটিভ ব্যাশ ব্যবহার করতে পারে। lxs এই প্রশ্নের জন্য একটি উইন্ডোজ উত্তর সরবরাহ করেছে।
for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
এবং উইন্ডোজে:
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
একটি লাইনের ব্যাশ স্ক্রিপ্ট করা সহজ হবে - *.avi
আপনার ফাইল টাইপের সাথে প্রতিস্থাপন করুন:
for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov ; done
-qscale
। এটি সরান এবং ডিফল্ট সেটিংস ব্যবহার করুন, বা -crf
পরিবর্তে ব্যবহার করুন (ডিফল্ট হয় -crf 23
)।
basename
সাবস্কেল উদ্ধৃত হয়নি। এর পরিবর্তে বাশের শেল প্রসারণ হ'ল: আমি ইন * .avi; do ffmpeg -i "$ i" -qscale 0 "$ (বেসনাম" $ i ".avi)"। Mov; সম্পন্ন
সাব-ডিরেক্টরীগুলির সাথে রূপান্তর করতে উদাহরণস্বরূপ ব্যবহার করুন
find . -exec ffmpeg -i {} {}.mp3 \;
find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
উইন্ডোজ জন্য:
এখানে আমি সমস্ত (.mp4) ফাইলগুলিকে (.mp3) ফাইলে রূপান্তর করছি।
সিম্পিডি খুলুন, পছন্দসই ফোল্ডারে যান এবং কমান্ডটি টাইপ করুন।
শর্টকাট: (
alচ্ছিক ) 1. আপনার (.mp4) ফাইল উপস্থিত রয়েছে সেই ফোল্ডারে যান
2. শিফট এবং বাম টিপুন এবং "ওপেন পাওয়ারশেল উইন্ডো এখানে
খুলুন " বা "এখানে কমান্ড প্রম্পট উইন্ডো খুলুন" নির্বাচন করুন
3.. "টাইপ করুন" সেন্টিমিডি [নোট : পাওয়ারশেলের পরিবর্তে সরাসরি সেন্টিমিডি খুললে এই পদক্ষেপটি এড়িয়ে যান]
৪. কমান্ডটি চালান
for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"
আপনি যদি এটি উইন্ডোজ 10-তে একটি ব্যাচ ফাইলে রাখতে চান তবে আপনাকে %% i ব্যবহার করতে হবে।
যে কেউ ব্যাচ ffmpeg দিয়ে যে কোনও কিছু রূপান্তর করতে চায় তবে একটি সুবিধাজনক উইন্ডোজ ইন্টারফেস রাখতে চায়, আমি এই ফ্রন্ট-এন্ডটি বিকাশ করেছি:
https://sourceforge.net/projects/ffmpeg-batch
এটি একটি উইন্ডো ফ্যাশন ইন্টারফেস, অগ্রগতি বার এবং সময় বাকী তথ্য, এফএফপিপি ব্যবহার করার সময় আমি সর্বদা মিস করি এমন বৈশিষ্ট্যগুলিকে এফএফপেমেগ যুক্ত করে।
আপনার যদি জিএনইউ সমান্তরাল থাকে তবে নীচে থাকা সমস্ত .AVI ফাইলগুলিকে vid_dir
সমান্তরালে এমপি 4 তে রূপান্তর করতে পারবেন , আপনার সিপিইউ কোরগুলির একটি ছাড়া সমস্ত ব্যবহার করে
find vid_dir -type f -name '*.avi' -not -empty -print0 |
parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4
থেকে / বিভিন্ন ফর্ম্যাট রূপান্তর করতে, পরিবর্তন '*.avi'
বা .mp4
প্রয়োজন অনুসারে। গনুহ সমান্তরাল একটি প্যাকেজ যা সাধারণত বলা হয় সবচেয়ে লিনাক্স ডিস্ট্রিবিউশন 'সংগ্রহস্থলগুলিতে তালিকাভুক্ত করা হয় parallel
।
!
কোনও ব্যাশের ওয়ান-লাইনারের শেষে যোগ করে আপনি কি এটি করতে পারবেন না ?
আমি জানি এটি অনর্থক হতে পারে তবে আমি এই স্ক্রিপ্টটি ব্যাচ রূপান্তরকারী ফাইলগুলিতে ব্যবহার করি।
old_extension=$1
new_extension=$2
for i in *."$old_extension";
do ffmpeg -i "$i" "${i%.*}.$new_extension";
done
এটিকে আরও নমনীয় করে তুলতে এটিতে 2 টি আর্গুমেন্ট লাগে:
আমি এর জন্য একটি উপনাম তৈরি করেছি তবে আপনি এটি নিজেও এটির মতো ব্যবহার করতে পারেন:
sh batch_convert.sh mkv mp4
এটি সমস্ত mkv
ফাইলগুলিকে ফাইলগুলিতে রূপান্তরিত করবে mp4
।
আপনি এটি দেখতে পারেন আরও কিছুটা বহুমুখী। যতক্ষণ ffmpeg
না এটি রূপান্তর করতে পারে আপনি কোনও দুটি এক্সটেনশন নির্দিষ্ট করতে পারবেন।
এখানে কোড গল্ফের মতো কিছুটা পাওয়া, তবে এখন পর্যন্ত প্রায় সব উত্তরই বাশ (একাকী একক সেন্টিমিডিকে বাদ দিয়ে), এখানে উইন্ডোজ ক্রস-প্ল্যাটফর্ম কমান্ড যা পাওয়ারশেল ব্যবহার করে (কারণ দুর্দান্ত)
ls *.avi|%{ ffmpeg -i $_ <ffmpeg options here> $_.name.replace($_.extension, ".mp4")}
আপনার উত্স ফুটেজের সাথে যা কিছু মেলে আপনি * .avi পরিবর্তন করতে পারেন।
অবশ্যই, এখন পাওয়ারশেল বরাবর এসেছে, বিশেষভাবে একেবারে খুব সহজ কিছু তৈরির জন্য তৈরি designed
এবং হ্যাঁ, পাওয়ারশেলটি কেবল উইন্ডোজ ব্যতীত অন্যান্য অপারেটিং সিস্টেমে উপলভ্য , তবে এটি উইন্ডোজে প্রাক ইনস্টলড আসে, সুতরাং এটি প্রত্যেকের পক্ষে কার্যকর হওয়া উচিত।
প্রথমত, আপনি বর্তমান ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করতে চান, সুতরাং, আমরা এর সাথে শুরু করব:
ls
আপনি ls -Recurse
যদি পুনঃনির্বাচিতভাবে সমস্ত ফাইলকেও উপ-ডিরেক্টরিতে রূপান্তর করতে চান তবে আপনিও ব্যবহার করতে পারেন।
তারপরে, আমরা সেগুলি কেবলমাত্র সেই ধরণের ফাইলগুলিতে ফিল্টার করব যা আমরা রূপান্তর করতে চাই - যেমন "এভিআই"।
ls | Where { $_.Extension -eq ".avi" }
এর পরে, আমরা এফএফএমপেকে এই তথ্যটি একটি মাধ্যমে প্রেরণ করব ForEach
।
এফএফপিপিগের ইনপুটটির জন্য, আমরা এটি ব্যবহার করব FullName
- এটিই ফাইলের পুরো পথ। আর FFmpeg এর আউটপুট জন্য আমরা ব্যবহার করব Name
- কিন্তু প্রতিস্থাপন.avi
সঙ্গে শেষে .mp3
। সুতরাং, এটি এর মতো কিছু দেখাবে:
$_.Name.Replace(".avi", ".mp3")
সুতরাং, আসুন এটি সমস্ত একসাথে রাখা এবং এটি ফলাফল:
ls | Where { $_.Extension -eq ".avi" } | ForEach { ffmpeg -i $_.FullName $_.Name.Replace(".avi", ".mp3") }
এটি FFmpeg এর মাধ্যমে সমস্ত ".avi" ফাইলগুলিকে ".mp3" ফাইলগুলিতে রূপান্তর করবে, আপনি কোন ধরণের রূপান্তর চান তা নির্ধারণের জন্য কেবল তিনটি বিষয় উদ্ধৃতিতে প্রতিস্থাপন করুন এবং এফএফপিপেগে অন্য কোনও যুক্তি যুক্ত করতে নির্দ্বিধায় অনুভব করবেন ForEach
।
আপনি এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে পারেন এবং Remove-Item
পুরানো ফাইলগুলি স্বয়ংক্রিয়ভাবে মোছার জন্য শেষ পর্যন্ত যুক্ত করতে পারেন।
যদি ffmpeg
আপনার পথে না থাকে এবং এটি প্রকৃতপক্ষে আপনি বর্তমানে যে ডিরেক্টরিটিতে রয়েছেন তা ./ffmpeg
ঠিক এর পরিবর্তে সেখানে লিখুনffmpeg
।
আশা করি এটি যে কাউকে সাহায্য করবে।
.ps1
ফাইলের মধ্যে রাখুন, একটি .bat
ফাইল নয়। আপনি Set-ExecutionPolicy RemoteSigned
আগে কখনও পিএস স্ক্রিপ্ট না চালালে আপনাকে প্রশাসক হিসাবে চালাতে হবে।
Windows:
@echo off
for /r %%d in (*.wav) do (
ffmpeg -i "%%~nd%%~xd" -codec:a libmp3lame -c:v copy -qscale:a 2 "%
%~nd.2.mp3"
)
এটি মানের 2 এর পরিবর্তনশীল বিটরেট, আপনি চাইলে 0 এ সেট করতে পারেন তবে যদি আপনার কাছে সত্যিকারের ভাল স্পিকার সিস্টেম না থাকে তবে এটি মূল্যহীন ইমো না
আপনি যদি ffmpegX এর সাথে ব্যাচ প্রক্রিয়াটির জন্য কোনও গ্রাফিকাল ইন্টারফেস চান তবে দ্রুত ব্যাচার চেষ্টা করুন । এটি নিখরচায় রয়েছে এবং আপনার যে ফাইলগুলিকে বাদ দেয় সেগুলি রূপান্তর করতে আপনার শেষ ffmpegX সেটিংস নেবে।
মনে রাখবেন যে আপনি দ্রুত বাচারে ফোল্ডারগুলি ড্র্যাগ-ড্রপ করতে পারবেন না। সুতরাং ফাইলগুলি নির্বাচন করুন এবং তারপরে দ্রুত ব্যাচারের মাধ্যমে এগুলি রাখুন।
কেবলমাত্র এটিই আমার জন্য কাজ করেছে, দয়া করে বিজ্ঞপ্তি পাবেন যে আপনি "newfiles" ফোল্ডারটি ম্যানুয়ালি তৈরি করতে হবে যেখানে ffmpeg.exe ফাইলটি অবস্থিত।
রূপান্তর । ফাইলগুলিকে .Wav অডিও কোডে:
for %%a in ("*.*") do ffmpeg.exe -i "%%a" "newfiles\%%~na.wav"
pause
অর্থাত আপনি .wav পরিবর্তনের সব .mp3 ফাইল রূপান্তর করতে চান তাহলে ("*.*")
করতে ("*.mp3")
।
এই স্ক্রিপ্টটির লেখক হলেন:
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
আশা করি এটি সাহায্য করেছে 🙏
এটি বর্তমান ডিরেক্টরি থেকে সমস্ত jpg ফাইল থেকে এমপি 4 ভিডিও তৈরি করবে।
echo exec("ffmpeg -framerate 1/5 -i photo%d.jpg -r 25 -pix_fmt yuv420p output.mp4");
এবং উইন্ডোজ জন্য, এটি কাজ করে না
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
এমনকি যদি আমি সেগুলি দ্বিগুণ করি %
।
আমি এমনকি পরামর্শ দিতে হবে:
-acodec ***libmp3lame***
এছাড়াও:
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec libmp3lame "%~nG.mp3"
এটিই আমি ব্যাচকে এভিআই রূপান্তর করতে 1280x এমপি 4 ব্যবহার করি
FOR /F "tokens=*" %%G IN ('dir /b *.avi') DO "D:\Downloads\ffmpeg.exe" -hide_banner -i "%%G" -threads 8 -acodec mp3 -b:a 128k -ac 2 -strict -2 -c:v libx264 -crf 23 -filter:v "scale=1280:-2,unsharp=5:5:1.0:5:5:0.0" -sws_flags lanczos -b:v 1024k -profile:v main -preset medium -tune film -async 1 -vsync 1 "%%~nG.mp4"
একটি সেন্টিমিডি ফাইল হিসাবে ভাল কাজ করে, এটি চালান, লুপ folder ফোল্ডারে সমস্ত avi ফাইল খুঁজে পায়।
আমার কে কল করুন (আপনার জন্য পরিবর্তন করুন) ffmpeg, ইনপুট নামটি পাস করে, সেটিংসটি শার্পিংয়ের সাথে পুনরুদ্ধারের জন্য। আমার প্রোবগুলিতে সিআরএফ এবং " -b:v 1024k
" দরকার নেই ...
আউটপুট ফাইল ইনপুট ফাইল বিয়োগ বিস্তৃতি, নতুন এক্সট্রা হিসাবে এমপি 4 সহ।
আমি এই ওয়ান-লাইনারটি লিনাক্সে ফাইলগুলি (সাধারণত এইচ 265) এমন কিছুতে রূপান্তর করতে ব্যবহার করছি যা কোনও সমস্যা ছাড়াই কোডিতে খেলতে পারি:
for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k output.mkv; mv -f output.mkv "$f"; done
এটি একটি অস্থায়ী ফাইলে রূপান্তর করে এবং তারপরে আসলটি প্রতিস্থাপন করে তাই রূপান্তরিত হওয়ার পরে নামগুলি একই থাকে।
এছাড়াও আপনি যদি সাবফোল্ডারগুলিতে একই রূপান্তর চান। এখানে পুনরাবৃত্তির কোড।
for /R "folder_path" %%f in (*.mov,*.mxf,*.mkv,*.webm) do (
ffmpeg.exe -i "%%~f" "%%~f.mp4"
)
এটি করার জন্য ছোট পিএইচপি স্ক্রিপ্ট:
#!/usr/bin/env php
<?php
declare(strict_types = 1);
if ($argc !== 2) {
fprintf ( STDERR, "usage: %s dir\n", $argv [0] );
die ( 1 );
}
$dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR );
if (! is_readable ( $dir )) {
fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" );
die(1);
}
if (! is_dir ( $dir )) {
fprintf ( STDERR, "supplied path is not a directory!" );
die(1);
}
$files = glob ( $dir . DIRECTORY_SEPARATOR . '*.avi' );
foreach ( $files as $file ) {
system ( "ffmpeg -i " . escapeshellarg ( $file ) . ' ' . escapeshellarg ( $file . '.mp4' ) );
}
escapeshellarg()
, এবং উইন্ডোজ এবং লিনাক্স উভয় ক্ষেত্রেই কাজ করে। যদিও আমি এটি একটি কিনারা ক্ষেত্রে একমত।
আরও একটি সহজ সমাধান যা এখনও প্রস্তাব করা হয়নি সেগুলি হ'ল xargs
:
ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
একটি ছোটখাট ক্ষতি হ'ল আউটপুট ফাইলগুলির বিশ্রী নামকরণ (যেমন input.avi.mp4
)। এটির জন্য একটি সম্ভাব্য কাজ হতে পারে:
ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
"