बैच कन्वर्ट .mkv to .mp4


10

मैं एक फ़ोल्डर में सभी .mkv फ़ाइलों को VLC के साथ .Mp4 में बैच करना चाहता हूं।

यह मूल वीडियो का उपयोग करना चाहिए- / ऑडियो स्ट्रीम और यदि संभव हो तो .mkv के .ass उपशीर्षक। यह वास्तव में रूपांतरण नहीं है, यह कंटेनर को बदलने की तरह है - मेरा खिलाड़ी MKV वीडियो नहीं पढ़ सकता है।

अगर मैं इस रूपांतरण को हाथ से करता हूं (मैन्युअल रूप से) तो यह काम करता है, लेकिन मेरे पास कन्वर्ट करने के लिए बहुत सारी एमकेवी फाइलें हैं, इसलिए इसमें बहुत समय लगेगा।

मैंने ऐसा करने के लिए एक बैच फ़ाइल के लिए इंटरनेट पर खोज की है और मुझे कुछ मिला है। मैंने उन्हें अपनी इच्छा से संशोधित करने का प्रयास किया, लेकिन मैंने जो भी प्रयास किए, उन्होंने सिर्फ एक .mp4 फ़ाइल बनाई जिसमें ऑडियो स्ट्रीम नहीं है और वीडियो स्ट्रीम भी पीसी पर मेरे सभी मीडिया खिलाड़ियों द्वारा प्रदान नहीं की जा सकती है।

तो क्या कोई मुझे बता सकता है कि बैच को कैसा दिखना है, इसलिए यह मूल वीडियो और ऑडियो स्ट्रीम (और शायद .ass उपशीर्षक) के साथ काम करता है?


आप किस ऑपरेटिंग सिस्टम पर हैं, और क्या आपको वीएलसी का उपयोग करना जरूरी है? इसके अलावा, आईएसओ MP4 उपशीर्षक का समर्थन नहीं करता है जहाँ तक मुझे याद है - उनके बारे में क्या किया जाना चाहिए?
slhck

एक परीक्षण के लिए आप दूसरे खिलाड़ी (mplayer / KMPlayer / BSPlayer) की कोशिश कर सकते हैं
रेमस रिगो

हैंडब्रेक, वह सब है।
सैम

@Sam हैंडब्रेक वीडियो और ऑडियो स्ट्रीम को फिर से एनकोड करेगा, जिससे आप खराब क्वालिटी के साथ जा सकते हैं। इसके अलावा, यह वही है जो ओपी विशेष रूप से नहीं चाहता था।
स्लैक

जवाबों:


13

mkvtomp4

लगता mkvtomp4है कि आप क्या चाहते हैं?

Mpeg4ip या GPAC की MP4Box, mkvtoolnix और ffmpeg का उपयोग करके mp4 में परेशान करने वाली mkv फ़ाइलों को परिवर्तित करें । रूपांतरण वीडियो को फिर से एनकोड नहीं करता है और केवल ऑडियो को फिर से एनकोड करता है यदि वह AAC कोडेक का उपयोग नहीं करता है (कोई भी इस व्यवहार को ओवरराइड कर सकता है --audio-codec)।

आप Google कोड पेज पर विंडोज और लिनक्स संस्करण डाउनलोड कर सकते हैं। आपको अतिरिक्त सॉफ्टवेयर की आवश्यकता होगी।

विंडोज या लिनक्स के लिए डाउनलोड के लिए साइटों की जाँच करें। OS X पर, आपको केवल तभी आवश्यकता होती है brew install mkvtoolnix mp4boxजब आपके पास Homebrew हो

हालांकि यह आपके उपशीर्षक की नकल नहीं करेगा। आपको एक अतिरिक्त चरण की आवश्यकता होगी।


FFmpeg बैच

यदि mkvtomp4 आपके लिए काम नहीं करता है, तो एक साधारण FFmpeg बैच फ़ाइल भी कर सकती है। विंडोज के लिए, आप Zeranoe बिल्ड डाउनलोड कर सकते हैं । लिनक्स में, पैकेज स्रोतों से FFmpeg की जाँच करें। OS X में, उपयोग करें brew install ffmpeg

फिर, बस कॉल करें:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

