mirror of
https://github.com/encounter/rust-ffmpeg.git
synced 2026-07-10 21:18:39 -07:00
fix: adjust examples for v6.0 API changes
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user