2016-08-17 9 views
0

ich ein Video mit ffmpeg mit dem folgenden Code am Dreh:ohne Qualität zu verlieren

ffmpeg -i nd750_a0040.MOV -vf "transpose=dir=clock, transpose=dir=clock" out.mkv 

Die resultierende Datei fast 10-fach kleiner als der Eingang ist. Ich habe this question welche Adressen eine damit verbundene Frage und suggsts fand den Codec und Bitrate aus der folgenden erhalten ffmpeg vorbei:

bitratev="$(ffmpeg -i "$1" -f null - |& grep video: | awk -F'[:|kB]' '{print $2}')" 
codecv="$(ffprobe -loglevel error -select_streams v:0 -show_entries stream=codec_name -of default=nk=1:nw=1 "$1")" 

jedoch beide Befehle geben Sie mir die gleiche Leistung für beide Dateien: 2643 und h264 bzw. . Bin ich richtig in der Annahme, dass ffmpeg diese Werte für die Ausgabe gleich bleibt - standardmäßig?

Allerdings, wenn ich die Dateien mit ffmpeg -i inspizieren erhalte ich unterschiedliche Bitrate Werte:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'nd750_a0040.MOV': 
    Metadata: 
    major_brand  : qt 
    minor_version : 537331968 
    compatible_brands: qt niko 
    creation_time : 2016-06-18 04:28:03 
    Duration: 00:15:40.74, start: 0.000000, bitrate: 11569 kb/s 
    Stream #0:0(eng): Video: h264 (High) (avc1/0x31637661), yuvj420p(pc, smpte170m/bt709/bt470m), 1920x1080, 10029 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default) 
    Metadata: 
     creation_time : 2016-06-18 04:28:03 
    Stream #0:1(eng): Audio: pcm_s16le (sowt/0x74776F73), 48000 Hz, 2 channels, s16, 1536 kb/s (default) 
    Metadata: 
     creation_time : 2016-06-18 04:28:03 

und

Input #0, matroska,webm, from 'out.mkv': 
    Metadata: 
    COMPATIBLE_BRANDS: qt niko 
    MAJOR_BRAND  : qt 
    MINOR_VERSION : 537331968 
    ENCODER   : Lavf56.40.101 
    Duration: 00:15:40.74, start: 0.000000, bitrate: 1445 kb/s 
    Stream #0:0(eng): Video: h264 (High), yuvj420p(pc), 1920x1080, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default) 
    Metadata: 
     CREATION_TIME : 2016-06-18 04:28:03 
     LANGUAGE  : eng 
     ENCODER   : Lavc56.60.100 libx264 
     DURATION  : 00:15:40.742000000 
    Stream #0:1(eng): Audio: vorbis, 48000 Hz, stereo, fltp (default) 
    Metadata: 
     CREATION_TIME : 2016-06-18 04:28:03 
     LANGUAGE  : eng 
     ENCODER   : Lavc56.60.100 libvorbis 
     DURATION  : 00:15:40.743000000 

Also habe ich ein paar Fragen:

  • Welche Bitrate der richtige für jedes Video?
  • Ist der gesamte Informationsverlust zwischen diesen beiden Dateien durch die Bitrate abgedeckt (oder ändert fffmpeg standardmäßig andere Dinge, die zu einer niedrigeren Dateigröße führen - wenn ja, was?)?
  • Wie stelle ich sicher, dass sich nichts anderes ändert als das Containerformat und die Rotation?

Antwort

1

Wenn Sie das Video unter Verwendung eines Filters, wie das transponieren Filter manipulieren, um das Video wird neu codiert werden.

Mit dem folgenden Befehl erhalten Sie die Bitrate für den Videostream, falls verfügbar.

ffprobe video.mov -select_streams v -show_entries stream=bit_rate -of compact=p=0:nk=1 

Siehe meine Antwort here, wenn dies keinen Wert ergibt.


Ihr vorhandener Befehl codiert das Audio ebenfalls neu. Sie können, dass überspringen und eine Bitrate angeben:

ffmpeg -i nd750_a0040.MOV -vf "transpose=clock,transpose=clock" -b:v 10M -c:a copy out.mkv 

Der x264 kodieren ist klug, so dass es nur so viel bis die Bitrate je nach Bedarf verwenden.

Anstatt sich an die Bitrate zu halten, können Sie die CRF-Methode verwenden, die darauf abzielt, eine konstante Qualität zu erhalten. 18 ist eine gute Zahl. Lower ist besser, aber visuell normalerweise nicht bemerkbar.

ffmpeg -i nd750_a0040.MOV -vf "transpose=clock,transpose=clock" -crf 18 -c:a copy out.mkv 

Natürlich, wenn Ihr Player unterstützt wird, können Sie nur eine Rotation-Tag hinzufügen und überhaupt nicht neu kodieren.

Verwandte Themen