Batch-Konvertieren.mkv zu. mp4

Ich möchte alle stapelweise konvertieren .mkv-Dateien in einem Ordner in. mp4 mit VLC.

Es sollte das Original-Video verwenden- / Audio-Stream und wenn möglich, die .ass Untertitel der .MKV. Es ist nicht wirklich eine Konvertierung, es ist eher wie das Ändern des Containers – mein Player kann die MKV-Videos nicht lesen.

Wenn ich diese Konvertierung von Hand (manuell) durchführe, funktioniert es, aber ich habe viele MKV-Dateien zu konvertieren, so dass es viel Zeit in Anspruch nehmen würde.

Ich habe im Internet nach einem Stapel gesucht datei, um dies zu tun und ich fand ein paar. Ich habe versucht, sie nach meinem Wunsch zu ändern, aber alle Versuche, die ich versucht habe, haben gerade eine MP4-Datei erstellt, die den Audiostream nicht enthält, und der Videostream kann auch nicht von allen meinen Media Playern auf dem PC gerendert werden .

Könnte mir also jemand sagen, wie der Stapel aussehen muss, damit er mit dem ursprünglichen Video-und Audiostream funktioniert (und vielleicht .arsch Untertitel)?

Author: slhck, 2012-06-23

3 answers

mkvtomp4

Sieht aus wie mkvtomp4 ist das, was Sie wollen?

Verwendet mpeg4ip oder GPAC MP4Box, mkvtoolnix und ffmpeg zu konvertieren lästige MKV-Dateien in mp4. Die Konvertierung kodiert das Video nicht neu und kodiert das Audio nur neu, wenn es keinen AAC-Codec verwendet (man kann dieses Verhalten mit --audio-codec überschreiben).

Sie können Windows-und Linux-Versionen auf der Google-Code-Seite herunterladen. Sie benötigen zusätzliche Software obwohl.

Überprüfen Sie die Seiten auf Downloads für Windows oder Linux. Unter OS X müssen Sie nur brew install mkvtoolnix mp4box wenn Sie Homebrew haben.

Dadurch werden Ihre Untertitel jedoch nicht kopiert. Sie benötigen einen zusätzlichen Schritt.


FFmpeg batch -

Wenn mkvtomp4 bei Ihnen nicht funktioniert, kann auch eine einfache [[52]}FFmpeg - Batchdatei ausreichen.

Ffmpeg installieren (z.B. über Homebrew oder Optionen von https://ffmpeg.org/download.html). Dann rufe einfach an:

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

Dadurch wird ein gültiger MP4-Container ohne erneute Codierung erstellt. Schleife über die Dateien nach Bedarf und verfügbar von Ihrem Betriebssystem. Dieser Stapel kopiert jedoch keine Untertitel.

In *nix könntest du Folgendes tun. Erstellen Sie einfach eine Datei 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

Ersetzen Sie hier den Pfad zu Ihrem Videoordner. Machen Sie es ausführbar mit chmod +x convert.sh, dann führen Sie es mit ./convert.sh.

In Windows benötigen Sie wahrscheinlich zwei Batch-Dateien (shameless plug von hier aus), von denen eine startconvert.bat ist:

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

Und eine, die die Konvertierung durchführt:

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

Speichern Sie beide im Videoordner. Führen Sie einfach startconvert.bat aus dem Ordner aus, aus dem Sie die Konvertierung starten möchten.


Untertitel

Wenn Sie die Untertitel hinzufügen möchten, benötigen Sie möglicherweise eine manuelle Prozedur, wenn Folgendes für Sie nicht funktioniert:

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

Zum Extrahieren von Untertiteln, Verwendung:

mkvextract tracks input.mkv 3:subtitles.srt

Dies setzt voraus, dass Ihre Datei wirklich die Untertitel mit der Titel-ID-Nummer 3 enthält und in das SRT-Format exportiert werden kann. Verwenden Sie mkvmerge -i input.mkv, um zu überprüfen, ob eine Datei tatsächlich Untertitel in Track 3 enthält.

Verwenden Sie dann MP4Box, um die Untertitel erneut zur MP4-Datei hinzuzufügen.

mp4box -add input.mp4 -add subtitles.srt -new output.mp4
 13
Author: slhck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-09-01 18:33:44

Dies ist eine Optimierung eines Teils der Antwort, die slhck gegeben hat (und danke, slhck!) weil ich festgestellt habe, dass dieser Befehl für das neueste (zu diesem Zeitpunkt) ffmpeg nicht funktioniert hat-vielleicht haben sich die Parameter zwischen den Versionen geändert?

Unter Windows 7, mit ffmpeg v. 20130103-git-9e36d9e-win64-static (dekomprimieren Sie es mit dem Dienstprogramm 7zip), gefunden über http://ffmpeg.zeranoe.com/builds/ wiederum über http://ffmpeg.org/download.html, der folgende Befehl konvertiert a.mov-Datei (genommen von einem iPhone) in eine MP4-Datei:

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

Ich habe festgestellt, dass das Ändern des. mp4-Teils davon in .avi arbeitete auch, um es zu einem zu ändern .der avi-container. Bei beiden Zielcontainern scheinen die Verwendung dieser Parameter "-vcodec copy-acodec copy" - vcodec copy-acodec copy " nur die Quellströme in einen neuen Container (im Ziel) zu kopieren, sodass es sich um eine verlustfreie Konvertierung handelt (und ich vermute, dass dies auch bei einer Vielzahl von Zielcontainern der Fall wäre).

Diese Optimierungen der Chargen slhck gab auch gearbeitet für me:

CallConvert.bat:

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

Konvertieren.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
 2
Author: r_alex_hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-01-12 17:41:46

Alte Frage, aber hier ist meine Antwort, für die Aufzeichnung. MP4 kann keine Untertitel machen, es sei denn, sie sind Teil des Videoframes, aber so konvertiere ich .mkv-Dateien in. 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
}

Speichern Sie es als mkv2mp4. ps1 und legen Sie es in dem Ordner ab, mit dem Sie arbeiten. Rechtsklick und "Open in Powershell" und es wird sein Ding machen.

Dies ist das erste Mal, dass ich mir Powershell angesehen habe (und das letzte, was ich hoffe-warum konnte MS nicht einfach Bash portieren?!), aber es funktioniert für mich und basiert auf dem code, den ich gefunden hier: https://wiki.videolan.org/How_to_Batch_Encode/#Powershell

 0
Author: miken32,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-10-10 03:58:37