यह फिर से एन्कोडिंग के बिना एक वैध MP4 कंटेनर बनाएगा। आपके ऑपरेटिंग सिस्टम द्वारा आवश्यकतानुसार फाइलों पर लूप और उपलब्ध। हालाँकि, यह बैच उपशीर्षक की नकल नहीं करेगा।

* निक्स में, आप निम्न कार्य कर सकते हैं। बस एक फ़ाइल बनाएँ convert.sh:

#!/bin/bash
find /path/to/input/folder -iname '*.mkv' -print0 | while read -d '' -r file; do
    ffmpeg -i "$file" -c:v copy -c:a copy ${file%%.mkv}.mp4
done

यहां अपने वीडियो फ़ोल्डर में पथ बदलें। इसके साथ निष्पादन योग्य बनाएं chmod +x convert.sh, फिर इसे साथ चलाएं ./convert.sh

विंडोज में, आपको संभवतः दो बैच फ़ाइलें ( यहाँ से बेशर्म प्लग ) चाहिए, एक startconvert.bat:

for %%i IN (*.mkv) DO (convert-to-mp4.bat "%%i") 
pause

और जो रूपांतरण करता है:

IF EXIST "%1.mp4" GOTO exit

@echo Conversion for %1 started on %DATE% %TIME% 
ffmpeg -i %1 -c:v copy -c:a copy %1.mp4

:exit 
@echo %1.mp4 already exists

दोनों को वीडियो फोल्डर में सेव करें। बस startconvert.batउस फ़ोल्डर से चलाएं जिसे आप रूपांतरण शुरू करना चाहते हैं।


उपशीर्षक

यदि आप उपशीर्षक जोड़ना चाहते हैं, तो आपको एक मैनुअल प्रक्रिया की आवश्यकता हो सकती है यदि निम्नलिखित आपके लिए काम नहीं करता है:

ffmpeg -i input.mkv -c:a copy -c:v copy -map 0 output.mp4

उपशीर्षक निकालने के लिए, उपयोग करें:

mkvextract tracks input.mkv 3:subtitles.srt

यह मानकर चल रहा है कि आपकी फ़ाइल में वास्तव में ट्रैक ID नंबर 3 पर सबटाइटल हैं और उन्हें SRT प्रारूप में निर्यात किया जा सकता है। यह देखने के लिए कि क्या ट्रैक 3 में किसी फाइल में सबटाइटल है, का उपयोग करें mkvmerge -i input.mkv

फिर, MP4 फ़ाइल में उपशीर्षक को फिर से जोड़ने के लिए MP4Box का उपयोग करें।

mp4box -add input.mp4 -add subtitles.srt -new output.mp4

रिकॉर्ड के लिए, मैंने FFmpeg और OS X पर उपशीर्षक निष्कर्षण का परीक्षण किया और यह त्रुटिपूर्ण रूप से काम किया।
slhck

मैंने विंडोज के लिए ffmpeg का इस्तेमाल किया। लेकिन वहाँ एक बैच है तो यह स्वचालित रूप से एक ही फ़ाइल नाम के साथ MP4 करने के लिए फ़ोल्डर में सभी फ़ाइलों को परिवर्तित / mux है? या हो सकता है कि एक बैच जो फ़ाइल को ड्रैग और ड्रॉप पर कनवर्ट करता है

2

यह उस उत्तर का एक हिस्सा है, जो दिए गए slhck (और धन्यवाद, slhck!) के हिस्से का है क्योंकि मैंने पाया है कि कमांड नवीनतम (इस लेखन में) ffmpeg के लिए काम नहीं करता है - हो सकता है कि पैरामीटर संस्करणों के बीच बदल गए हों?

विंडोज 7 पर, fffmpeg v.20130103-git-9e36d9e-win64-static (7zip उपयोगिता के साथ इसे विघटित करते हुए), http://ffmpeg.org के माध्यम से http://ffmpeg.zeranoe.com/builds/ के माध्यम से पाया जाता है । /download.html , निम्न कमांड ने .mov फ़ाइल (iPhone से ली गई) को .mp4 फ़ाइल में परिवर्तित किया:

ffmpeg -i test.mov -vcodec copy -acodec copy test.mp4

