.MOV 文件在任何编辑器中都有音频同步错误,但在 VLC 中播放正常

.MOV 文件在任何编辑器中都有音频同步错误,但在 VLC 中播放正常

我有一个包含 H.264 1080p 视频和原始 16 位 PCM 音频的 .mov 文件,我需要对其进行编辑(删除其中的一部分)。

原始文件在 Gnome 的电影播放器​​和 VLC 中播放正常,但是当我在任何编辑器中打开该文件时,它都会失败,音频会中断(因为大约一半之后就没有音频了 - 这里不是在说几毫秒!)

我尝试过的编辑器/转码器:VLC、Handbrake、Avidemux、OpenShot。

我不明白为什么原版播放正常,但无法转码或在编辑器中打开,否则会出现此问题。在转码器上,我尝试了各种音频/视频/容器的组合。

有人知道一个可靠的方法,或者我可能做错了什么?

(我使用的是 Ubuntu 12.04)

请求如下:

$ffmpeg -i VBFT\ FINAL.mov 
ffmpeg version N-54234-gef90639 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jun 28 2013 05:26:06 with gcc 4.6 (Debian 4.6.3-1)
  configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil      52. 37.101 / 52. 37.101
  libavcodec     55. 17.100 / 55. 17.100
  libavformat    55. 10.100 / 55. 10.100
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x388f6a0] multiple edit list entries, a/v desync might occur, patch welcome
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VBFT FINAL.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2013-03-04 16:54:43
  Duration: 00:02:37.24, start: 0.000000, bitrate: 9349 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 4017 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Metadata:
      creation_time   : 2013-03-04 16:54:43
      handler_name    : Apple Alias Data Handler
      timecode        : 01:00:00:00
    Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s
    Metadata:
      creation_time   : 2013-03-04 16:54:43
      handler_name    : Apple Alias Data Handler
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74)
    Metadata:
      creation_time   : 2013-03-04 16:54:51
      handler_name    : Apple Alias Data Handler
      timecode        : 01:00:00:00
At least one output file must be specified

答案1

您可以尝试手动提取音频,然后将其合并回去:

ffmpeg -i input.mov -c:a copy out.wav
ffmpeg -i input.mov -i out.wav -c:v copy -c:a libfaac -map 0 -map 1 out.mp4

生成的 MP4 文件将包含原始视频流和编码为 AAC 音频的音频流,MP4 容器支持该音频流。这样您就可以在任何视频编辑程序中轻松编辑该文件。

或者,如果你想要剪掉某些东西,你可以立即这样做ffmpeg

ffmpeg -i input.mov -i out.wav -ss 00:01:23 -c:v copy -c:a libfaac -to 00:02:34 -map 0:v -map 1 out.mp4

这里,-ss-to分别指定开始和停止时间戳。-map 0:v -map 1指示ffmpeg将第一个输入文件和第二个文件的视频流完全映射到输出。

相关内容