2012-06-25 14 views
8

मैं विभिन्न वीडियो प्रारूपों (FLV, mp4) से ऑडियो निकालने और इसे एमपी 3 में परिवर्तित करने के लिए ffmpeg का उपयोग कर रहा हूं।ffmpeg रूपांतरण - ऑडियो बिटरेट रखें

%~dp0ffmpeg.exe -i %1 -ar 44100 -ac 2 -ab 128k "%~dpn1.mp3" 

यह सिर्फ ठीक काम करता है। हालांकि, मेरी इनपुट फ़ाइलों में, ऑडियो बिटरेट भिन्न होता है, और मैं तदनुसार आउटपुट बिटरेट को समायोजित करना चाहता हूं। व्यापक Google खोज से भी, मुझे कोई संकेत नहीं मिला कि मूल बिटरेट को कैसे रखा जाए।

-ab copy 

कौन सा, ज़ाहिर है, काम नहीं करता:

मैं क्या आवश्यकता होगी होगा कुछ की तरह

क्या कोई काम करेगा जो काम करेगा?

पीएस: जैसा कि आपने उपरोक्त स्वरूपण से अनुमान लगाया होगा, मैं विंडोज बैच फ़ाइल का उपयोग कर रहा हूं। % ~ dp0ffmpeg.exe -i का उपयोग करने के लिए हैक होगा, grep द्वारा ऑडियो बिटरेट प्राप्त करें और इसे कमांड लाइन में डालें। मुझे लगता है कि में एक आसान और अधिक सुरुचिपूर्ण तरीका है।

+4

बिटरेट की प्रतिलिपि बनाना आमतौर पर एक अच्छा विचार नहीं है। सभी एन्कोडर्स बराबर नहीं हैं, और क्या आप उस व्यक्ति पर भरोसा कर सकते हैं जिसने आपके इनपुट को एन्कोड किया है यह जानने के लिए कि वे क्या कर रहे थे? साथ ही, यह प्रश्न superuser.com के लिए अधिक उपयुक्त है। मेरा मानना ​​है कि आप अपने प्रश्न को ध्वजांकित कर सकते हैं और यदि आप ऐसा करना चाहते हैं तो इसे स्थानांतरित करने का अनुरोध करें। – LordNeckbeard

+1

धन्यवाद, यह उचित लगता है, आपने वास्तव में मुझे वहां सोचा है। तो मुझे लगता है कि मैं गुणवत्ता हानि को कम करने के लिए केवल उच्च गुणवत्ता के साथ रहूंगा, क्योंकि अंतिम एमपी 3 आकार किसी भी तरह का महत्वपूर्ण महत्व नहीं है। – clausvdb

+0

