আমি কীভাবে ffmpeg ব্যবহার করে অডিওকে সাধারণ করতে পারি?


119

আমি চাই যে কোনও সিনেমা ক্লিপের উচ্চতম শিখর শব্দটি কোডেকের অনুমতি অনুসারে তত উচ্চতর হয়, তারপরে অন্য প্রতিটি শব্দ যথাযথভাবে প্রশস্ত করা উচিত।

Ffmpeg ব্যবহার করে এটি সম্পাদন করার জন্য ব্যবহারিক উদাহরণ কী?


1
আপনি অডিওটি 'নরমালাইজড' করতে চাইছেন। আমি এই থ্রেডটি পেয়েছি এবং সেখানে প্রচুর ভাল তথ্য রয়েছে। আশা করি এটা সাহায্য করবে!
ববসবারিক্যাডস

উত্তর:


189

বিকল্প 1: বিল্ট-ইন নরমালাইজেশন ফিল্টার

বর্তমান এফএফএমপিতে দুটি ফিল্টার রয়েছে যা সরাসরি স্বাভাবিককরণের জন্য ব্যবহার করা যেতে পারে - যদিও তারা ইতিমধ্যে বেশ উন্নত, তাই তারা কেবলমাত্র শীর্ষ স্তরে পৌঁছানোর জন্য লাভ প্রয়োগ করে না। এখানে তারা:

  • loudnorm: EBU R128 অনুযায়ী জোরে নরমালাইজেশন। আপনি একটি ইন্টিগ্রেটেড উচ্চতা লক্ষ্য, একটি জোরেতা পরিসীমা লক্ষ্য, বা সর্বোচ্চ সত্য শিখর সেট করতে পারেন। এটি অডিও এবং ভিডিও প্রকাশের জন্য প্রস্তাবিত এবং এটি সারা বিশ্ব জুড়ে সম্প্রচারকরা ব্যবহার করেন।
  • dynaudnorm: ক্লিপিং ছাড়াই "বুদ্ধিমান" উচ্চস্বরে নরমালাইজেশন, যা ফাইলের উইন্ডোড অংশগুলির উপর গতিশীলভাবে স্বাভাবিককরণ প্রয়োগ করে। এটি শব্দের বৈশিষ্ট্যগুলি পরিবর্তন করতে পারে, তাই এটি সাবধানতার সাথে প্রয়োগ করা উচিত।

এছাড়াও, volumeফিল্টার সাধারণ ভলিউম সামঞ্জস্য সম্পাদন করতে ব্যবহার করা যেতে পারে। আরও অডিও ভলিউম ম্যানিপুলেশন উইকি এন্ট্রি দেখুন।

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


বিকল্প 2: ffmpeg-normalizeসরঞ্জামটি ব্যবহার করুন

আমি মিডিয়া ফাইলগুলি স্বাভাবিক করার জন্য পাইথন প্রোগ্রাম তৈরি করেছি , পাইপাইতেও উপলব্ধ । আপনি কেবল:

  • ডাউনলোড ffmpeg (একটি স্ট্যাটিক বিল্ড , সংস্করণ 3.1 বা উচ্চতর চয়ন করুন)
  • করা ffmpegআপনার এক্সিকিউটেবল $PATHপারেন মধ্যে এটি যোগ, উদাহরণস্বরূপ, দ্বারা /usr/local/bin, অথবা তার ডিরেক্টরির যোগ$PATH
  • চালান pip install ffmpeg-normalize
  • ব্যবহার ffmpeg-normalize

উদাহরণ স্বরূপ:

ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k

বা, বেশ কয়েকটি অডিও ফাইলকে কেবল ব্যাচ-স্বাভাবিক করতে এবং আউটপুট ফোল্ডারে সঙ্কুচিত WAV হিসাবে এগুলি লিখতে:

ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav

