Ich bin ein absoluter Neuling in der Videobearbeitung, also vergib mir, wenn ich nach etwas Lächerlichem frage.
Ich bekomme Videoclips von einer Set-Top-Recorder-Box. Die Clips sind AVI-Dateien:
Resolution: 1920 x 1080
Frames Per Second: 60
Video Format: ITU H.264
Audio Format: MPEG 1 Audio, Layer 3 (MP3)
Die Auflösung und die FPS liegen weit über meinen Anforderungen, daher versuche ich, einen Befehl auszuführen, um die Dinge zu verkleinern:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
Dies ist erfolgreich, um mir die gewünschte Auflösung, Framerate und geringere Dateigröße zu geben, aber es hat auch die Qualität mehr als erwartet verschlechtert.
Ich habe mir die neue Datei angesehen und festgestellt, dass FFmpeg aus irgendeinem Grund das verwendete Format konvertiert hat:
Video Format: FFmpeg MPEG-4
Audio Format: MPEG 1 Audio, Layer 2
Mir ist unklar, warum nicht dieselben Ausgabeformate wie Eingabeformate verwendet werden. Ich habe versucht, diesen Befehl zu verwenden, um die Verwendung von H.264 zu erzwingen:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Leider ist es mit folgender Ausgabe fehlgeschlagen:
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers
built on Jan 4 2012 16:21:50 with gcc 4.6.1
configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
WARNING: library configuration mismatch
avutil configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avcodec configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avformat configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avdevice configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avfilter configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
swscale configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
postproc configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavutil 51. 7. 0 / 51. 7. 0
libavcodec 53. 6. 0 / 53. 6. 0
libavformat 53. 3. 0 / 53. 3. 0
libavdevice 53. 0. 0 / 53. 0. 0
libavfilter 2. 4. 0 / 2. 4. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 52. 0. 0 / 52. 0. 0
Input #0, avi, from 'highres.avi':
Metadata:
comment : Quality_GOOD
encoder : Lavf52.64.2
encoded_by : AverMedia_c281_1.7.2
Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s
Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
[buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4
[libx264 @ 0x8f0fb40] broken ffmpeg default settings detected
[libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium)
[libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile>
[libx264 @ 0x8f0fb40] speed presets are listed in x264 --help
[libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high
Output #0, h264, to 'lowerresforceh264.avi':
Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc
Stream mapping:
Stream #0.0 -> #0.0
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Ich bin mir nicht sicher, warum ich das nicht kann. Wenn Sie "ffmpeg-Formate" ausführen, wird h264 als eines aufgeführt, das sowohl für die Eingabe als auch für die Ausgabe verwendet werden kann.
Wenn mich jemand in die richtige Richtung weisen könnte, würde ich es sehr schätzen. Vielen Dank.
PS: Ich verwende FFmpeg Version 0.7.3-4: 0.7.3-0 unter Ubuntu 11.10.
BEARBEITEN
Ich habe eine Lösung für die Verwendung von Voreinstellungen gefunden. Nachdem ich nach Informationen zu Presets gesucht hatte, fand ich das folgende Tutorial, in dem sie besprochen wurden:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
Ich musste nur den Codec und die richtige Voreinstellung wie folgt angeben:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
Ich muss noch einige Anpassungen vornehmen, aber das ist im Grunde das, was ich wollte. Vielen Dank.
quelle
Antworten:
Ich versuche zu helfen. Erstens verstehe ich nicht, warum Sie sagen, dass FFMPEG H.264 nicht das Eingabeformat ist?
Ich kenne die FFMPEG-Befehlszeile nicht gut genug (gibt es jemanden, der das tut ?;)). Es muss einen Schalter für die Multipass-Codierung geben. Ich weiß, dass es einige integrierte Voreinstellungen gibt, die Sie wahrscheinlich verwenden und mit ziemlicher Sicherheit das tun könnten, was Sie anstreben. Diese werden normalerweise als x264-Voreinstellungen oder x264-Melodie bezeichnet. Kannst du so etwas finden?
quelle
ffmpeg hat seine x264-Voreinstellungen entfernt, sodass die Einstellung -vpre nicht mehr funktioniert.
Jetzt habe ich ein Skript zum Konvertieren von Videodateien in ein Format, das mein Mobiltelefon verarbeiten kann.
Ich werde jede Option erklären
-sws_flags lanczos+accurate_rnd
Diese Option ist der Downscaling-Algorithmus. Lanczos wird empfohlen, da er die geringsten Artefakte erzeugt, ohne zu verwischen, aber langsam ist.-vf "scale=..."
ist selbsterklärend, geben Sie die Ausgabeauflösung an-crf 20
Dies ist die Qualität. 20 ist eine gute endgültige Ausgabeeinstellung (nicht vor dem Bearbeiten verwenden). Dies ist eine konstante Qualität und die beste Option, wenn die Dateigröße nicht eng ist und bei der niedrigsten Dateigröße eine bessere Qualität als alles andere erzeugt-b 2000k
Wenn Sie andernfalls zwei Durchgänge verwenden, um maximale Qualität bei einer bestimmten Dateigröße zu erzielen (z. B. wenn Sie diese auf eine CD oder DVD einpassen müssen), sollte die feste Bitrate (z. B.) nur beim Streaming verwendet werden. Ein Sonderfall ist "0", was verlustfrei ist und Der Bereich dieser Option reicht von 1 (höchste Qualität) bis 50 (niedrigste Qualität).Ein guter Test dafür ist, die Codierung mit -crf 20 zu durchlaufen, die Bitrate zu notieren und diese dann als -b-Einstellung für eine zweite Version der Datei zu verwenden. Beide sollten dieselbe Dateigröße haben. Vergleichen Sie die beiden hinsichtlich der Qualität Unterschiede.
-preset veryslow
Hiermit wird festgelegt, wie viel CPU Sie verwenden möchten. Je langsamer diese ist, desto kleiner ist die Dateigröße und desto besser ist die Qualität.-profile:v main
Dies ist das zu verwendende H.264-Profil . Hoch ist die effizienteste Dateigröße, verwendet jedoch im Vergleich zu den anderen Formaten viel CPU zum Decodieren. Dies ist jedoch das beliebteste, da die meisten Mobiltelefone einen eingebauten Hardware-Decoder haben und der Flash Player ihn unterstützt. Meins muss ich nicht benutze main.-tune fastdecode
Mein Handy mag es nicht, Dateien ohne diese Option abzuspielen, aber normalerweise kann dies leer gelassen oder für Videospiele auf "Film" gesetzt werden. Der Hauptgrund, warum Sie dies verwenden, ist, ein wenig mehr Qualität zu erhalten.Und als letztes würde ich die Verwendung eines modernen Containerformats wärmstens empfehlen .avi ist nicht für H.264 ausgelegt. Soweit ich weiß, gibt es keinen Standard für das Speichern von H.264 oder das Vergrößern der Datei auf mehr als 2 GB. Die meisten Implementierungen sind Hacks und anfällig um probleme zu haben, benutze mkv oder mp4.
quelle
-preset
in-preset slow
-tune fastdecode
Deaktiviert das Deblocking und gewichtete B- und P-Frames sowie CABAC. Es gibt Decoder, die B-Frames verarbeiten können, aber nicht CABAC? Ich würde vorschlagen-profile:v baseline
, wenn Sie auf alte Hardware-Decoder abzielen müssen. (fastdecode
Kann nützlich sein, wenn ein Software-Decoder auf einer langsamen CPU, aber nicht auf einem Hardware-Decoder ausgerichtet ist.) Main mit B-Frames, aber ohne Deblocking oder CABAC sieht möglicherweise besser aus als die Baseline mit Deblocking. +1 für die Empfehlung von Nicht-AVI zum Speichern von h.264. IIRC, das Hauptbild sind B-Frames, aber ja, h.264 in avi ist nicht gut standardisiert und hackig.-crf 20
ein hohes Finale nennen. Sie können das auf 22 oder sogar 24 ändern und wahrscheinlich in Ordnung sein, es sei denn, es ist eine hohe Bewegung, wie bei einem Sportereignis.Es gibt einige Dinge zu verdeutlichen:
Versuchen Sie Folgendes : ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k lowerres.avi
quelle
-crf
stattdessen einen konstanten Qualitätsmodus.