LINUX.ORG.RU

ffmpeg recode audio with different options in one file?

 , ,


0

1
Приветствую!
задался целью написать скрипт для конвертации .mkv файлов, дабы
пережимать аудио в них, ежели оно закодировано в dts ( грёбанный телевизор LG DTS напрочь непонимает.
но - скажем, в фильме две и даже три дорожки. англицкая на DTS, которую нам надо бы пережать в чтото попроще ( скажем двухканальный либ - ворбис), а вот русская, скажем, в ac3, и её  пережимать незачем - как такое организовать?

по моим нынешним изысканиям если указать пережатие аудио - оно для всех потоков будет исполнятся. можно ли отдельно для каждого потока указать кодек?



bash-3.2$ cat ffmpeg_recode_dts.scr 
#!/bin/bash


fullfile=$1
filename=«${fullfile%.*}»
final_fname=$filename_mp3.mkv



ffmpeg -i «$1»  -vcodec copy  -map 0:0 -map 0:2 -ac 2 -ab 192k  -map 0:1 -scodec copy  -map 0:3 -map 0:4 $final_fname


если туда добавить -acodec copy , то оба аудиопотока - и 0:1 , который ac3, и 0:2, который dts, просто копируются...
если не указать - оба перекодируются в 

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:2 -> #0:1 (dts (dca) -> vorbis (libvorbis))
  Stream #0:1 -> #0:2 (ac3 (native) -> vorbis (libvorbis))
  Stream #0:3 -> #0:3 (copy)
  Stream #0:4 -> #0:4 (copy)


Ответ на: комментарий от anonymous

окуительо,окуительно!!!

большой вам Гутенмоген!

<s>а в магазине стеночку тоже так убрать можно</s> а как это сделать, неподскажете:

final_fname=$filename_mp3.mkv

если вот так оставить, то $final_fname получается .mkv. если вместо знака подчёркивания постваить точку, типа $filename.mp3.mkv, то фацлнейм получается а-ля Rogue_one_1080p_TS.mp3.mkv , то есть с точкой ренейм получается правильно, а вот с нижним подчёркиванием - фиг...

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

Фиг поймешь тебя.

Может поможет:

#!/bin/sh

PATH=/run/media/xxx/yyy

for i in *.mkv ; do 
    OUTNAME="${i[@]/%mkv/mp4}"
    ffmpeg -i "$i" -c:v copy -c:a libfdk_aac -ac 2 -b:a 100k "$PATH/$OUTNAME" 
    sleep 60 
done

anonymous
()
Ответ на: комментарий от wisedraco

Фиг поймешь тебя.

плюсую
предположим, что в $1 передаётся video.mkv

fullfile="$1"
...
... -f matroska "${fullfile%.*}_mp3.mkv"
video_mp3.mkv
Ты про это?

yrii2121
()
Ответ на: комментарий от yrii2121

video_mp3.mkv

Ты про это?

да, точно, спасибо громадное всем! правда, у меня нихрена моя новая мегаконструкция работать не хочет:

ffmpeg -i "$1"  -vcodec copy  -map 0:0  -c:a:6 ac3 -c:a:7 ac2 -map 0:2 -ac 2 -ab 192k  -map 0:1 -c:a:4 ac3 -c:a:3 copy -c:a:5 copy \
-scodec copy -c:s:12 copy -c:s:13 copy -c:s:11 copy -c:s:10 copy -c:s:9 copy -c:s:8 copy   $final_fname

ибо начинает конвертить только видео и две аудиодорожки ( второй и первый стрим), хотя аудиодорог там с первую по седьмую, и титров с восьмой по тринадцатый... :-О

ffmpeg -i "$1"  -c:v copy  -c:a:6 ac3 -c:a:7 copy -c:a:2 copy -c:a:1 $final_fname

а такая укороченная для эксперименту, вообще заявляет что ат лист адин оутпут файл маст бе спесифайд :-О

но это ладно, с этим всем я методом научного тыка разберусь... спасибо за помощь, и хорошего вам вечера! :)

wisedraco ★★
() автор топика
Ответ на: комментарий от wisedraco

https://trac.ffmpeg.org/wiki/Map

мож кому пригодится.

если мап-ом, как в примере, сначала не разложить, творится нелогичное черти-что - например указан -c:a:7, а кодируется почему то второй аудиоканал :-О

wisedraco ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.