Batch Konversi .mkv ke .mp4

10

Saya ingin mengonversi semua file .mkv dalam folder menjadi .mp4 dengan VLC.

Ini harus menggunakan aliran video / audio asli dan jika mungkin subtitle .ass dari .mkv. Ini bukan benar-benar konversi, ini lebih seperti mengubah wadah - pemain saya tidak dapat membaca video MKV.

Jika saya melakukan konversi ini dengan tangan (secara manual) itu berfungsi, tapi saya punya banyak file MKV untuk dikonversi, jadi itu akan memakan banyak waktu.

Saya telah mencari di internet file batch untuk melakukan ini dan saya menemukan beberapa. Saya mencoba memodifikasinya sesuai keinginan saya, tetapi semua upaya yang saya coba baru saja membuat file .mp4 yang tidak mengandung aliran audio dan aliran video juga tidak dapat ditampilkan oleh semua pemutar media saya di PC.

Jadi, bisakah seseorang memberi tahu saya bagaimana betsnya harus terlihat, sehingga ia bekerja dengan aliran video dan audio asli (dan mungkin subtitle .ass)?

Saya disini
sumber
Sistem operasi apa yang Anda gunakan, dan apakah Anda harus menggunakan VLC? Juga, ISO MP4 tidak mendukung subtitle sejauh yang saya ingat - apa yang harus dilakukan tentang mereka?
slhck
untuk ujian Anda dapat mencoba pemain lain (mplayer / KMPlayer / BSPlayer)
Remus Rigo
Rem tangan, itu saja.
Sam
@Sam Handbrake akan menyandikan ulang aliran video dan audio, sehingga Anda mendapatkan kualitas yang buruk. Juga, inilah yang tidak diinginkan OP secara khusus.
slhck

Jawaban:

13

mkvtomp4

Sepertinya mkvtomp4apa yang kamu inginkan?

Menggunakan mpeg4ip atau MP4Box GPAC, mkvtoolnix dan ffmpeg untuk mengonversi file mkv yang bermasalah menjadi mp4 . Konversi tidak menyandi ulang video dan hanya menyandikan ulang audio jika tidak menggunakan codec AAC (seseorang dapat menimpa perilaku ini menggunakan --audio-codec).

Anda dapat mengunduh versi Windows dan Linux di halaman Google Code. Anda akan memerlukan perangkat lunak tambahan.

Periksa situs apakah ada unduhan untuk Windows atau Linux. Pada OS X, Anda hanya perlu melakukannya brew install mkvtoolnix mp4boxjika memiliki Homebrew .

Ini tidak akan menyalin subtitle Anda. Anda akan membutuhkan langkah tambahan.


Batch FFmpeg

Jika mkvtomp4 tidak bekerja untuk Anda, file batch FFmpeg sederhana juga bisa dilakukan. Untuk Windows, Anda dapat mengunduh Zeranoe build . Di Linux, periksa FFmpeg dari sumber paket. Di OS X, gunakan brew install ffmpeg.

Lalu, panggil saja:

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

Ini akan membuat wadah MP4 yang valid tanpa pengodean ulang. Ulangi file-file tersebut sesuai kebutuhan dan tersedia oleh sistem operasi Anda. Namun, kumpulan ini tidak akan menyalin subtitle.

Di * nix, Anda bisa melakukan hal berikut. Cukup buat file 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

Ganti jalur ke folder video Anda di sini. Jadikan itu dapat dieksekusi dengan chmod +x convert.sh, lalu jalankan dengan ./convert.sh.

Di Windows, Anda mungkin perlu dua file Batch ( plug tak tahu malu dari sini ), satu menjadi startconvert.bat:

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

Dan yang melakukan konversi:

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

Simpan keduanya di folder video. Cukup jalankan startconvert.batdari folder tempat Anda ingin memulai konversi.


Teks

Jika Anda ingin menambahkan subtitle, Anda mungkin memerlukan prosedur manual jika hal berikut ini tidak sesuai untuk Anda:

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

Untuk mengekstrak teks terjemahan, gunakan:

mkvextract tracks input.mkv 3:subtitles.srt

