Ich habe also eine Handvoll alter mpeg2 ( .mpg
) Dateien mit den folgenden Profilen, wie sie von ffmpeg bereitgestellt werden (die Timecodes sind jeweils unterschiedlich):
Stream #0:0(eng): Video: mpeg4 (Advanced Simple Profile) (mp4v / 0x7634706D), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1385 kb/s, 29.88 fps, 29.97 tbr, 2997 tbn, 1k tbc (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
encoder : MPEG-4 Video
timecode : 00:00:08;07
Stream #0:1(eng): Data: none (tmcd / 0x64636D74)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
timecode : 00:00:08;07
Stream #0:2(eng): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, 2 channels, s16, 1536 kb/s (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
Es scheint, dass für jeden von ihnen in der Wiedergabe (mit mplayer und vlc) der erste Frame für etwa 8 Sekunden eingefroren wird, während der Ton bei 00:00:00 beginnt. Das Audio bleibt also dem Videostream durchgehend etwa 8 Sekunden voraus.
Wenn ich versuche, sie mit FFmpeg zu konvertieren, indem ich die Video- und Audio-Codecs kopiere, erhalte ich eine Menge "Buffer Underflow"- und "Packet too large"-Fehler (was wahrscheinlich mit dem Codec usw. zu tun hat gemäß: https:// superuser.com/questions/835871/how-to-make-an-mpeg2-video-file-with-the-highest-quality-possible-using-ffmpeg ). Wenn ich es in einen anderen Video- und Audio-Codec konvertiere, ist es in Ordnung - kein Pufferunterlauf/Paket zu große Fehler. Aber der Ton bleibt nicht synchron mit dem Video.
Ich habe auch versucht, die ffmpeg-Konvertierung -itsoffset -8.0
an die Eingabedatei zu übergeben, und das Audio ist immer noch nicht synchron, obwohl das Video dann bei der Wiedergabe für die konvertierte Datei scheinbar von 00:00:00 fortschreitet.
Ich bin mir nicht sicher, ob ich noch etwas dagegen tun kann, aber ich frage mich, ob es möglich ist, dieses Audio und Video zu synchronisieren. Ich habe auch mencoder mit den Optionen -mc 0
, -noskip
und ausprobiert, -vf harddup
und das synchronisiert das Video tatsächlich für den ersten Teil, aber dann fallen Audio und Video nach etwa 30 Minuten nicht mehr synchron aus.
Update - einige Eingabe- und Ausgabedetails:
ffmpeg -threads 1 -itsoffset -8.0 -i in.mpg -f mp4 -g 60 -c:v libx264 -pix_fmt yuvj420p -c:a libfdk_aac -y out.mp4
ffmpeg version 2.7.2 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8.5 (Gentoo 4.8.5 p1.3, pie-0.6.2)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared -- cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags=' ' --disable- static --enable-avfilter --enable-avresample --disable-stripping --enable-version3 --disable-indev=v4l2 --disable -outdev=v4l2 --disable-indev=oss --disable-indev=jack --disable-outdev=oss --disable-outdev=sdl --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-doc --disable-gnutls --enable-gpl --enable- hardcoded-tables --enable-iconv --disable-lzma --enable-network --disable-openssl --enable-postproc --disable- libsmbclient --disable-ffplay --disable-vaapi --disable-vdpau --enable-xlib --disable-libxcb --disable-libxcb- shm --disable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable- libcaca --disable-openal --disable-opengl --disable-libv4l2 --disable-libpulse --disable-libopencore-amrwb -- disable-libopencore-amrnb --enable-libfdk-aac --disable-libopenjpeg --disable-libbluray --disable-libcelt -- disable-libgme --disable-libgsm --disable-libmodplug --disable-libopus --disable-libquvi --disable-librtmp -- disable-libssh --disable-libschroedinger --disable-libspeex --disable-libvorbis --enable-libvpx --disable- libzvbi --disable-libbs2b --disable-libflite --disable-frei0r --disable-libfribidi --disable-fontconfig --disable -ladspa --disable-libass --disable-libfreetype --disable-libsoxr --enable-pthreads --enable-libvo-aacenc -- disable-libvo-amrwbenc --enable-libmp3lame --disable-libaacplus --disable-libfaac --disable-libtheora --disable- libtwolame --disable-libwavpack --disable-libwebp --enable-libx264 --disable-libx265 --disable-libxvid --enable- x11grab --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=core-avx-i
libavutil 54. 27.100 / 54. 27.100
libavcodec 56. 41.100 / 56. 41.100
libavformat 56. 36.100 / 56. 36.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 16.101 / 5. 16.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.100 / 1. 2.100
libpostproc 53. 3.100 / 53. 3.100
Guessed Channel Layout for Input Stream #0.2 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in.mpg':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2006-XX-XX XX:XX:XX
Duration: 01:00:19.88, start: 0.000000, bitrate: 2940 kb/s
Stream #0:0(eng): Video: mpeg4 (Advanced Simple Profile) (mp4v / 0x7634706D), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1385 kb/s, 29.88 fps, 29.97 tbr, 2997 tbn, 1k tbc (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
encoder : MPEG-4 Video
timecode : 00:00:08;07
Stream #0:1(eng): Data: none (tmcd / 0x64636D74)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
timecode : 00:00:08;07
Stream #0:2(eng): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, 2 channels, s16, 1536 kb/s (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
[swscaler @ 0x1297040] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x12c7be0] using SAR=1/1
[libx264 @ 0x12c7be0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x12c7be0] profile High, level 3.0
[libx264 @ 0x12c7be0] 264 - core 148 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_ bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=60 keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'out.mp4':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
encoder : Lavf56.36.100
Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
timecode : 00:00:08;07
encoder : Lavc56.41.100 libx264
Stream #0:1(eng): Audio: aac (libfdk_aac) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, s16, 139 kb/s (default)
Metadata:
creation_time : 2006-XX-XX XX:XX:XX
handler_name : Apple Alias Data Handler
encoder : Lavc56.41.100 libfdk_aac
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
Stream #0:2 -> #0:1 (pcm_s16be (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
Past duration 239.760002 too large
frame= 98 fps=0.0 q=26.0 size= 345kB time=00:00:02.26 bitrate=1250.8kbits/
frame= 186 fps=185 q=29.0 size= 933kB time=00:00:05.18 bitrate=1474.3kbits/
...
frame=108248 fps=218 q=-1.0 Lsize= 708299kB time=01:00:11.81 bitrate=1606.5kbits/s dup=78 drop=0
video:643485kB audio:61559kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.461699%
[libx264 @ 0x12c7be0] frame I:1846 Avg QP:19.79 size: 25621
[libx264 @ 0x12c7be0] frame P:93233 Avg QP:24.01 size: 6332
[libx264 @ 0x12c7be0] frame B:13169 Avg QP:25.95 size: 1618
[libx264 @ 0x12c7be0] consecutive B-frames: 80.5% 8.5% 3.6% 7.3%
[libx264 @ 0x12c7be0] mb I I16..4: 17.5% 76.4% 6.1%
[libx264 @ 0x12c7be0] mb P I16..4: 1.9% 9.2% 0.4% P16..4: 35.5% 9.0% 6.3% 0.0% 0.0% skip:37.6%
[libx264 @ 0x12c7be0] mb B I16..4: 0.4% 1.7% 0.0% B16..8: 28.2% 3.0% 0.7% direct: 4.2% skip:61.8% L0:59.1% L1:33.8% BI: 7.1%
[libx264 @ 0x12c7be0] 8x8 transform intra:79.2% inter:86.3%
[libx264 @ 0x12c7be0] coded y,uvDC,uvAC intra: 65.8% 77.0% 11.3% inter: 24.3% 16.3% 1.4%
[libx264 @ 0x12c7be0] i16 v,h,dc,p: 42% 32% 24% 3%
[libx264 @ 0x12c7be0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 24% 40% 3% 2% 2% 2% 2% 4%
[libx264 @ 0x12c7be0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 33% 27% 12% 3% 5% 5% 5% 4% 5%
[libx264 @ 0x12c7be0] i8c dc,h,v,p: 40% 28% 29% 3%
[libx264 @ 0x12c7be0] Weighted P-Frames: Y:0.6% UV:0.2%
[libx264 @ 0x12c7be0] ref P L0: 73.9% 12.5% 9.0% 4.5% 0.0%
[libx264 @ 0x12c7be0] ref B L0: 82.4% 16.2% 1.4%
[libx264 @ 0x12c7be0] ref B L1: 91.0% 9.0%
[libx264 @ 0x12c7be0] kb/s:1459.47
ffprobe out.mp4
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xaf7c40] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 640x480, 1459 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.36.100
Duration: 01:00:11.88, start: -8.042667, bitrate: 1606 kb/s
Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 640x480, 1459 kb/s, 29.97 fps, 29.97 tbr, 11988 tbn, 23976 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 139 kb/s (default)
Metadata:
handler_name : SoundHandler
mencoder in.mpg -oac pcm -ovc raw -o out2.avi
tons of 1 duplicate frame(s)! warnings. video not synced
mencoder in.mpg -ovc copy -mc 0 -noskip -vf harddup -oac pcm -o out2.mpg
works partially, seems to be the closest fix, no warnings in the output, but loses sync (in this example) at 00:28:48, where the video stream seems to jump some frames at that time
Sie haben nicht angegeben, ob Sie die ersten 8 Sekunden Audio möchten (anscheinend nicht), aber Sie können die Eingabe mit ffmpeg (deMux) in separate Video- und Audiodateien aufteilen.
Verwenden Sie dann bei einem zweiten Aufruf von ffmpeg "-ss" vor dem "-i" des Audios, um die ersten 8,07 Sekunden abzuschneiden, und verwenden Sie "-copy", um sie wieder zusammenzufügen (dies ist verlustfrei).
Die Verwendung von "-itsoffset" vor dem "-i" des Streams mit "-copy" ist eine andere Lösung. Die Verwendung von "-aresample" kann die Länge des Audios ändern, aber Sie ruinieren Lipsync, wenn es sich um ein Video mit sprechenden Personen handelt (im Gegensatz zu beispielsweise einem Video mit Personen, die mit Verkehrslärm die Straße entlang gehen).
Eine ALTE Frage, die lange Zeit unbeantwortet blieb (und in der unbeantworteten Warteschlange saß). Vielleicht gut für ein Nekromanten-Abzeichen.
Referenz: https://ffmpeg.org/ffmpeg.html
Logan
ffmpeg
? Ein Beispielbefehl und die vollständige Konsolenausgabe wären informativ (Sie können Zeilen kürzen, die sich immer wieder wiederholen).brasofilo
König
ffmpeg version 2.7.2
undMEncoder SVN-r37440
. Ich bin mir nicht sicher, wie hilfreich es sein wird, aber ich habe einige Beispielbefehle und -ausgaben in ein Update oben eingefügt.