anonumouus
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Hallo, als ich auf der Suche nach einem Tool war um Werbung zu entfernen ohne neu zu kodieren bin ich auf Avidemux gestoßen. Da der Film ein Avi-Container mit h.264 kodierung ist, muss man immer an den I-Bildern schneiden, also direkt davor.
Avidemux zeigt unten in der Leiste auch die Art des aktuellen Bildes an. Ich habe also den Film passend geschnitten, sodass in Avidemux alles Perfekt aussah. Im Videoplayer nachher stellte sich aber heraus, dass am Anfang in den ersten Sekunden nur ein Standbild zu sehen ist und in der eigentlichen entfernten Werbung kurz ein Werbebild auftaucht, dass gelöscht war und in Avidemux auch nicht zu finden ist. Allerdings taucht dies auf, wenn man die Funktion zum nächsten keyframe springen nutzt. Wenn ich es als mp4 exportieren möchte, sagt er auch, dass das erste Bild kein I-Bild ist, obwohl Avidemux vorher in der Ansicht das behauptet. Hat jemand eine Lösung für diesen Fehler in Avidemux. Ich habe extra Version 2.5.6 selbst kompilliert.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21816
Wohnort: Lorchhausen im schönen Rheingau
|
Avidemux _kann_ h264 nicht akkurat schneiden. Darauf weist es auch eigentlich hin, wenn man solches Material öffnet. Abgesehen davon, dass ein AVI-Container nicht für H264 geeignet ist und entweder Teile des Codecs nicht genutzt werden können oder ein nicht standardkonformer AVI-Container ertsellt wird. Such Dir am besten eine andere Software und nutze mp4 oder gleich mkv als Container.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
redknight schrieb: Avidemux _kann_ h264 nicht akkurat schneiden. Darauf weist es auch eigentlich hin, wenn man solches Material öffnet. Abgesehen davon, dass ein AVI-Container nicht für H264 geeignet ist und entweder Teile des Codecs nicht genutzt werden können oder ein nicht standardkonformer AVI-Container ertsellt wird. Such Dir am besten eine andere Software und nutze mp4 oder gleich mkv als Container.
Ich weiß, dass Avi sich mit h264 nicht verträgt, doch leider nimmt onlinetvrecorder.com in diesem Format auf. Wenn Avidemux damit nicht umgehen kann, welche Software gäbe es da? Ich möchte nämlich nicht komplett neu codieren wie die meisten anderen Programme es machen (dauert zu lange), sondern nur einen Teil rausschneiden.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21816
Wohnort: Lorchhausen im schönen Rheingau
|
Neu multiplexen in einen anderen Container sollte schnell gemacht sein und geht ohne das Videomaterial anzutasten. Zuschneiden _sollte_ auch mit ffmpeg/avconv gehen. Damit kannst Du auf jeden Fall den codec beibehalten Vermutlich nutzt onlinetvrecorder die Baselinevariante von h264, da diese Lizenzkostenfrei ist. Damit verschenkst Du jedoch massiv Platz.- Ich würde mir ein rneutes encoden mit nem richtigen Profil überlegen.
Allerdings kann glaube ich ffmpeg auch kein frame-genaues schneiden. Zumindest war da bei meiner letzten Recherche der Fall.
|
u1000
Anmeldungsdatum: 2. Oktober 2011
Beiträge: 1850
|
redknight schrieb: Neu multiplexen in einen anderen Container sollte schnell gemacht sein und geht ohne das Videomaterial anzutasten.
–> http://wiki.ubuntuusers.de/Baustelle/MKVToolnix schön mit GUI und hier im wiki erklärt.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
redknight schrieb: Neu multiplexen in einen anderen Container sollte schnell gemacht sein und geht ohne das Videomaterial anzutasten. Zuschneiden _sollte_ auch mit ffmpeg/avconv gehen. Damit kannst Du auf jeden Fall den codec beibehalten Vermutlich nutzt onlinetvrecorder die Baselinevariante von h264, da diese Lizenzkostenfrei ist. Damit verschenkst Du jedoch massiv Platz.- Ich würde mir ein rneutes encoden mit nem richtigen Profil überlegen.
Allerdings kann glaube ich ffmpeg auch kein frame-genaues schneiden. Zumindest war da bei meiner letzten Recherche der Fall.
OK, so wie ich das sehe kann man mit avconv verlustfrei den Container in mp4 verändern. Doch wie kann ich damit Zuschneiden? Neu encoden wollte ich ja nicht, weil mir das zu viel Zeitaufwand bedeutet und, wenn ich das richtig verstanden habe, jedes mal mit einem Qualitätsverlust behaftet ist.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21816
Wohnort: Lorchhausen im schönen Rheingau
|
anonumouus schrieb: Neu encoden wollte ich ja nicht, weil mir das zu viel Zeitaufwand bedeutet und,
Kommt drauf an. Wenn du zB deine Filme auf USB-Medien lagerst und transportierst, ist der Zeitaufwand beim speichern und lesen natürlich geringer, je kleiner die Datei, also je effektiver der Codec ist. ZUmal man das reencoding ja durchaus auch dann - automatisiert - machen kann, wenn Du nicht am Rechner bist. wenn ich das richtig verstanden habe, jedes mal mit einem Qualitätsverlust behaftet ist.
Das ist generell richtig. Rechnerisch ist sicher auch ein Verlust da, aber da Du das interne Format des Streams nicht änderst, dürfte der Verlust nicht sichtbar sein.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Und wie kann ich ihn mit ffmpeg oder avconv jetzt zuschneiden?
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21816
Wohnort: Lorchhausen im schönen Rheingau
|
In der Regel spricht man bei Bild- und Videobearbeitung von Zuschneiden, wenn man die Bildgröße oder den benutzten Ausschnitt ändern will. Ich vermute, du meist weiterhin das Schneiden, also zeitlich. Eine kurze Recherche mit Google, das ist so eine Suchmaschine für das ganze Internet, ergab dass ffmpeg anscheinend nur Aufteilen in verschiedene Videos beherrscht (also split ), die danach zusammengefügt werden müssen. Ich vermute, dass das nicht deinen Anforderungen entspricht. Falls doch findet sich zB hier ein Beispielcode, wie man eine einzelne Sequenz abtrennt. Und bevor Beschwerden kommen: Ich weiß, dass das kein Königsweg ist. Wenigstens kann ffmpeg ohne neuencodieren shcneiden.
|
stfischr
Anmeldungsdatum: 1. März 2007
Beiträge: 19197
|
Hi. Framegenaues Schneiden bei Verwendung von Referenzframes (B-Frames etc) ist nur mit neu Codieren möglich, da man ja Referenzen weg nimmt und somit der folgende Frame auf nicht existierende Informationen zugreift. Bei MPEG2 gab es so Tools, die dann nur einen kleinen Abschnitt des Filmes neu codiert haben, weiß aber nicht, ob es sowas mittlerweile auch für H264 gibt. Mit MP4 als Container wäre es aber möglich die kurzen Stücken, die sich nicht wegschneiden lassen einfach nicht anzuzeigen. Ist aber gefrickel im Terminal, nen GUI kenn ich dafür nicht.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Funktioniert tatsächlich mit avconv. Ist allerdings ziemlich umständlich. Also wenn jemand eine bessere Lösung hat wäre ich dankbar. Edit: Wenn ich es allerdings mit avconv schneide ist der Ton verschoben. Das kann man natürlich mit der Option async frickeln, aber es muss ja eine Ursache haben. Edit2: Der verschobene Ton lag daran, dass er nicht mit 2 Threads zurechtkam. Habe also die Option -threads 2 wieder herausgenommen und es funktioniert.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Das mit dem Ton liegt anscheinend doch nicht an den 2 threads, sondern tritt nur bei bestimmten Zeiten auf. Da mir das ganze zu umständlich war, habe ich mir ein kleiens Skript gebastelt, das sicherlich nicht das Maß der Dinge ist. Für mich reicht es erstmal. Benötigt avconv und den mencoder und funktioniert nur für Avi-Dateien mit h.264. Der Output ist dann eine mp4 mit h.264. Als Parameter muss man den Dateinamen und die Anzahl der Filmstücke zwischen den Werbungen angeben, z.B.:
script.sh film.avi 3 Es werden dann die 3 Anfangs und Endzeiten der Filmstücke erfragt in der Form 00:00:00.000.
Wenn es zu asynchronitäten kommt, kann man ja die Zeiten etwas variieren, die man am leichtesten mit avidemux oder einem videoplayer emittelt.
Den temporären Unterordner "tempotrcut" kann man nach der Prozedur wieder löschen. Das Skript an sich holt sich nur in diesem Beispiel die drei Filmausschnitte mit avconv, speichert sie im Unterordner tempotrcut und bastelt sie mit mencoder wieder zusammen. Ich garantiere allerdings für nichts. Wem es nicht gefällt, kann es ja selber anpassen.
#!/bin/bash
mkdir tempotrcut
name=$1
teilstuecke=$2
echo $teilstuecke
i=0
#Teilzeiten einlesen
while [[ $i != $teilstuecke ]]; do
echo $i
read -p "Teilstartzeit eingeben:" startzeit
read -p "Teilendzeit eingeben:" endzeit
#Nullen vor der Zahl entfernen
if [[ `echo $startzeit | cut -c1` == 0 ]]; then
h=`echo $startzeit | cut -c2`
if [[ `echo $startzeit | cut -c2` == 0 ]]; then
h=0
fi
else
h=`echo $startzeit | cut -c1-2`
fi
if [[ `echo $startzeit | cut -c4` == 0 ]]; then
min=`echo $startzeit | cut -c5`
if [[ `echo $startzeit | cut -c5` == 0 ]]; then
min=0
fi
else
min=`echo $startzeit | cut -c4-5`
fi
if [[ `echo $startzeit | cut -c7` == 0 ]]; then
sec=`echo $startzeit | cut -c8`
if [[ `echo $startzeit | cut -c8` == 0 ]]; then
sec=0
fi
else
sec=`echo $startzeit | cut -c7-8`
fi
msec=`echo $startzeit | cut -c10-12`
if [[ `echo $endzeit | cut -c1` == 0 ]]; then
eh=`echo $endzeit | cut -c2`
if [[ `echo $endzeit | cut -c2` == 0 ]]; then
eh=0
fi
else
eh=`echo $endzeit | cut -c1-2`
fi
if [[ `echo $endzeit | cut -c4` == 0 ]]; then
emin=`echo $endzeit | cut -c5`
if [[ `echo $endzeit | cut -c5` == 0 ]]; then
emin=0
fi
else
emin=`echo $endzeit | cut -c4-5`
fi
if [[ `echo $endzeit | cut -c7` == 0 ]]; then
esec=`echo $endzeit | cut -c8`
if [[ `echo $endzeit | cut -c8` == 0 ]]; then
esec=0
fi
else
esec=`echo $endzeit | cut -c7-8`
fi
emsec=`echo $endzeit | cut -c10-12`
startzeiten[$i]=$(( $h*3600 + $min*60 + $sec ))
endzeiten[$i]=$(( $eh*3600 + $emin*60 + $esec ))
i=$(( $i+1 ))
done
i=0
#Teilstücke erzeugen
while [[ $i != $teilstuecke ]]; do
differenz=$(( ${endzeiten[$i]}-${startzeiten[$i]} ))
msecdiff=$(( $emsec-$msec ))
echo "${endzeiten[$i]}"
echo "${startzeiten[$i]}"
echo "$differenz"
`avconv -i $name -ss ${startzeiten[$i]}.$msec -t $differenz.$msecdiff -acodec copy -vcodec copy tempotrcut/temp${i}.mp4`
i=$(( $i+1 ))
done
i=1
#Wenn mehr als ein Teilstück
if [[ teilstuecke > 1 ]]; then
stuecke="tempotrcut/temp0.mp4"
while [[ $i != $teilstuecke ]]; do
stuecke="${stuecke} tempotrcut/temp${i}.mp4"
i=$(( $i+1 ))
done
echo "$stuecke"
#Teilstücke zusammensetzen
`mencoder -of lavf -oac copy -ovc copy $stuecke -o ${name%.avi}.mp4`
else
`mv tempotrcut/temp0.mp4 ${name%.avi}.mp4`
fi
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Hier eine überarbeitete Version des Skriptes, weil die vorige noch viele Fehler hatte. Der Ton sollte jetzt auch synchron sein. Die Bedienung ist gleich, jedoch sollte bedacht werden, dass man nur an I-Frames schneiden kann, bzw. er das automatisch macht. #!/bin/bash
#Parameter sind Dateiname, Anzahl Filmausschnitte.
mkdir tempotrcut
name=$1
teilstuecke=$2
echo $teilstuecke
i=0
#Teilzeiten einlesen
while [[ $i != $teilstuecke ]]; do
read -p "Teilstartzeit eingeben:" startzeit
read -p "Teilendzeit eingeben:" endzeit
#Nullen vor der Zahl entfernen
if [[ `echo $startzeit | cut -c1` == 0 ]]; then
h=`echo $startzeit | cut -c2`
if [[ `echo $startzeit | cut -c2` == 0 ]]; then
h=0
fi
else
h=`echo $startzeit | cut -c1-2`
fi
if [[ `echo $startzeit | cut -c4` == 0 ]]; then
min=`echo $startzeit | cut -c5`
if [[ `echo $startzeit | cut -c5` == 0 ]]; then
min=0
fi
else
min=`echo $startzeit | cut -c4-5`
fi
if [[ `echo $startzeit | cut -c7` == 0 ]]; then
sec=`echo $startzeit | cut -c8`
if [[ `echo $startzeit | cut -c8` == 0 ]]; then
sec=0
fi
else
sec=`echo $startzeit | cut -c7-8`
fi
msec=`echo $startzeit | cut -c10-12`
if [[ `echo $endzeit | cut -c1` == 0 ]]; then
eh=`echo $endzeit | cut -c2`
if [[ `echo $endzeit | cut -c2` == 0 ]]; then
eh=0
fi
else
eh=`echo $endzeit | cut -c1-2`
fi
if [[ `echo $endzeit | cut -c4` == 0 ]]; then
emin=`echo $endzeit | cut -c5`
if [[ `echo $endzeit | cut -c5` == 0 ]]; then
emin=0
fi
else
emin=`echo $endzeit | cut -c4-5`
fi
if [[ `echo $endzeit | cut -c7` == 0 ]]; then
esec=`echo $endzeit | cut -c8`
if [[ `echo $endzeit | cut -c8` == 0 ]]; then
esec=0
fi
else
esec=`echo $endzeit | cut -c7-8`
fi
emsec=`echo $endzeit | cut -c10-12`
startzeiten[$i]=$(( $h*3600 + $min*60 + $sec ))
endzeiten[$i]=$(( $eh*3600 + $emin*60 + $esec ))
startmsec[$i]=$msec
endmsec[$i]=$emsec
i=$(( $i+1 ))
done
i=0
#Teilstücke erzeugen
while [[ $i != $teilstuecke ]]; do
differenz=$(( ${endzeiten[$i]}-${startzeiten[$i]} ))
#Tausendstel der Endstelle größer oder kleiner der Startstelle
msecdiff=$(( ${endmsec[$i]}-${startmsec[$i]} ))
if [[ ${endmsec[$i]} < ${startmsec[$i]} ]]; then
differenz=$(( $differenz -1 ))
msecdiff=$(( 1000-${startmsec[$i]} + ${endmsec[$i]} ))
fi
if [[ $msecdiff < 100 ]]; then
msecdiff="0$msecdiff"
else
if [[ $msecdiff < 10 ]]; then
msecdiff="00$msecdiff"
fi
fi
`avconv -ss ${startzeiten[$i]}.${startmsec[$i]} -i $name -t $differenz.$msecdiff -acodec copy -vcodec copy tempotrcut/temp${i}.mp4`
i=$(( $i+1 ))
done
i=1
#Wenn mehr als ein Teilstück
if [[ $teilstuecke > 1 ]]; then
stuecke="tempotrcut/temp0.mp4"
while [[ $i != $teilstuecke ]]; do
stuecke="${stuecke} tempotrcut/temp${i}.mp4"
i=$(( $i+1 ))
done
echo "$stuecke"
#Teilstücke zusammensetzen
`mencoder -of lavf -oac copy -ovc copy $stuecke -o ${name%.avi}.mp4`
else
`mv tempotrcut/temp0.mp4 ${name%.avi}.mp4`
fi Wenn jemand übrigens eine Möglichkeit kennt mp4 Dateien mit ffmpeg zu verknüpfen wäre das vielleicht besser als wenn man sich immer noch mencoder herunterladen muss. Allerdings hat es mit der concat Option bei mir nicht funktioniert.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Da die Dateien irgendwie Probleme hatten auf Apple iOS Geräten (Bild war am "wabbeln"), habe ich das Skript etwas abgeändert. Man kann das ganze mit MP4Box erst Demuxen und dann wieder Muxen, was eine Lösung für das wabbeln ist (http://sourceforge.net/projects/gpac/forums/forum/327349/topic/4632174). Da die Aufnahmen von onlinetvrecorder jedoch mp3 als Ton haben, was in mp4-Containern auf iOS nicht unterstützt wird, laufen sie ohne Ton. Um eine Neucodierung des Tons zu vermeiden, bin ich auf mkv umgestiegen was funktioniert. Für das folgende Skript wird lediglich mkvmerge (aus mkvtoolnix) benötigt. Der Nachteil ist, dass es nur an I-Frames (Keyframes) schneidet. Nicht nur der Beginn des Schnittpunktes, sondern auch das Ende eines Teiles. Bei Filmen, wo die Werbung mit einem Keyframe beginnt ist das egal. Es funktioniert nur dann, wenn auch am Anfang und am Ende des Filmes Werbung weggeschnitten wird. Die Zeit die für den Schnittpunkt angegeben wird muss übrigens immer vor dem keyframe sein und nicht gleich dem Keyframe, da er erst den folgenden Keyframe nimmt. Deshalb ist es sinnvoll immer 100ms oder ähnlich von der Schnittzeit abzuziehen. #!/bin/bash
#Schneidet die Werbung aus einer Avi-Datei.
#Wird nach mkv konvertiert, aber codec beibehalten.
#Parameter sind Dateiname, Anzahl Filmteile
mkdir tempotrcut
name=$1
teilstuecke=$2
zeiten=""
i=0
#Teilzeiten einlesen
while [[ $i -ne $teilstuecke ]]; do
read -p "Teilstartzeit eingeben:" zeitin
zeiten="${zeiten}${zeitin},"
read -p "Teilendzeit eingeben:" zeitin
zeiten="${zeiten}$zeitin"
i=$(( $i+1 ))
if [[ $i < $teilstuecke ]]; then
zeiten="${zeiten},"
fi
done
#Teilstücke erzeugen
`mkvmerge $name -o tempotrcut/temp.mkv --split timecodes:$zeiten`
i=4
teile="tempotrcut/temp-002.mkv"
temp=$(( $teilstuecke*2 + 1 ))
#Wenn mehr als ein Teil vorhanden
if [ $i -le $temp ]; then
while [[ $i -le $temp ]]; do
if [[ $i -lt 10 ]]; then
teile="${teile} +tempotrcut/temp-00${i}.mkv"
elif [[ $i -lt 100 ]]; then
teile="${teile} +tempotrcut/temp-0${i}.mkv"
fi
i=$(( $i+2 ))
done
echo "mkvmerge -o ${name%.avi}.mkv $teile"
`mkvmerge -o ${name%.avi}.mkv $teile`
#Wenn nur ein Teil vorhanden
else
`mv tempotrcut/temp-002.mkv ${name%.avi}.mkv`
fi Daher habe ich ein weiteres Skript, das wieder mit avconv schneidet, aber am Ende mit mkvmerge die Teile verbindet. Hier kann der Anfang zwar jeweils nur an keyframes sein, das Ende aber variabel. #!/bin/bash
#Schneidet die Werbung aus einer Avi-Datei.
#Wird nach mkv konvertiert, aber codec beibehalten.
#Parameter sind Dateiname, Anzahl Filmteile
mkdir tempotrcut
name=$1
teilstuecke=$2
zeiten=""
echo $teilstuecke
i=0
#Teilzeiten einlesen
while [ $i != $teilstuecke ]; do
read -p "Teilstartzeit eingeben:" startzeit
read -p "Teilendzeit eingeben:" endzeit
#Nullen vor der Zahl entfernen
if [[ `echo $startzeit | cut -c1` == 0 ]]; then
h=`echo $startzeit | cut -c2`
else
h=`echo $startzeit | cut -c1-2`
fi
if [[ `echo $startzeit | cut -c4` == 0 ]]; then
min=`echo $startzeit | cut -c5`
else
min=`echo $startzeit | cut -c4-5`
fi
if [[ `echo $startzeit | cut -c7` == 0 ]]; then
sec=`echo $startzeit | cut -c8`
else
sec=`echo $startzeit | cut -c7-8`
fi
if [[ `echo $startzeit | cut -c10` == 0 ]]; then
if [[ `echo $startzeit | cut -c11` == 0 ]]; then
msec=`echo $startzeit | cut -c12`
else
msec=`echo $startzeit | cut -c11-12`
fi
else
msec=`echo $startzeit | cut -c10-12`
fi
if [[ `echo $endzeit | cut -c1` == 0 ]]; then
eh=`echo $endzeit | cut -c2`
else
eh=`echo $endzeit | cut -c1-2`
fi
if [[ `echo $endzeit | cut -c4` == 0 ]]; then
emin=`echo $endzeit | cut -c5`
else
emin=`echo $endzeit | cut -c4-5`
fi
if [[ `echo $endzeit | cut -c7` == 0 ]]; then
esec=`echo $endzeit | cut -c8`
else
esec=`echo $endzeit | cut -c7-8`
fi
if [[ `echo $startzeit | cut -c10` == 0 ]]; then
if [[ `echo $startzeit | cut -c11` == 0 ]]; then
emsec=`echo $startzeit | cut -c12`
else
emsec=`echo $startzeit | cut -c11-12`
fi
else
emsec=`echo $startzeit | cut -c10-12`
fi
startzeiten[$i]=$(( $h*3600 + $min*60 + $sec ))
endzeiten[$i]=$(( $eh*3600 + $emin*60 + $esec ))
startmsec[$i]=$msec
endmsec[$i]=$emsec
i=$(( $i+1 ))
done
i=0
#Teilstücke erzeugen
while [ $i -ne $teilstuecke ]; do
differenz=$(( ${endzeiten[$i]}-${startzeiten[$i]} ))
#Tausendstel der Endstelle größer oder kleiner der Startstelle
msecdiff=$(( ${endmsec[$i]}-${startmsec[$i]} ))
if [ ${endmsec[$i]} -lt ${startmsec[$i]} ]; then
differenz=$(( $differenz -1 ))
msecdiff=$(( 1000-${startmsec[$i]} + ${endmsec[$i]} ))
fi
if [ $msecdiff -lt 100 ]; then
msecdiff="0$msecdiff"
elif [ $msecdiff -lt 10 ]; then
msecdiff="00$msecdiff"
fi
echo "${startzeiten[$i]}.${startmsec[$i]}"
echo "$differenz.$msecdiff"
`avconv -ss ${startzeiten[$i]}.${startmsec[$i]} -i ${name} -t $differenz.$msecdiff -acodec copy -vcodec copy tempotrcut/temp${i}.mp4`
i=$(( $i+1 ))
done
i=1
#Wenn mehr als ein Teilstück
stuecke="tempotrcut/temp0.mp4"
while [ $i -ne $teilstuecke ]; do
stuecke="${stuecke} +tempotrcut/temp${i}.mp4"
i=$(( $i+1 ))
done
echo "$stuecke"
#Teile zusammensetzen
`mkvmerge -o ${name%.avi}.mkv $stuecke` Bei den Skripten ist natürlich der Nachteil, dass man die Zeiten ungefähr ausprobieren muss, wenn das Ergebnis nicht zufriedenstellend ist. Edit: 2. Skript leicht geändert: Unter 100 Millisekunden gab einen Fehler. Edit 2: 1. Skript leicht geändert: Bei keiner Werbung in der Mitte wird nicht zweimal umkodiert. Edit 3: Das mp3-Ton in mp4-Videos auf iOS Geräten nicht funktioniert in mkv aber schon, stimmt wohl doch nicht so. Apple unterstützt von Hause aus nur mp4 mit h.264 als video und aac als audio codec. Möchte man andere verwenden benötigt man ein Video-Player-App. Der Grund weshalb bei mir im Videoplayer das ganze ohne Ton abgespielt wurde, liegt daran, dass der Player bei mp4 auf Hardware-Dekodierung eingestellt war (welche nur h.264 mit aac unterstützt) und bei mkv nicht auf Hardware-Dekodierung. Falls also jemand das gleiche Problem hat: Einfach Hardware-Dekodierung deaktivieren, was dann allerdings mehr Leistung und Akku verbraucht.
|
anonumouus
(Themenstarter)
Anmeldungsdatum: 3. Juni 2010
Beiträge: 184
|
Habe festgestellt, dass die Dateien, die mit ffmpeg/avconv geschnitten wurden im VLC ruckeln, weil die Dateien von onlinetvrecorder nicht in Ordnung sind. Daher kommt auch immer der Fehler pts has no value.
Um das zu beheben muss man das Video demuxen und dann neu mit MP4Box muxen. Siehe: http://forum.ubuntuusers.de/topic/ffmpeg-videos-ruckeln/#post-5534132. Um das ruckeln zu vermeiden, sollte man die Datei entweder mit MP4Box demuxen und muxen oder vor dem schneiden mit mkvmerge, das ganze in eine mkv-Datei packen. Ich habe mir jetzt Avidemux 2.6.1 geholt und damit kann man die Dateien framegenau schneiden, wenn der Startpunkt immer ein I-Frame ist. Das ganze funktioniert jedoch nicht mit den Avi-Files von onlinetvrecorder.com, weil die beschädigt sind. Man muss das wie beschrieben mit MP4Box vorher reparieren.
|