Ini dengan asumsi bahwa file Anda benar-benar berisi subtitle pada track ID nomor 3 dan mereka dapat diekspor ke format SRT. Untuk memeriksa apakah file benar-benar berisi subtitle di trek 3, gunakan mkvmerge -i input.mkv.

Kemudian, gunakan MP4Box untuk menambahkan kembali subtitle ke file MP4.

mp4box -add input.mp4 -add subtitles.srt -new output.mp4
slhck
sumber
Sebagai catatan, saya menguji FFmpeg dan ekstraksi subtitle pada OS X dan bekerja dengan sempurna.
slhck
Saya menggunakan ffmpeg untuk Windows. Tetapi apakah ada batch sehingga secara otomatis mengkonversi / mux semua file dalam folder ke mp4 dengan nama file yang sama? Atau mungkin kumpulan yang mengonversi file pada drag and drop
2

Ini adalah tweak dari sebagian jawaban yang diberikan slhck (dan terima kasih, slhck!) Karena saya menemukan bahwa perintah tidak berfungsi untuk ffmpeg terbaru (saat penulisan ini) - mungkin parameternya telah berubah di antara versi?

Pada Windows 7, menggunakan ffmpeg v.20130103-git-9e36d9e-win64-static (dekompres dengan utilitas 7zip), ditemukan melalui http://ffmpeg.zeranoe.com/builds/ pada gilirannya melalui http://ffmpeg.org /download.html , perintah berikut ini mengkonversi file .mov (diambil dari iPhone) menjadi file .mp4:

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

Saya menemukan bahwa mengubah bagian .mp4 ini menjadi .avi juga berfungsi, untuk mengubahnya menjadi wadah .avi. Dengan salah satu wadah target, menggunakan paramater "-vcodec copy -acodec copy" ini tampaknya hanya menyalin aliran sumber ke wadah baru (dalam target), jadi ini adalah konversi lossless (dan saya menduga itu akan menjadi kasus dengan berbagai wadah target juga).

Ini tweak batch slhck memberi juga bekerja untuk saya:

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
r_alex_hall
sumber
1
Tidak ada perbedaan antara -c:adan -acodec, atau -c:vdan -vcodec. Sebenarnya saya masih menggunakan yang pertama hari ini, karena ini adalah sintaks yang direkomendasikan, dan keduanya disebutkan dalam dokumentasi FFmpeg . Perhatikan bahwa mengubah wadah menjadi AVI mungkin pecah untuk banyak codec video dan audio, karena file AVI tidak memiliki dukungan untuk pengkodean prediktif (yang menggunakan video H.264 — yang diberikan oleh iPhone kepada Anda). Jika Anda tidak menggunakan wadah MP4 atau MOV sebagai target, selalu lebih baik untuk menyandikan ulang.
slhck
"JIKA ADA% 1. Keluar GOTO" seharusnya membaca "% 1.avi" (atau apa pun format targetnya, alih-alih format sumber), bukan? Selain itu ini bekerja baik untuk saya, terima kasih!
kjosh
0

Pertanyaan lama, tapi inilah jawaban saya, sebagai catatan. MP4 tidak dapat membuat subtitle kecuali mereka menjadi bagian dari bingkai video, tetapi ini adalah cara saya mengonversi file .mkv ke .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
}

Simpan sebagai mkv2mp4.ps1 dan letakkan di folder yang Anda gunakan. Klik kanan dan "Open in Powershell" dan itu akan melakukan tugasnya.

Ini adalah pertama kalinya saya bahkan melihat Powershell (dan yang terakhir saya harap - mengapa MS tidak bisa hanya port Bash ?!) tetapi ini bekerja untuk saya dan didasarkan pada kode yang saya temukan di sini: https: // wiki .videolan.org / How_to_Batch_Encode / # Powershell

miken32
sumber
Apa pun baris perintah yang Anda gunakan, Anda harus meletakkannya di dalam Makefile- untuk dapat memutarkannya kembali dan hanya mengonversi sumber baru serta dapat menjalankan beberapa konversi secara paralel (untuk menggunakan semua CPU Anda ).
Mikhail T.