সরঞ্জামটি EBU R128 (ডিফল্ট), আরএমএস এবং শীর্ষকে সমর্থন করে। কটাক্ষপাত আছে ffmpeg-normalize -hআরো বিকল্পের জন্য এবং চেক README কিছু উদাহরণ জন্য।

এছাড়াও, এটি অন্যান্য এনকোডারগুলির (যেমন, এএসি বা এমপি 3) সাথে পুনরায় এনকোডিং সমর্থন করে বা অডিওকে স্বয়ংক্রিয়ভাবে ভিডিওতে মার্জ করে।


বিকল্প 3: ম্যানুয়ালি সাথে অডিওটি স্বাভাবিক করুন ffmpeg

Ffmpeg এ আপনি volumeট্র্যাকের ভলিউম পরিবর্তন করতে ফিল্টারটি ব্যবহার করতে পারেন । আপনি প্রোগ্রামটির সাম্প্রতিক সংস্করণটি ডাউনলোড করেছেন তা নিশ্চিত করুন ।

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

আবেদন করার জন্য লাভটি সন্ধান করুন

প্রথমে আপনার সর্বাধিক ভলিউমের জন্য অডিও স্ট্রিমটি বিশ্লেষণ করতে হবে যা স্বাভাবিককরণ এমনকি প্রদান করে দেয় কিনা তা দেখার জন্য:

ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null

উইন্ডোজ /dev/nullদিয়ে প্রতিস্থাপন NULকরুন। , , এবং আর্গুমেন্ট এই বিশ্লেষণ সময় অ অডিও স্ট্রীম উপেক্ষা করার ffmpeg নির্দেশ দিন। এটি বিশ্লেষণকে মারাত্মকভাবে গতি দেয়।
-vn-sn-dn

এটি নিম্নলিখিত মত কিছু আউটপুট হবে:

