Согласно странице справочника для getaddrinfo()
, можно передать семейство адресов в hints
параметр, таким образом, что-то как
struct addrinfo hints, *result; int s; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; /* or AF_INET6 for ipv6 addresses */ s = getaddrinfo(NULL, "ftp", &hints, &result); ...
Я не попробовал это, но подход, кажется, является правильным.
Я думаю, что если вы анализуете выход FFMPEG, вы можете добиться этого частично, но остерегайтесь документации Labyrinthe на том, как кодировать для достижения наилучших результатов. Это немного сложно.
Возможно, альтернативный подход состоит в том, чтобы найти общий стандарт, параметры которого могут быть установлены один и оставить вашу работу транскодер, работающую на всех A, B и т. Д.
Нет Невозможно, чтобы все параметры совпадали с параметрами B. Нужно скомпрометировать или настроить какой-то атрибут видео A, чтобы другой атрибут видео A совпадал с видео B.
.Значит, вы делаете свой собственный анализатор.
Вы можете использовать ffmpeg (путь к ffmpeg — это $exe )с конвейером grep/sed/awk для извлечения информации в переменные, используйте конструкции if -elif ($A — это путь к файлу A)
Вот пример получения видеокодека, разрешения видео, частоты кадров и сброса не более 24 кадров в секунду, а также получения частоты кодирования звука.
videoa=`$exe -i $A 2>&1 | grep Stream.*Video | sed -e 's/.*Video: //' -e 's/[, ].*//'`
if [ $videoa = "h264" ];then videob="-c:v libx264"
elif [ $videoa = "hevc" ];then videob="-c:v libx265"
fi
resolution=$($exe -i "$f" 2>&1 | grep -oP 'Stream.*, \K[0-9]+x[0-9]+')
crop="crop=960:544:0:2,"
if [ $(echo $($exe -i "$f" 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p") | awk '{printf "%.0f\n", $1}';) -gt 24 ];then r="-r 24";else r=""; fi
if [ $(echo $($exe -i "$f" 2>&1 | sed -n "s/.*, \(.*\) Hz.*/\1/p") | awk '{printf "%.0f\n", $1}';) -gt 44100 ];then af="-ar 44100";else af=""; fi
video="-map_chapters -1 -map_metadata -1 -vf ${crop}scale=${resolution},setsar=1/1,setdar=16/9 $videob -an $r"
$exe -y -ss $ss -i "$f" -t $t -map 0:v:0 $video $v