Kopieren von Audio aus einem Quicktime mit ffmpeg

0

Ich versuche nur das Audio eines Quicktimes zu kopieren.

>"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -vn -acodec pcm_s16le a.wav

Hier ist meine Ausgabe. Entschuldigung für die Formatierung.

ffmpeg version N-66673-gf0d1b3a Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct  6 2014 22:10:42 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  3.101 / 56.  3.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf56.7.104
  Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
 628 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 libx264
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : DataHandler
Output #0, wav, to 'a.wav':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    ISFT            : Lavf56.7.104
    Stream #0:0(eng): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo
, s16, 1536 kb/s (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 pcm_s16le
Stream mapping:
  Stream #0:1 -> #0:0 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=     460kB time=00:00:02.45 bitrate=1536.3kbits/s
video:0kB audio:460kB subtitle:0kB other streams:0kB global headers:0kB muxing o
verhead: 0.016559%

Eine WAV-Datei wird generiert. Wenn Sie jedoch die WAV-Datei und die Original-Quicktime in Pro Tools bereitstellen, können Sie feststellen, dass die WAV-Datei nicht mit dem Timing der Original-QuickTime übereinstimmt. Das Audio in der WAV-Datei ist ungefähr eineinhalb Sekunden zu spät.

Ich habe versucht, die Bitrate und die Frequenz manuell einzustellen.

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -b:a 87k -ar 48000 -acodec pcm_s16le -vn a.wav



"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -ar 48000 -acodec pcm_s16le -vn a_did_not_set_bitrate.wav

Kein Befehl machte einen Unterschied. Hat jemand dieses Problem schon einmal gesehen? Irgendwelche Ideen, wie man es löst?

Bearbeiten:

Ich habe gerade etwas Seltsames in der Ausgabe bemerkt. Zu Beginn wurde die Dauer auf Folgendes festgelegt:

Duration: 00:00:02.44

Nachdem der Wav erzeugt wurde, wurde die Zeit wie folgt aufgezeichnet:

time=00:00:02.45

Wurde der wav-Datei zusätzliche Zeit hinzugefügt?

Zusatz 26.04.16:

Interessant.

>"C:\Program Files\ffmpeg\bin\ffprobe.exe" -select_streams a -read_intervals %+#1 -show_entries packet=pts_time a.mov
ffprobe version N-66673-gf0d1b3a Copyright (c) 2007-2014 the FFmpeg developers
  built on Oct  6 2014 22:10:42 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en
able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  3.101 / 56.  3.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf56.7.104
  Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
 628 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 libx264
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12
9 kb/s (default)
    Metadata:
      handler_name    : DataHandler
[PACKET]
pts_time=-0.021333
[/PACKET]

Versuch, diesen Befehl aufzubrechen.

"C: \ Programme \ ffmpeg \ bin \ ffprobe.exe" -select_streams -read_intervals% + # 1 -show_entries package = pts_time a.mov

Soweit ich das beurteilen kann, bedeutet es, ein Paket aus den Audioströmen zu lesen und die PTS-Zeit anzuzeigen, die sich auf einen Präsentationszeitstempel bezieht.

Bedeutet das, dass das Audio vor dem Video beginnt? Vielleicht startet es 0,021333 Sekunden vor dem Video.

Zusatz 27.04.16:

Ausführen des gleichen Befehls mit v zum -select_streams ergibt:

[PACKET]
pts_time=0.000000
[/PACKET]
Christopher Spears
quelle
Führen Sie den gleichen ffprobe-Befehl aber mit aus v für select_streams
Gyan

Antworten:

1

Das Problem liegt darin, dass Ihre QuickTime-Datei eine Trimmung enthält, die von FFMPEG ignoriert wird, sofern Sie nicht explizit die Trimmung für die Datei durchführen Eingang Datei über die Option -ss.

Sie können sehen, dass Ihre QuickTime-Datei tatsächlich 0,021333 ms in der Datei durch "start: 0.021333" in dieser Zeile beginnt:

 Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s

Um dies zu beheben, versuchen Sie bitte den folgenden Befehl:

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -ss 0.021333 -i a.mov -vn -acodec pcm_s16le a.wav

Bitte beachten Sie die Option -ss Muss Vor der Eingabedatei (-i) muss dies korrekt funktionieren.

In meinem Programm rufe ich FFProbe auf, rufe den Offset auf und wende ihn dann auf den FFMPEG-Befehl an, um sicherzustellen, dass keine Synchronisierungsprobleme auftreten. Ich glaube, was Sie suchen, ist "start_time" in FFProbe.

Viel Glück!

Steve Ferguson
quelle
0

Versuche dies:

Extrahieren Sie zunächst Audio in einen Rohcontainer

ffmpeg.exe -y -i a.mov -vn -acodec copy a.aac

Wenn Sie dies in Pro Tools verwenden können, sind Sie fertig. Sonst,

ffmpeg.exe -y -i a.aac -acodec pcm_s16le a.wav
Gyan
quelle
Sieht aus, als könnte Pro Tools die aac-Datei nicht lesen. Die von mir erzeugte WAV-Datei hat immer noch das gleiche Problem. Trotzdem danke!
Christopher Spears
Fügen Sie die Ausgabe von ein ffprobe -select_streams a -read_intervals %+#1 -show_entries packet=pts_time a.mov
Gyan