मैंने पाया कि .mp4 के इस भाग को .avi में बदलना, इसे भी एक .AVI कंटेनर में बदलने के लिए काम किया। या तो लक्ष्य कंटेनर के साथ, इन "-vcodec copy -acodec copy" पैरामाटर्स का उपयोग केवल स्रोत धाराओं को एक नए कंटेनर (लक्ष्य में) में कॉपी करने के लिए प्रतीत होता है, इसलिए यह दोषरहित रूपांतरण है (और मैं अनुमान लगा रहा हूं कि ऐसा ही होगा लक्ष्य कंटेनरों की विविधता भी)।

इन चमगादड़ों के झुंड ने मेरे लिए भी काम किया:

callConvert.bat:

for %%i IN (*.mov) DO (convert.bat "%%i")
pause

convert.bat:

IF EXIST %1.mov GOTO exit

@echo Conversion for %1 started on %DATE% %TIME% 
ffmpeg -i %1 -vcodec copy -acodec copy %1.avi

:exit 
@echo %1.avi already exists

1
वहाँ के बीच कोई अंतर नहीं है -c:aऔर -acodec, या -c:vऔर -vcodec। वास्तव में, मैं आज भी पूर्व का उपयोग कर रहा हूं, क्योंकि यह अनुशंसित सिंटैक्स है, और दोनों का उल्लेख एफएफएमपी प्रलेखन में किया गया है । ध्यान दें कि एवीआई में कंटेनर को परिवर्तित करना कई वीडियो और ऑडियो कोडेक्स के लिए टूट सकता है, क्योंकि एवीआई फ़ाइलों में भविष्य कहनेवाला कोडिंग के लिए समर्थन की कमी होती है (जो कि एच .264 वीडियो का उपयोग करता है - जो आईफोन आपको देता है)। यदि आप एक MP4 या MOV कंटेनर को लक्ष्य के रूप में उपयोग नहीं करते हैं, तो इसे फिर से एनकोड करना हमेशा बेहतर होता है।
13:08

"IF EXIST% 1.mov GOTO से बाहर निकलें" को "% 1.avi" (या स्रोत प्रारूप के बजाय लक्ष्य प्रारूप जो भी हो) पढ़ना चाहिए, नहीं? इसके अलावा यह मेरे लिए बहुत काम आया, धन्यवाद!
kjosh

0

पुराना सवाल है, लेकिन यहाँ मेरा जवाब है, रिकॉर्ड के लिए। MP4 जब तक वे वीडियो फ्रेम का हिस्सा नहीं बन जाते, तब तक मैं उपशीर्षक नहीं दे सकता, लेकिन यह है कि मैं .Mkv फ़ाइलों को .Mp4 में कैसे परिवर्तित करता हूं:

foreach($inputFile in get-childitem -recurse -Filter *.mkv) {
    $outputFileName = [System.IO.Path]::GetFileNameWithoutExtension($inputFile.FullName) + ".mp4";
    $outputFileName = [System.IO.Path]::Combine($inputFile.DirectoryName, $outputFileName);

    $progDir = ${env:ProgramFiles(x86)};
    if ($progDir -eq $null) {
        $progDir = $env:ProgramFiles;
    }

    $processName = $progDir + "\VideoLAN\VLC\vlc.exe";
    $processArgs = "-I dummy -v `"$($inputFile.FullName)`" --sout=#transcode{}:standard{access=`"file`",mux=`"mp4`",dst=`"$outputFileName`"} vlc://quit"

    start-process $processName $processArgs -wait
}

इसे mkv2mp4.ps1 के रूप में सहेजें और उस फ़ोल्डर में छोड़ दें जिसके साथ आप काम कर रहे हैं। राइट क्लिक करें और "पॉवर्सशेल में खोलें" और यह अपनी बात करेगा।

यह पहली बार है जब मैंने Powershell को देखा है (और आखिरी मुझे उम्मीद है - MS बस पोर्ट बैश क्यों नहीं कर सका?) लेकिन यह मेरे लिए काम करता है और मेरे द्वारा यहां पाए गए कोड पर आधारित है: https: // wiki .videolan.org / How_to_Batch_Encode / # Powershell


आप जो भी कमांड-लाइन का उपयोग करते हैं, आपको इसे अंदर रखना चाहिए Makefile- ताकि इसे फिर से चलाने में सक्षम हो और केवल नए स्रोतों को रूपांतरित करने के साथ-साथ समानांतर में कई रूपांतरण चलाने में सक्षम हो (अपने सभी सीपीयू का उपयोग करने के लिए )।
मिखाइल टी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.