Warum schlägt ffmpeg mit der Konvertierung einer .ts-Datei in eine .mpeg-Datei fehl?

2272
Multisync

Ich mag verlustlos aa umwandeln .tsDatei in ein brauchbaren Dateiformat, zum Beispiel .mpeg. Leider scheint die konvertierte Datei kein Audio zu haben. Zumindest höre ich nichts, wenn ich es in VLC abspiele (Video funktioniert jedoch), und ein anderer Media Player ( Audience ) öffnet es überhaupt nicht. Kannst du mir sagen, warum FFmpeg versagt hat und wie man es richtig macht?

Vielen Dank!

Der Befehl, den ich verwendet habe:

privat@manuel-Inspiron-3721:~/Downloads$ ffmpeg -i hls-720p.ts -codec copy hls-720p.mpeg

FFmpegs-Ausgabe:

ffmpeg version 2.8.10-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609 configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 Input #0, mpegts, from 'hls-720p.ts': Duration: 00:06:31.86, start: 1.400000, bitrate: 1432 kb/s Program 1  Metadata: service_name : Service01 service_provider: FFmpeg Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 139 kb/s [mpeg @ 0x1c7b680] VBV buffer size not set, using default size of 130KB If you want the mpeg file to be compliant to some specification Like DVD, VCD or others, make sure you set the correct buffer size Output #0, mpeg, to 'hls-720p.mpeg': Metadata: encoder : Lavf56.40.101 Stream #0:0: Video: h264 ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 90k tbn, 25 tbc Stream #0:1: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, 139 kb/s Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 9796 fps=0.0 q=-1.0 Lsize= 62752kB time=00:06:31.86 bitrate=1311.8kbits/s  video:57506kB audio:4853kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.631245% 

VLCs-Codec-Informationen

Original- .tsDatei: Ursprüngliche .ts-Datei

Konvertierte- .mpegDatei: Konvertierte .mpeg-Datei

0

1 Antwort auf die Frage

2
NuTTyX

Wenn Sie verwenden -c copy, kodieren Sie das Video nicht, sondern ändern nur die "Hüllkurve", die weder h264 noch aac unterstützt.

.mpeg-Dateien müssen mpeg1 oder mpeg2-Video und mpeg1-Layer 1, 2 oder 3 enthalten. H264 ist mpeg4 und aac ist eine Erweiterung von mpeg2.

VLC wird möglicherweise abgespielt, da es fast alles abspielen kann, aber Ihre "codierte" Ausgabe ist jetzt weniger kompatibel als je zuvor.

Versuchen Sie, es in .mp4 zu codieren, um die Kompatibilität zu verbessern. Ich denke, dass Sie das Kopierflag in diesem Fall beibehalten können.

Hinweis: .mpeg ist ein sehr altes Format und die Ausgabe, die das Kopierflag entfernt, würde ein Video von geringer Qualität wiedergeben.

Bei der Auswahl von ".mp4" als Ausgabedatei erhielt ich den folgenden Fehler: "[mp4 @ 0x901680] Fehlerhafter AAC-Bitstream erkannt: Verwenden Sie den Audio-Bitstream-Filter 'aac_adtstoasc', um dies zu beheben (Option '-bsf: a aac_adtstoasc' mit ffmpeg)` . Ich könnte das Problem mit der vorgeschlagenen `-bsf: a aac_adtstoasc`-Option beheben und funktioniert jetzt. Ist die Konvertierung noch verlustfrei? Ich bin sehr besorgt darüber, keine Umwandlungsverluste einzuführen. Multisync vor 7 Jahren 0
Dieser Filter erstellt eine MPEG-4 AudioSpecificConfig aus einem MPEG-2/4-ADTS-Header und entfernt den ADTS-Header. Wenn Sie nicht aufgefordert wurden, das Kopierflag zu entfernen, um den Filter zu verwenden, können Sie davon ausgehen, dass keine Neucodierung und kein Qualitätsverlust vorliegt. NuTTyX vor 7 Jahren 1