Пакетное преобразование .mkv в .mp4

Я хочу конвертировать все файлы .mkv в папку в .mp4 с VLC.

Он должен использовать исходный поток видео / аудио и, если возможно, субтитр .ass .mkv. На самом деле это не конверсия, это больше похоже на изменение контейнера – мой плеер не может читать видео MKV.

Если я сделаю это преобразование вручную (вручную), это сработает, но у меня есть много файлов MKV для конвертирования, поэтому потребуется много времени.

Я искал интернет для пакетного файла, чтобы сделать это, и я нашел несколько. Я попытался изменить их по своему желанию, но все попытки, которые я попробовал, просто создали файл .mp4, который не содержит аудиопоток, и видеопоток также не могут быть отображены всеми моими медиаплеерами на ПК.

Так может ли кто-нибудь сказать мне, как должна выглядеть партия, поэтому она работает с исходным видео и аудиопотоком (и, возможно, субтитры .ass)?

    mkvtomp4

    Похоже, что mkvtomp4 – это то, что вы хотите?

    Использует mpeg4ip или MP4Box GPAC, mkvtoolnix и ffmpeg для преобразования проблемных файлов mkv в mp4 . Преобразование не перекодирует видео и только перекодирует звук, если он не использует кодек AAC (можно переопределить это поведение, используя -audio-codec).

    Вы можете загрузить версии Windows и Linux на странице Google Code. Однако вам понадобится дополнительное программное обеспечение.

    • MKVToolnix
    • MP4Box

    Проверьте сайты для загрузки для Windows или Linux. На OS X вам нужно только brew install mkvtoolnix mp4box если у вас есть Homebrew .

    Однако это не будет копировать ваши субтитры. Вам понадобится дополнительный шаг.


    FFmpeg

    Если mkvtomp4 не работает для вас, также может работать простой пакетный файл FFmpeg . Для Windows вы можете скачать Zeranoe сборки . В Linux проверьте FFmpeg из источников пакетов. В OS X используйте brew install ffmpeg .

    Затем просто позвоните:

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

    Это создаст действительный контейнер MP4 без повторного кодирования. Перебирайте файлы по мере необходимости и доступны вашей операционной системе. Однако эта партия не будет копировать субтитры.

    В * nix вы можете сделать следующее. Просто создайте файл 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 .

    В Windows вам, вероятно, нужны два пакетных файла ( бесстыдный плагин отсюда ), один из которых – 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 .

    Затем используйте MP4Box для повторного добавления субтитров в файл MP4.

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

    Это часть части ответа slhck (и спасибо, slhck!), Потому что я обнаружил, что команда не работает для последней (при этой записи) ffmpeg – возможно, параметры изменились между версиями?

    В Windows 7 с помощью ffmpeg v.20130103-git-9e36d9e-win64-static (распакуйте его с помощью утилиты 7zip), которую можно найти через http://ffmpeg.zeranoe.com/builds/, в свою очередь, через http://ffmpeg.org /download.html , следующая команда преобразует файл .mov (взятый из iPhone) в файл .mp4:

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

    Я обнаружил, что изменение части .mp4 этого на .avi также работало, чтобы изменить его на контейнер .avi. С помощью целевого контейнера использование этих копий «-vcodec copy -acodec copy» похоже только для копирования исходных потоков в новый контейнер (в целевой), поэтому это конверсия без потерь (и я предполагаю, что это было бы в случае с Разнообразие целевых контейнеров).

    Эти хитрости партий slhck дали и работали для меня:

    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 

    Старый вопрос, но вот мой ответ, для записи. 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», и он сделает все возможное.

    Это первый раз, когда я даже посмотрел на Powershell (и последнее, что я надеюсь – почему MS не мог просто подключить Bash ?!), но он работает для меня и основан на коде, который я нашел здесь: https: // wiki .videolan.org / How_to_Batch_Encode / # Powershell

    Interesting Posts

    Как сохранить / получить открытый / закрытый ключ RSA

    импортирование CSV в phpmyadmin

    JQuery: определить, нажата ли нажата средняя или правая кнопка мыши, если да, сделайте следующее:

    Как отсортировать список по алфавиту?

    Суммируйте результаты нескольких запросов, а затем найдите 5 лучших в SQL

    Будет ли производительность моего ноутбука увеличиваться, если я перейду с Ubuntu 14.04 32 бит на 16.04 64 бит?

    Как перезапустить службу после того, как приложение было убито из недавних задач

    Windows Server 2008 Create Symbolic Link, обновленная политика безопасности по-прежнему дает привилегию

    Удалите ненужную криптографию с открытым ключом GPG под капотом

    Открытие защищенного паролем pdf-файла с iTextSharp

    Создание символической ссылки в Mac OS X Finder

    Каков наилучший способ сохранить папку, синхронизированную с моим USB-накопителем?

    Кодирование и декодирование QR-кода с использованием zxing

    Указывает ли объявление, использующее «авто», выражение extern, использующее спецификатор конкретного типа?

    Моя клавиатура Windows «умна» с ключами цитат – как я могу ее остановить?

    Давайте будем гением компьютера.