2

У меня есть видеофайл .mov , для которого ffprobe/avprobe сообщает:

$ avprobe -show_streams test.mov

    Stream #0.0(eng): Video: dvvideo, yuv420p, 720x576 [PAR 64:45 DAR 16:9], 28811 kb/s, PAR 236:162 DAR 295:162, 25.01 fps, 2500 tbn, 25 tbc
    Metadata:
      creation_time   : 2015-08-27 09:10:44
    Stream #0.1(eng): Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      creation_time   : 2015-08-27 09:10:44
    Stream #0.2(eng): Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      creation_time   : 2015-08-27 09:10:44
    Stream #0.3(eng): Data: tmcd / 0x64636D74
Unsupported codec with id 0 for input stream 3
...
[streams.stream.1]
index=1
codec_name=pcm_s16le
codec_long_name=PCM signed 16-bit little-endian
codec_type=audio
codec_time_base=1/48000
codec_tag_string=sowt
codec_tag=0x74776f73
sample_rate=48000.000000
channels=1
bits_per_sample=16
...
[streams.stream.2]
index=2
codec_name=pcm_s16le
codec_long_name=PCM signed 16-bit little-endian
codec_type=audio
codec_time_base=1/48000
codec_tag_string=sowt
codec_tag=0x74776f73
sample_rate=48000.000000
channels=1
bits_per_sample=16
...
[streams.stream.3]
index=3
codec_name=unknown
codec_type=data
codec_time_base=0/1
codec_tag_string=tmcd
codec_tag=0x64636d74
avg_frame_rate=0/0
time_base=1/2500
start_time=0.000000
duration=32.760000
nb_frames=1
...

Теперь из этого я не могу сказать, как кодируется звук (если он не распакован), и я не могу сказать, являются ли эти три аудиопотока своего рода объемным звуком (и один из них также не может быть обнаружен) - но я думаю, это потому, что mediainfo сообщает для одного и того же файла:

Audio #1 ...
Codec ID                                 : sowt
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
...
Audio #2 ...
Codec ID                                 : sowt
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
...
Audio #3 ...
Muxing mode, more info                   : Muxed in Video #1
Channel(s)                               : 2 channels
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
...

Итак, есть ли командная строка Linux, которую я мог бы использовать, чтобы извлечь все эти аудиопотоки из видеофайла за один раз; то есть эта команда псевдокода:

my_command --extract-all-audio-streams test.mov

... в этом случае должно получиться три аудиофайла, соответствующих трем потокам.

Особенно:

  • Какую команду я могу использовать, чтобы потоки извлекались без преобразования из файла, схоже с -acodec copy ffmpeg - и чтобы автоматически назначались расширения файлов (т. Е. Если это несжатый звук, то .wav , если он закодирован в AAC), затем .aac т. д.)
  • Какую команду я могу использовать, чтобы извлекаемые потоки преобразовывались в несжатый звук с теми же настройками, что и потоки? То есть результирующий test_s01.wav будет моно /48,0 кГц /16 бит, test_s02.wav будет также моно /48,0 кГц /16 бит, а test_s03.wav будет стерео /48,0 кГц /16 бит?

1 ответ1

0

Хорошо нашел что-то с файлами ffmpeg/avconv и .wav; это не совсем автоматически, но это одна строка, извлекающая аудио. Во-первых, используйте ffprobe/avprobe как в OP или ffmpeg -i/avconv -i для получения информации о потоке; из ОП:

Stream #0:0(eng): Video:
Stream #0:1(eng): Audio:
Stream #0:2(eng): Audio:
Stream #0:3(eng): Data:

Таким образом, аудио потоки 0:1 и 0:2 (примечание ffprobe/avprobe пишет точку в качестве разделителя, ./ffmpeg -i пишет avconv -i И те , которые мы хотим сохранить как .wav файлы - так это команда:

avconv -i test.mov \
  -map '0:1' -vn -acodec copy test-01.wav \
  -map '0:2' -vn -acodec copy test-02.wav

... и, по крайней мере, в моем случае, полученные wavs имеют идентичные свойства с потоками:

$ mediainfo *.wav
...
Channel(s)                               : 1 channel
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
...
Channel(s)                               : 1 channel
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits

Теперь мне кажется, что эти два "моно" "центральных" канала на самом деле являются левым и правым каналами - и поток 3, даже если он называется "Аудио", это все еще тип "data", и, возможно, это просто дескриптор как эти моно каналы L и R mediainfo (согласно отчету mediainfo «Режим мультиплексирования, больше информации»)?!

Тем не менее, было бы здорово узнать, есть ли инструмент, который может делать такие вещи автоматически ...


Я бы подумал, что нужно использовать фильтры, поэтому я попробовал это:

avconv -i test.mov -filter_complex '[0:1] copy [a1]; [0:2] копия [a2] '\
-map '[a1]' -acodec copy test-01.wav \
-map '[a2]' -acodec copy test-02.wav
... но это не с Stream specifier ':1' in filtergraph description [0:1] copy [a1]; [0:2] copy [a2] matches no streams. не очень понимаю, почему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .