fix: adjust examples for v6.0 API changes

This commit is contained in:
tilpner
2023-05-24 17:22:59 +02:00
committed by Till Höppner
parent 1d7022e63d
commit 9caddc3c2d
5 changed files with 36 additions and 32 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ fn main() -> Result<(), ffmpeg::Error> {
let input = ictx.streams().best(Type::Video).ok_or(ffmpeg::Error::StreamNotFound)?;
let video_stream_index = input.index();
let mut decoder = input.codec().decoder().video()?;
let mut decoder = input.decoder()?.video()?;
let mut scaler = Context::get(
decoder.format(),
+9 -8
View File
@@ -44,12 +44,14 @@ fn main() {
println!("\tdiscard: {:?}", stream.discard());
println!("\tframe rate: {}", stream.frame_rate());
let codec = stream.codec();
println!("\tmedium: {:?}", codec.medium());
println!("\tid: {:?}", codec.id());
let codec_par = stream.parameters();
println!("\tmedium: {:?}", codec_par.medium());
println!("\tid: {:?}", codec_par.id());
if codec.medium() == ffmpeg::media::Type::Video {
if let Ok(video) = codec.decoder().video() {
let dec = stream.decoder().expect("Unable to open decoder");
if codec_par.medium() == ffmpeg::media::Type::Video {
if let Ok(video) = dec.video() {
println!("\tbit_rate: {}", video.bit_rate());
println!("\tmax_rate: {}", video.max_bit_rate());
println!("\tdelay: {}", video.delay());
@@ -70,8 +72,8 @@ fn main() {
println!("\tvideo.intra_dc_precision: {}", video.intra_dc_precision());
}
}
else if codec.medium() == ffmpeg::media::Type::Audio {
if let Ok(audio) = codec.decoder().audio() {
else if codec_par.medium() == ffmpeg::media::Type::Audio {
if let Ok(audio) = dec.audio() {
println!("\tbit_rate: {}", audio.bit_rate());
println!("\tmax_rate: {}", audio.max_bit_rate());
println!("\tdelay: {}", audio.delay());
@@ -81,7 +83,6 @@ fn main() {
println!("\taudio.frames: {}", audio.frames());
println!("\taudio.align: {}", audio.align());
println!("\taudio.channel_layout: {:?}", audio.channel_layout());
println!("\taudio.frame_start: {:?}", audio.frame_start());
}
}
}
+4 -3
View File
@@ -1,6 +1,6 @@
use std::env;
use ffmpeg::{codec, encoder, format, media, Rational};
use ffmpeg::{format, media, Rational};
fn main() {
let input_file = env::args().nth(1).expect("missing input file");
@@ -15,7 +15,8 @@ fn main() {
let mut ist_time_bases = vec![Rational(0, 1); ictx.nb_streams() as _];
let mut ost_index = 0;
for (ist_index, ist) in ictx.streams().enumerate() {
let ist_medium = ist.codec().medium();
let codec_par = ist.parameters();
let ist_medium = codec_par.medium();
if ist_medium != media::Type::Audio && ist_medium != media::Type::Video && ist_medium != media::Type::Subtitle {
stream_mapping[ist_index] = -1;
continue;
@@ -23,7 +24,7 @@ fn main() {
stream_mapping[ist_index] = ost_index;
ist_time_bases[ist_index] = ist.time_base();
ost_index += 1;
let mut ost = octx.add_stream(encoder::find(codec::Id::None)).unwrap();
let mut ost = octx.add_stream().unwrap();
ost.set_parameters(ist.parameters());
// We need to set codec_tag to 0 lest we run into incompatible codec tag
// issues when muxing into a different container format. Unfortunately
+8 -8
View File
@@ -1,6 +1,6 @@
use std::{env, path::Path};
use ffmpeg::{codec, filter, format, frame, media, rescale, Rescale};
use ffmpeg::{channel_layout::ChannelLayout, codec, filter, format, frame, media, rescale, Rescale};
fn filter(
spec: &str,
@@ -10,11 +10,11 @@ fn filter(
let mut filter = filter::Graph::new();
let args = format!(
"time_base={}:sample_rate={}:sample_fmt={}:channel_layout=0x{:x}",
"time_base={}:sample_rate={}:sample_fmt={}:channel_layout={}",
decoder.time_base(),
decoder.sample_rate(),
decoder.format().name(),
decoder.channel_layout().bits()
decoder.channel_layout().describe().unwrap()
);
filter.add(&filter::find("abuffer").unwrap(), "in", &args)?;
@@ -64,7 +64,7 @@ fn transcoder<P: AsRef<Path>>(
.streams()
.best(media::Type::Audio)
.expect("could not find best audio stream");
let mut decoder = input.codec().decoder().audio()?;
let mut decoder = input.decoder()?.audio()?;
let codec = ffmpeg::encoder::find(octx.format().codec(path, media::Type::Audio))
.expect("failed to find encoder")
.audio()?;
@@ -75,13 +75,13 @@ fn transcoder<P: AsRef<Path>>(
decoder.set_parameters(input.parameters())?;
let mut output = octx.add_stream(codec)?;
let mut encoder = output.codec().encoder().audio()?;
let mut output = octx.add_stream()?;
let mut encoder = codec::Encoder::new(codec)?.audio()?;
let channel_layout = codec
.channel_layouts()
.map(|cls| cls.best(decoder.channel_layout().channels()))
.unwrap_or(ffmpeg::channel_layout::ChannelLayout::STEREO);
.unwrap_or(ChannelLayout::STEREO);
if global {
encoder.set_flags(ffmpeg::codec::flag::Flags::GLOBAL_HEADER);
@@ -98,7 +98,7 @@ fn transcoder<P: AsRef<Path>>(
output.set_time_base((1, decoder.sample_rate() as i32));
let encoder = encoder.open_as(codec)?;
output.set_parameters(&encoder);
output.set_parameters(encoder.parameters());
let filter = filter(filter_spec, &decoder, &encoder)?;
+14 -12
View File
@@ -24,7 +24,7 @@ const DEFAULT_X264_OPTS: &str = "preset=medium";
struct Transcoder {
ost_index: usize,
decoder: decoder::Video,
encoder: encoder::video::Video,
encoder: encoder::Video,
logging_enabled: bool,
frame_count: usize,
last_log_frame_count: usize,
@@ -41,9 +41,11 @@ impl Transcoder {
enable_logging: bool,
) -> Result<Self, ffmpeg::Error> {
let global_header = octx.format().flags().contains(format::Flags::GLOBAL_HEADER);
let decoder = ist.codec().decoder().video()?;
let mut ost = octx.add_stream(encoder::find(codec::Id::H264))?;
let mut encoder = ost.codec().encoder().video()?;
let decoder = ist.decoder()?.open()?.video()?;
let mut ost = octx.add_stream()?;
let codec = encoder::find(codec::Id::H264).unwrap();
let mut encoder = codec::Encoder::new(codec)?.video()?;
encoder.set_height(decoder.height());
encoder.set_width(decoder.width());
encoder.set_aspect_ratio(decoder.aspect_ratio());
@@ -53,15 +55,14 @@ impl Transcoder {
if global_header {
encoder.set_flags(codec::Flags::GLOBAL_HEADER);
}
encoder
let encoder = encoder
.open_with(x264_opts)
.expect("error opening libx264 encoder with supplied settings");
encoder = ost.codec().encoder().video()?;
ost.set_parameters(encoder);
ost.set_parameters(encoder.parameters());
Ok(Self {
ost_index,
decoder,
encoder: ost.codec().encoder().video()?,
encoder,
logging_enabled: enable_logging,
frame_count: 0,
last_log_frame_count: 0,
@@ -117,7 +118,7 @@ impl Transcoder {
return;
}
eprintln!(
"time elpased: \t{:8.2}\tframe count: {:8}\ttimestamp: {:8.2}",
"time elapsed: \t{:8.2}\tframe count: {:8}\ttimestamp: {:8.2}",
self.starting_time.elapsed().as_secs_f64(),
self.frame_count,
timestamp
@@ -163,7 +164,7 @@ fn main() {
let mut transcoders = HashMap::new();
let mut ost_index = 0;
for (ist_index, ist) in ictx.streams().enumerate() {
let ist_medium = ist.codec().medium();
let ist_medium = ist.parameters().medium();
if ist_medium != media::Type::Audio && ist_medium != media::Type::Video && ist_medium != media::Type::Subtitle {
stream_mapping[ist_index] = -1;
continue;
@@ -183,9 +184,10 @@ fn main() {
)
.unwrap(),
);
} else {
}
else {
// Set up for stream copy for non-video stream.
let mut ost = octx.add_stream(encoder::find(codec::Id::None)).unwrap();
let mut ost = octx.add_stream().unwrap();
ost.set_parameters(ist.parameters());
// We need to set codec_tag to 0 lest we run into incompatible codec tag
// issues when muxing into a different container format. Unfortunately