[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861

আপনি দেখতে পাচ্ছেন, আমাদের সর্বোচ্চ আয়তন -5.0 ডিবি, সুতরাং আমরা 5 ডিবি লাভ প্রয়োগ করতে পারি। আপনি যদি 0 ডিবি এর মান পান তবে আপনার অডিওটি স্বাভাবিক করার দরকার নেই।

ভলিউম ফিল্টার প্রয়োগ করুন:

এখন আমরা volumeফিল্টারটি একটি অডিও ফাইলে প্রয়োগ করি । নোট করুন যে ফিল্টার প্রয়োগ করার অর্থ আমাদের অডিও স্ট্রিমটিকে আবার এনকোড করতে হবে। আপনি অডিওর জন্য যা কোডেক চান তা অবশ্যই অবশ্যই মূল ফর্ম্যাটের উপর নির্ভর করে। এখানে কিছু উদাহরন:

  • সাদামাটা অডিও ফাইল: আপনার যা প্রয়োজন এনকোডার দিয়ে কেবল ফাইলটি এনকোড করুন:

    ffmpeg -i input.wav -af "volume=5dB" output.mp3
    

    আপনার বিকল্পগুলি অবশ্যই খুব বিস্তৃত।

  • AVI ফর্ম্যাট: সাধারণত এমন AVI পাত্রে আসা ভিডিও সহ এমপি 3 অডিও থাকে:

    ffmpeg -i video.avi -af "volume=5dB" -c:v copy -c:a libmp3lame -q:a 2 output.avi
    

    এখানে আমরা মানের স্তরটি বেছে নিয়েছি Values ​​মানগুলি 0-9 থেকে কম এবং নিম্নতর মানে আরও ভাল। গুণমান নির্ধারণের জন্য আরও তথ্যের জন্য এমপি 3 ভিবিআর গাইড পরীক্ষা করুন । -b:a 192kউদাহরণস্বরূপ আপনি একটি স্থির বিটরেটও সেট করতে পারেন ।

  • এমপি 4 ফর্ম্যাট: একটি এমপি 4 ধারক সহ, আপনি সাধারণত এএসি অডিও পাবেন। আমরা ffmpeg এর বিল্ট-ইন এএসি এনকোডার ব্যবহার করতে পারি।

    ffmpeg -i video.mp4 -af "volume=5dB" -c:v copy -c:a aac -b:a 192k output.mp4
    

    এখানে আপনি অন্যান্য এএসি এনকোডার ব্যবহার করতে পারেন। তাদের মধ্যে কিছু ভিবিআরকে সমর্থন করে। দেখুন এই উত্তর এবং এএসি এনকোডিং নির্দেশিকা কিছু টিপস জন্য।

উপরের উদাহরণগুলিতে, ভিডিও স্ট্রিমটি ব্যবহার করে অনুলিপি করা হবে -c:v copy। আপনার ইনপুট ফাইলে বা একাধিক ভিডিও স্ট্রিমে সাবটাইটেল থাকলে -map 0আউটপুট ফাইলের নামের আগে বিকল্পটি ব্যবহার করুন ।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
যাত্রামন গীক

7
এটি উপহার দেওয়া অবিরত। 6 বছর পরে, এবং এটি এখনও আপডেট এবং রক্ষণাবেক্ষণ করা হচ্ছে। সাবাশ!
জন স্কারপেতেগ

যদি আমি নতুন ভলিউম সেট করি তবে সর্বোচ্চ_ভোলিউমটি শূন্য হয় তবে বিকল্প 3 কি ক্লিপিং এড়াতে পারে? যেমন সর্বোচ্চ_ভলিউম দ্বারা প্রদত্ত বিপরীত মান প্রাথমিক ব্যবহার
rraallvv

হ্যাঁ, এটি করা উচিত। ffmpeg-normalizeআপনি 0 ডিবি এবং পিক-নরমালাইজের স্তর নির্ধারণ করার সময়ও এটি সরঞ্জামটি করে।
slhck

7

আমি সেরা বার্তায় মন্তব্য করতে পারি না যাতে এটি করা আমার কুশ্রী বাশ based

ffmpeg -i sound.mp3 -af volumedetect -f null -y nul &> original.txt
grep "max_volume" original.txt > original1.tmp
sed -i 's|: -|=|' original1.tmp
if [ $? = 0 ]
 then
 sed -i 's| |\r\n|' original.tmp
 sed -i 's| |\r\n|' original.tmp
 sed -i 's| |\r\n|' original.tmp
 sed -i 's| |\r\n|' original.tmp
 grep "max_volume" original1.tmp > original2.tmp
 sed -i 's|max_volume=||' original2.tmp
 yourscriptvar=$(cat "./original2.tmp")dB
 rm result.mp3
 ffmpeg -i sound.mp3 -af "volume=$yourscriptvar" result.mp3
 ffmpeg -i result.mp3 -af volumedetect -f null -y nul &> result.txt
fi

5

.M4a ফাইলের শব্দ মাত্রা স্বাভাবিক করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে। শব্দের স্তরগুলি শুরু করার জন্য খুব শান্ত থাকলে তা দেখুন। আপনি যদি সেক্ষেত্রে অডাসটির মতো কিছু ব্যবহার করেন তবে চূড়ান্ত শব্দটি আরও ভাল হতে পারে।

#!/bin/bash

# Purpose: Use ffmpeg to normalize .m4a audio files to bring them up to max volume, if they at first have negative db volume. Doesn't process them if not. Keeps bitrate same as source files.
# Parameters: $1 should be the name of the directory containing input .m4a files.
#   $2 should be the output directory.

INPUTDIR=$1
OUTPUTDIR=$2

<<"COMMENT"

# For ffmpeg arguments http://superuser.com/questions/323119/how-can-i-normalize-audio-using-ffmpeg
# and
# https://kdecherf.com/blog/2012/01/14/ffmpeg-converting-m4a-files-to-mp3-with-the-same-bitrate/
ffmpeg -i test.m4a -af "volumedetect" -f null /dev/null

ffmpeg -i test.m4a -af "volumedetect" -f null /dev/null 2>&1 | grep max_volume
# output: max_volume: -10.3 dB

ffmpeg -i test.m4a -af "volumedetect" -f null /dev/null 2>&1 | grep 'max_volume\|Duration'
# Output:
#  Duration: 00:00:02.14, start: 0.000000, bitrate: 176 kb/s
# [Parsed_volumedetect_0 @ 0x7f8531e011a0] max_volume: -10.3 dB

ffmpeg -i test.m4a -af "volumedetect" -f null /dev/null 2>&1 | grep max_volume | awk -F': ' '{print $2}' | cut -d' ' -f1
# Output: -10.3

ffmpeg -i test.m4a 2>&1 | grep Audio
# output: Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 170 kb/s (default)

ffmpeg -i test.m4a 2>&1 | grep Audio | awk -F', ' '{print $5}' | cut -d' ' -f1
# output: 170

# This works, but I get a much smaller output file. The sound levels do appear normalized.
ffmpeg -i test.m4a -af "volume=10.3dB" -c:v copy -c:a aac -strict experimental output.m4a

# Operates quietly.
ffmpeg -i test.m4a -af "volume=10.3dB" -c:v copy -c:a aac -strict experimental -b:a 192k output.m4a -loglevel quiet

COMMENT

# $1 (first param) should be the name of a .m4a input file, with .m4a extension
# $2 should be name of output file, with extension
function normalizeAudioFile {
    INPUTFILE=$1
    OUTPUTFILE=$2

    DBLEVEL=`ffmpeg -i ${INPUTFILE} -af "volumedetect" -f null /dev/null 2>&1 | grep max_volume | awk -F': ' '{print $2}' | cut -d' ' -f1`

    # We're only going to increase db level if max volume has negative db level.
    # Bash doesn't do floating comparison directly
    COMPRESULT=`echo ${DBLEVEL}'<'0 | bc -l`
    if [ ${COMPRESULT} -eq 1 ]; then
        DBLEVEL=`echo "-(${DBLEVEL})" | bc -l`
        BITRATE=`ffmpeg -i ${INPUTFILE} 2>&1 | grep Audio | awk -F', ' '{print $5}' | cut -d' ' -f1`

        # echo $DBLEVEL
        # echo $BITRATE

        ffmpeg -i ${INPUTFILE} -af "volume=${DBLEVEL}dB" -c:v copy -c:a aac -strict experimental -b:a ${BITRATE}k ${OUTPUTFILE} -loglevel quiet

    else
        echo "Already at max db level:" $DBLEVEL "just copying exact file"
        cp ${INPUTFILE} ${OUTPUTFILE}
    fi
}

for inputFilePath in ${INPUTDIR}/*; do
    inputFile=$(basename $inputFilePath)
    echo "Processing input file: " $inputFile
    outputFilePath=${OUTPUTDIR}/$inputFile
    normalizeAudioFile ${inputFilePath} ${outputFilePath}
done

-2

ffmpeg -i image.jpg -i "ইনপুট.এমপি 3" -কোডেক কপি tmp.avi

mencoder -ovc copy -oac copy tmp.avi-rawaudio -af volnorm = 1 -oac mp3lame -lameopts cbr: প্রিসেট = 192 -স্রেট 48000 -o "আউটপুট.এমপি 3"

rm -f tmp.avi


2
এখানে অন্যান্য উত্তরের সাথে এটির তুলনা করে, আমি আশা করি এটি পরিষ্কার হয়ে গেছে যে আপনার পোস্টে প্রাসঙ্গিক এবং ব্যাখ্যামূলক তথ্য নেই যা এটি কার্যকর করে তোলে। "মেনকোডার" কী এবং প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে এটি কী ভূমিকা পালন করে?
music2myear

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