यदि आपको आउटपुट गुणवत्ता के स्तर का चयन करने और वीबीआर आउटपुट बनाने के लिए एक विशिष्ट आउटपुट फ़ाइल आकार की परवाह नहीं है तो '-aq' या' -q: a' ('lame -V' के बराबर) का उपयोग करें। देखें कि [अनुशंसित LAME सेटिंग्स] (http://wiki.hydrogenaudio.org/index.php?title=LAME#VBR_.28variable_bitrate.29_settings) किस मूल्य का उपयोग करने के विचार के लिए (डिफ़ॉल्ट 4 है)। – LordNeckbeard

उत्तर

-2

-ab copy 

के बजाय

कोशिश

-sameq 


%~dp0ffmpeg.exe -i %1 -sameq "%~dpn1.mp3" 
+2

हाय, विचार के लिए धन्यवाद। दुर्भाग्यवश, मैंने भी कोशिश की, और मैं हमेशा 64k के साथ समाप्त होता हूं। – clausvdb

+3

इसके अलावा, http://ffmpeg.org/trac/ffmpeg/wiki/Option%20%27-sameq%27%20does%20NOT%20mean%20%27same%20quality%27 – jonny

0

यहाँ एक bash स्क्रिप्ट है कि एक फाइल एक्सटेंशन लेने के लिए और है कि विस्तार के साथ किसी भी फ़ाइल से ऑडियो निकाल देंगे, और निश्चित रूप से बिटरेट को बनाए रखने के लिए है। मैं कोड का महत्वपूर्ण भाग के क्रेडिट का दावा नहीं कर सकते हैं, के रूप में है कि the gentleman that writes this blog.

#!/bin/bash 

ext=$1 

for file in *.${ext}; do 
    tmpfn=${file%.*} ; # get rid of file ext 
    tmpfn=$tmpfn".mp3"; # add mp3 file ext 
    # next line gets bitrate of audio from video using ffmpeg 
    bit=`ffmpeg -i "${file}" 2>&1 | grep Audio | awk -F", " '{print $5}' | cut -d' ' -f1` 
    # finally, convert to mp3 using proper bitrate 
    ffmpeg -i "$file" -ab ${bit}k "$tmpfn" 
done 

को जाता है बस निर्देशिका में इसे चलाने के हैं, जहां आपने तरह फ़ाइलें:

$bash script.sh flv 

जहां flv फ़ाइल एक्सटेंशन है। इसे ठीक करने के लिए इसे ठीक करें क्योंकि आप अपने दिल की सामग्री में एकाधिक फ़ाइल प्रकारों की इच्छा या प्रक्रिया करते हैं।

संपादित करें: उबंटू/डेबियन/आदि पर किसी के लिए बस एक त्वरित नोट। सुनिश्चित करें कि आप अतिरिक्त कोडेक पैकेज स्थापित करें या नहीं, यह काम नहीं करेगा, यानी आपको ffmpeg और अतिरिक्त libav कोडेक पैकेज स्थापित करना होगा या आपको एक बुरा समय होगा। इस चाल करना चाहिए:

sudo apt-get ffmpeg libavcodec-extra-53 
1

भले ही मूल धागा कुछ भी grepping बिना जवाब के लिए देख रहा था, नैट की पटकथा सबसे अधिक उपयोगी पोस्ट हो रहा है। लेकिन इसमें कुछ सीमाएं हैं, उदाहरण के लिए सभी आउटपुट आपको बिटरेट नहीं देते हैं, कुछ नतीजे आपको केवल "डिफ़ॉल्ट" परिणाम देते हैं। यहां इसका थोड़ा और बेहतर संस्करण है।

#!/bin/env bash 
ext=$1 
for f in *.${ext}; do 
    x=${f%.*} ; 
    x=${x% - YouTube}; # I usually download some song recvers from YouTube. 
    x=$x".mp3"; 
    bit=`ffmpeg -i "${f}" 2>&1 | grep Audio | awk -F", " '{print $5}' | cut -d' ' -f1` 
    if [ -n "$bit" ]; then 
     ffmpeg -i "$f" -ab ${bit}k "$x" 
    else 
     ffmpeg -i "$f" "$x" # this is if we don't have an output from the grep line above, ffmpeg will keep the original quality, that is 192k for 192k 
    fi   
done 
-1

ffmpeg (परीक्षण 2.1.4) का वर्तमान संस्करण गुणवत्ता को संरक्षित करने के लिए "-qscale 0" का उपयोग करने की सिफारिश करता है। यह मेरे एमपीई 4 वीडियो परीक्षण फ़ाइल पर मेरे लिए काम किया।

+1

-qscale 0 ऑडियो बिटरेट के लिए काम नहीं करता है जैसा कि पोस्टर ने अनुरोध किया है – antfx

0

लॉर्डनेकबीर्ड राज्यों के रूप में, विभिन्न प्रारूपों में एन्कोड करने के लिए एक ही बिटरेट का उपयोग करना आवश्यक नहीं है। हालांकि ...

यहां एक बैच-फ़ाइल समाधान है जो इनपुट फ़ाइल बिटरेट को कैप्चर करता है और एन्कोडिंग कमांड लाइन के पैरामीटर के रूप में उपयोग करता है। इस दृष्टिकोण को मूल प्रश्नकर्ता द्वारा संकेत दिया गया था।mp3 आउटपुट फ़ाइल इनपुट फ़ाइल के समान फ़ोल्डर में बनाई गई है।

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
REM Usage: scriptname.cmd "full-quoted-path-to-input-file" 
REM Adjust FFMPEG_PATH variable value to match the path to your FFMPEG binary 

SET FFMPEG_PATH=C:\Program Files\ffmpeg-20170807-1bef008-win64-static\bin 
SET INPUT_FILE_FULL_PATH=%1 

REM Get input file bitrate 
FOR /F "tokens=5 delims==," %%i IN ('""%FFMPEG_PATH%\ffmpeg.exe" -i %INPUT_FILE_FULL_PATH% 2>&1 | find "Audio:""') DO (
    FOR /F "tokens=1 delims==k" %%j IN ('ECHO %%i') DO ( 
     SET BITRATE=%%j 
     SET BITRATE=!BITRATE: =! 
     ECHO Input file bitrate is !BITRATE! kb/s 
    ) 
) 

REM Encode file using previously captured bitrate 
"%FFMPEG_PATH%\ffmpeg.exe" -i %INPUT_FILE_FULL_PATH% -ar 44100 -ac 2 -ab !BITRATE!k "%~dpn1.mp3" 

वहाँ कोड को कस, प्रदान की गई थी उदाहरण के लिए, एक जांच यकीन है कि कम से कम एक तर्क बनाने के लिए के लिए गुंजाइश है, और BITRATE एनकोड की शुरुआत से पहले खाली नहीं है, लेकिन यह एक किसी न किसी और के लिए तैयार समाधान के रूप में यह ठीक करना चाहिए।