AVI zu MP4: Handbrake erkennt Tonspur nicht

pseudopseudonym

Admiral
Registriert
Mai 2017
Beiträge
8.719
Servus!

Wie ich in einem anderen Thread geschrieben habe, übertrage ich Mini-DV-Kassetten auf meine NAs:
https://www.computerbase.de/forum/threads/mini-dv-kassetten-ueber-firewire-uebertragen.1913689/

Nun will ich die AVIs in MP4 umwandeln. Dafür möchte ich Handbrake unter Ubuntu verwenden, allerdings erkennt Handbrake den Ton nicht.
Original-Codecs:
Screenshot.png


Reicht es, ein paar Codecs nachzuinstallieren?
Oder sollte ich eine ganz andere Software nehmen? Wenn ja, welche (gerne Linux)?
 
Von araw höre ich zum ersten mal.
Wenn ich Probleme mit Exoten habe, versuche ich den Stream in Audacity zu laden, das programm hat bis dato fast alles erkannt. Dann hab ich es dort in das Zielformat (oder ein Zwischenformat) umgewandelt und am ende in den Zielcontainer mit mkvtoolnix gemuxt. So bearbeite ich die Audiospuren, wenn Nachbearbeitung erforderlich ist.
 
Na super, das klingt nach Spaß...
Sind viele Dateien, sehr viele.
 
Nimm einfach direkt ffmpeg. Handbrake basiert darauf und fügt nur eine mehr oder weniger gute GUI hinzu.

Code:
ffmpeg -i input.avi -c:v libx264 -preset veryslow -tune film -profile:v high -crf 18 -c:a aac -b:a 256K output.mp4

CRF ist gleichbedeutend wie in HandBrake. Höherer CRF = Niedrigere Qualität = Kleinere Datei. 16 sollte nahezu transparent (= kein subjektiv feststellbarer Qualitätsverlust) sein, 20 gilt geheimhin als "sehr gute" Qualität. Vielleicht mal mit probieren. Audio-Bitrate von 256KBps sollte bei AAC ebenfalls ausreichen für Transparenz.

Da diese Dateien wohl für lange Zeit archiviert werden sollen würde ich mit bitrate nicht geizen. Die Dateigröße fällt nach einigen Jahren eh nicht mehr ins Gewicht und Qualität kann man nicht zurückbekommen wenn man sie einmal rauskonvertiert hat.

ffmpeg kann man auch gut scripten, z.B. als for-schleife:
Bash:
for f in *.avi; do ffmpeg -i "$f" .... "${f%.*}.mp4"; done
 
  • Gefällt mir
Reaktionen: ghecko und pseudopseudonym
@Marco01_809
Handbrake ist schon gut und praktisch. Habe aber schon befürchtet, dass es auch ffmpeg hinausläuft.
 
@ghecko
Nicht, wenn man halb abwesend am Fernseher rumklickt, weil die Familie dabei ist.
 
"araw" ist eine Bezeichnung für einen Audio-Stream mit "raw"-Codec. Der Stream ist also im Normalfall ein PCM-Stream... Eventuell reicht es für Handbrake aus, wenn man die FourCC-Kennung von araw auf PCM ändert.
 
Du brauchst nur eine .bat Datei, die ffmpeg.exe und ein Output Ordner
Code:
for %%a in ("*.*") do ffmpeg -i "%%a" -map_metadata -1 -c:v libx265 -crf 22 -c:a 320k aac -movflags +faststart -tag:v hvc1 "newfiles\%%~na.mp4"
pause
Und das funktioniert mit jedem Videoformat.

Quelldateien in den Ordner mit ffmpeg.exe rein > .bat ausführen > fertige Datein landen im newfiles Ordner

Nimm die Static von hier https://ffmpeg.zeranoe.com/builds/ und entpacke diese. Du brauchst nur die ffmpeg.exe davon.
 
Zuletzt bearbeitet:
ghecko schrieb:
Bloß nicht die Konsole anfassen, sonst wird man sofort als Hacker betitelt.
Nach der Konsole ist aber nur ein doppel klick XD
 
ghecko schrieb:
Bloß nicht die Konsole anfassen, sonst wird man sofort als Hacker betitelt.
Och, mit der mache ich viel, sehr viel.
Auch für ffmpeg teilweise.
Und ich mag die auch.
Aber bei manchen Sachen in manchen Situationen...
 
NameHere schrieb:
Du brauchst nur eine .bat Datei, die ffmpeg.exe und ein Output Ordner
Code:
for %%a in ("*.*") do ffmpeg -i "%%a" -map_metadata -1 -c:v libx265 -crf 22 -c:a 320k aac -movflags +faststart -tag:v hvc1 "newfiles\%%~na.mp4"
pause
Und das funktioniert mit jedem Videoformat.
So ganz funktioniert hat es nicht (und ich wollte libx264 nutzen, vielleicht daher die Probleme), aber so passt es mit der ffmpeg.exe im selben Verzeichnis:
Code:
for %%a in ("*.avi") do ffmpeg.exe -i "%%a" -preset veryslow -threads 0 -map_metadata -1 -c:v libx264 -crf 20 -c:a aac -movflags +faststart "MP4\%%~na.mp4"
pause

Unter Linux funktioniert das:
Bash:
#!/bin/bash
scriptdir=$(cd $(dirname $0); pwd -P)
source_dir=$scriptdir
target_dir="$scriptdir/MP4"

mkdir $target_dir

for i in *.avi;
  do name=$(basename $i .avi)
  echo "source: $source_dir/$name.avi"
  echo "target: $target_dir/$name.mp4"
 
  ffmpeg -i "$source_dir/$name.avi" -preset veryslow -threads 0 -map_metadata -1 -c:v libx264 -crf 20 -c:a aac -movflags +faststart "$target_dir/$name.mp4"
   
  echo ''
  echo '' 
done
Edit: Das Linux-Teil funktioniert leider nicht richtig, es überpringt Videos und ich weiß nicht, warum.
Edit2: Jetzt scheint alles zu klappen.
 
Zuletzt bearbeitet: (Linux-Script repariert)
Nachdem ich alles konvertiert hab, ist mir eine Sache aufgefallen.
Deinterlacing (diese Zeilenbildung bei größeren Bewegungen).
Also alles nochmal mit nem neuen Skript:

Bash:
#!/bin/bash
scriptdir=$(cd $(dirname $0); pwd -P)
source_dir=$scriptdir
target_dir="$scriptdir/MP4__yadif"

mkdir $target_dir

for i in *.avi;
  do name=$(basename $i .avi)
  echo "source: $source_dir/$name.avi"
  echo "target: $target_dir/$name.mp4"

  ffmpeg -i "$source_dir/$name.avi" -preset veryslow -vf yadif -threads 0 -map_metadata -1 -c:v libx264 -crf 20 -c:a aac -movflags +faststart "$target_dir/$name.mp4"
   
  echo ''
  echo ''

done
Das Script funktioniert BTW so, dass man es in den Ordner mit den zu konvertierenden Dateien legt und dort ausführt. Primitiv, läuft aber.


Die Batch-Variante mit Deinterlacing wäre wohl das (ungetestet):
Bash:
for %%a in ("*.avi") do ffmpeg.exe -i "%%a" -preset veryslow -vf yadif -threads 0 -map_metadata -1 -c:v libx264 -crf 20 -c:a aac -movflags +faststart "MP4\%%~na.mp4"
pause
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: MechanimaL
Zurück
Oben